基于蓝牙模块HC05的手机控制灯开关的小项目

您所在的位置:网站首页 手机控制家里的灯开关灯 基于蓝牙模块HC05的手机控制灯开关的小项目

基于蓝牙模块HC05的手机控制灯开关的小项目

2024-07-10 21:09| 来源: 网络整理| 查看: 265

(第一次发文章,如果有问题请轻喷,谢谢!)

        本人使用的蓝牙模块是在优信电子购买的HC05蓝牙模块JDY-31,刚开始想要参照正点原子的HC05模块教程去编写,但感觉之前没怎么了解过他家的编写思维,代码看起来很乱,所以就自己写了一个,结果半天发不出去信息,最后发现是自己的串口代码移植过来的时候配置时忘记把串口1改成串口2了.。。。

        其实这款蓝牙模块的使用非常简单,只要你会配置串口1的相关函数,把他的函数拿过来,直接把串口1改成串口2就行,该蓝牙模块有VCC,GND,RXD, TXD,STATE, EN六个引脚,EN是浮空的,所以不用接线,state接不接都可以(所以我也不知道他有啥用,直接搞成四个脚不是更节省成本?)

以下是函数,如有问题欢迎指正

HC05相关函数

/*********************************************** *函数名    :usart2_init *函数功能  :串口1初始化配置函数 *函数参数  :u32 baud *函数返回值:无 *函数描述  :PA2-------Tx                         PA3------Rx ************************************************/ void usart2_init(void) {     /*IO控制器配置*/     /*1、端口时钟使能*/     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟     /*2、创建一个端口配置结构体*/     GPIO_InitTypeDef GPIO_InitStruct = {0};//清零     /*3、设置输出的端口*/     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;//配置PA2/3     /*4、端口模式配置*/     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//配置为复用模式     /*5、端口输出类型配置*/     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//配置为推挽类型     /*6、端口上下拉配置*/     GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//配置为无上下拉     /*7、端口输出速度配置*/     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//50M输出速度     /*8、使用初始化函数配置*/     GPIO_Init(GPIOA, &GPIO_InitStruct);     /*9、复用功能配置*/     GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2);     GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2);          /*串口控制器配置*/     /*1、串口2时钟使能*/     RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);     /*2、创建一个端口配置结构体*/     USART_InitTypeDef USART_InitStruct = {0};//清零     /*3、设置波特率*/     USART_InitStruct.USART_BaudRate = 9600;     /*4、硬件流设置*/     USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件流     /*5、模式设置*/     USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//发送接收     /*6、奇偶校验设置*/     USART_InitStruct.USART_Parity = USART_Parity_No;//无奇偶校验     /*7、停止位设置*/     USART_InitStruct.USART_StopBits = USART_StopBits_1;//一个停止位     /*8、字节长度设置*/     USART_InitStruct.USART_WordLength = USART_WordLength_8b;//8个字长     /*9、使用初始化函数配置*/     USART_Init(USART2, &USART_InitStruct);     /*10、中断使能*/     USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//接收中断使能     USART_ITConfig(USART2, USART_IT_IDLE, ENABLE);//空闲中断使能   /*NVIC控制器配置*/     /*1、优先级分组*/     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//优先级分组     /*2、创建一个端口配置结构体*/     NVIC_InitTypeDef NVIC_InitStruct = {0};     /*3、中断源设置*/     NVIC_InitStruct.NVIC_IRQChannel = USART2_IRQn;     /*4、响应通道使能*/     NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;     /*5、设置抢占优先级级别值*/     NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;     /*6、设置响应优先级级别值*/     NVIC_InitStruct.NVIC_IRQChannelSubPriority = 2;     /*7、使用初始化函数配置*/     NVIC_Init(&NVIC_InitStruct);

    //串口使能     USART_Cmd(USART2, ENABLE); }

/*********************************************** *函数名    :hc05_init *函数功能  :串口1初始化配置函数 *函数参数  :u32 baud *函数返回值:无 *函数描述  :PA4——STATE                          ************************************************/ void hc05_init(void) {     usart2_init(); } /*********************************************** *函数名    :usart2_send_byte *函数功能  :串口2发送一个字节函数 *函数参数  :u8 data *函数返回值:无 *函数描述  : ***********************************************/ void usart2_send_byte(u8 data) {     //等待上一位发送完成     while(!USART_GetFlagStatus(USART2, USART_FLAG_TC ));//发送完成标志位为0     USART_SendData(USART2, data); }

/*********************************************** *函数名    :usart2_send_str *函数功能  :串口2发送多字节函数 *函数参数  :u8 *str *函数返回值:无 *函数描述  : ***********************************************/ void usart2_send_str(u8 *str) {     while(*str != '\0')     {         usart2_send_byte(*str);         str++;     } } /***************************************************** 函数功能:hc05接收数据 函数形参:void 函数返回值:void 函数说明:         *****************************************************/ u8 usart2_rec_buff[20]; void USART2_IRQHandler(void) {     static u8 i = 0;     //判断是接收中断     if(USART_GetITStatus(USART2, USART_IT_RXNE))     {         //清除中断标志位         USART_GetITStatus(USART2, USART_IT_RXNE);         //紧急事件         usart2_rec_buff[i] = USART_ReceiveData(USART2);         i++;     }     //判断是空闲中断     if(USART_GetITStatus(USART2, USART_IT_IDLE))     {         //清除中断标志位         USART2->SR;         USART2->DR;         //紧急事件         usart2_rec_buff[i] = '\0';         i = 0;//清零         printf("接收到的字符串是%s\r\n", usart2_rec_buff);     } }

LED灯相关配置函数

/********************************** *函数名    :led_init *函数功能  :LED所用IO初始化配置 *函数参数  :无 *函数返回值:无 *函数描述  :PB8——LED_R/LED4                         P89——LED_G/LED3 **********************************/ void led_init(void) {     /*1、端口时钟使能*/     RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟     /*2、创建一个端口配置结构体*/     GPIO_InitTypeDef GPIO_InitStruct = {0};//清零     /*3、设置输出的端口*/     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;//配置PC4/5/6/7     /*4、端口模式配置*/     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//配置为输出模式     /*5、端口输出类型配置*/     GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//配置为推挽输出类型     /*6、端口上下拉配置*/     GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//配置为无上下拉     /*7、端口输出速度配置*/     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;//2M输出速度     /*8、使用初始化函数配置*/     GPIO_Init(GPIOC, &GPIO_InitStruct);     /*9、配置输出数据寄存器*/     GPIO_SetBits(GPIOC, GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);//配置为高电平,关灯 }

/********************main函数***********************************/ int main() { //    u8 key = 0;          NVIC_PriorityGroupConfig( NVIC_PriorityGroup_2);  //优先级分组     led_init();//LED初始化     key_init();//按键初始化     usart1_init(9600);串口一初始化     hc05_init();//HC05初始化,其实就是串口2初始化               while(1)     {         if(strcmp(usart2_rec_buff,"on")==0)//接收的字符串有on就开灯         {             LED1_ON;//这个是我自己定义的宏GPIO_ResetBits(GPIOC, GPIO_Pin_4)         }         if(strcmp(usart2_rec_buff,"off")==0)//接收的字符串有off就关灯         {             LED1_OFF;//这个是我自己定义的宏GPIO_SetBits(GPIOC, GPIO_Pin_4)         }     } }

下载到板子后,下载厂家给你的蓝牙apk到手机上,搜索蓝牙名字连接,就可以收发数据了,发送数据就使用一下串口发送字符串函数就行,在这个基础上添加一些传感器配置,也可以发到手机上



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3