[应用相关] 蓝牙模块HC05、HC06的使用,重在“用起来”(HAL库)

[复制链接]
3175|10
 楼主| 梅花香自123 发表于 2023-5-30 17:26 | 显示全部楼层 |阅读模式
前言

不论是HC05还是HC06,我们用到的都是蓝牙模块的透传功能,只需要用到4个引脚:RXD、TXD、VCC(5V)、GND。

HC-05的使用 QQ截图20230530172608.jpg

1、HC-05有6个引脚,但是我们只用到4个。

2、HC-05正面有一个按键。与HC-06的区别是,它上电之前必须要按住此按键再插入电脑中,才能够进入AT模式。HC-06没有按键,直接插上就进入AT模式,蓝牙模块闪慢灯(1s1次)。

3、用一个usb转ttl模块与HC-05连接,usb转ttl模块与电脑连接,使用串口调试助手,在蓝牙模块的AT模式下可以用一些AT指令与蓝牙模块进行交互。

蓝牙模块默认波特率是38400,把停止位设置成1,数据位设置成8,校验位设置为none。


 楼主| 梅花香自123 发表于 2023-5-30 17:26 | 显示全部楼层
HC-05常用AT指令:
指令名                       响应                                含义

AT+NAME?              +NAME:P**         获得设备名称

AT+NAME=Param   OK                                  设置设备名称  Parm:想要设置的名字

AT+ROLE=0                                                    蓝牙模块为从模式

AT+CMODE=1                                                蓝牙模式设置为任意地址连接模式,可以被任意设备连接

AT+PSWD=1234                                             蓝牙配对密码为1234

AT+UART=9600,0,0                                        设置蓝牙通信波特率为9600,停止位1位,无校验位
 楼主| 梅花香自123 发表于 2023-5-30 17:27 | 显示全部楼层
HC-06的使用
HC-06与HC-05不同的是 :

1、 HC-05一般都是主从机一体,既可以设置为主机也可以设置为从机。
  而HC-06在市场上分为两种情况,一种是:主从机一体;另外一种是:只有从机功能。

AT+ROLE设置主从模式: AT+ROLE?是查询主从状态;AT+ROLE=1是设成主;AT+ROLE=0是设成从。
 楼主| 梅花香自123 发表于 2023-5-30 17:27 | 显示全部楼层
576466475c16db54e0.png

这个默认波特率不是每个蓝牙模块都一样的,有的蓝牙模块默认波特率是115200,使用的时候需要看下商家资料。或者每个波特率试着改一下,总能试出来蓝牙模块的默认波特率。试成功的现象是AT模式下,通过电脑的串口助手,电脑能够和蓝牙模块正常通信。达到此效果后,手机连上蓝牙,肯定可以与单片机进行通信。
 楼主| 梅花香自123 发表于 2023-5-30 17:27 | 显示全部楼层
HC-06常用AT指令
一般只用前3个即可。
360086475c185429fe.png

 楼主| 梅花香自123 发表于 2023-5-30 17:27 | 显示全部楼层
蓝牙模块连上手机与STM32通信
将蓝牙模块配置好以后,再次上电,打开手机蓝牙调试助手,这里推荐两个app:“蓝牙调试器”和“蓝牙调试宝”,实测好用;在app内连上蓝牙模块,此时蓝牙模块就相当于连接手机与单片机的桥梁,在stm32中写一些程序,就可以实现手机与stm32通信了。

注意:单片机的波特率一定要配置得和蓝牙模块的波特率一致。
 楼主| 梅花香自123 发表于 2023-5-30 17:27 | 显示全部楼层
STM32程序
蓝牙实现手机与单片机通信的原理就是使用串口,所以单片机中进行cubmx配置和写串口的程序就可以了;这里大家可以参考一下我的这篇文章,里面详细介绍了stm32串口基本使用:STM32系列——串口收发数据基础
  1. /* Private user code ---------------------------------------------------------*/
  2. /* USER CODE BEGIN 0 */
  3. /*宏定义*/
  4. uint8_t RX_dat = 0;

  5. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//串口中断服务函数
  6. {
  7.     if(huart->Instance == USART1)//判断是否为串口1
  8.     {
  9.         if(huart->Instance == USART1)
  10.          {
  11.             if(RX_dat == 'a')//接收到字符a
  12.             {
  13.             //写上要执行的内容
  14.             HAL_UART_Receive_IT(&huart1,&RX_dat,1);//每次接收以后都要再次开启接收中断
  15.             }
  16.       
  17.          else if(RX_dat == 'b')//接收到字符b
  18.          {
  19.             //写上要执行的内容
  20.             HAL_UART_Receive_IT(&huart1,&RX_dat,1);//每次接收以后都要再次开启接收中断
  21.          }
  22.        }
  23.     }
  24. }
  25. /* USER CODE END 0 */
 楼主| 梅花香自123 发表于 2023-5-30 17:28 | 显示全部楼层
  1.   /* USER CODE BEGIN 2 */   
  2.     HAL_UART_Receive_IT(&huart1,&RX_dat,1);//开启接收中断
  3.   /* USER CODE END 2 */
 楼主| 梅花香自123 发表于 2023-5-30 17:28 | 显示全部楼层
手机app发送数据端
手机app发送数据端可能需要配置一下,要将发送的数据格式与程序中写的接收数据的格式对应,否则手机发送的数据单片机可能也接收不到。
sab 发表于 2024-10-21 23:09 | 显示全部楼层
老师你好,我的hc-05设置role=1后再次查询还是0,请问您有解决办法吗?
呐咯密密 发表于 2024-10-22 10:44 | 显示全部楼层
这个模块太经典了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1216

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部