文章目录
一、HC-01蓝牙模块介绍
蓝牙模块,又叫做蓝牙串口模块
串口透传技术:
透传即透明传送,是指在数据的传输过程中,通过无线的方式这组数据不发生任何形式的改变,仿佛传输过程是透明的一样,同时保证传输的质量,原封不动地到了最终接收者手里
以太网,蓝牙,Zigbee, GPRS 等模块玩法一样,对嵌入式程序员来说,不需要关心通讯模块内部数据及协议栈工作原理,只要通过串口编程获得数据即可
修改蓝牙名称:
二、项目实战
项目需求
通过蓝牙模块,实现手机控制蓝牙插座/风扇/灯。
本质:
- 采用蓝牙的透传功能;
- 控制 IO 口的输出。
项目框图:
硬件清单
HC01蓝牙模块
CH340
杜邦线
项目设计
HC01_TX – RX1
HC01_RX – TX1
项目实现:
- 串口非中断法
HAL_UART_Receive(&huart1, ch, 19, 100);
//HAL_UART_Transmit(&huart1, ch, strlen(ch), 100);
//printf((char *)ch);
printf("%s", ch);
if (!strcmp((const char *)ch, "open")) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_RESET)
printf("LED1已打开\n");
}else if(!strcmp((const char *)ch, "close")) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET)
printf("LED1已关闭\n");
} else {
if(ch[0] != '\0')
printf("指令发送错误:%s", ch);
}
- 串口中断法
printf("收到数据:");
if (!strcmp((const char *)UART1_RX_Buffer, "open")) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_RESET);
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_RESET)
printf("LED1已打开\n");
}else if(!strcmp((const char *)UART1_RX_Buffer, "close")) {
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, GPIO_PIN_SET);
if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_8) == GPIO_PIN_SET)
printf("LED1已关闭\n");
} else {
if(UART1_RX_Buffer[0] != '\0')
printf("指令发送错误:%s", UART1_RX_Buffer);
}