打印
[应用相关]

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

[复制链接]
1281|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
前言

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

HC-05的使用

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 | 只看该作者


这个默认波特率不是每个蓝牙模块都一样的,有的蓝牙模块默认波特率是115200,使用的时候需要看下商家资料。或者每个波特率试着改一下,总能试出来蓝牙模块的默认波特率。试成功的现象是AT模式下,通过电脑的串口助手,电脑能够和蓝牙模块正常通信。达到此效果后,手机连上蓝牙,肯定可以与单片机进行通信。

使用特权

评论回复
5
梅花香自123|  楼主 | 2023-5-30 17:27 | 只看该作者
HC-06常用AT指令
一般只用前3个即可。


使用特权

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

注意:单片机的波特率一定要配置得和蓝牙模块的波特率一致。

使用特权

评论回复
7
梅花香自123|  楼主 | 2023-5-30 17:27 | 只看该作者
STM32程序
蓝牙实现手机与单片机通信的原理就是使用串口,所以单片机中进行cubmx配置和写串口的程序就可以了;这里大家可以参考一下我的这篇文章,里面详细介绍了stm32串口基本使用:STM32系列——串口收发数据基础
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/*宏定义*/
uint8_t RX_dat = 0;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//串口中断服务函数
{
    if(huart->Instance == USART1)//判断是否为串口1
    {
        if(huart->Instance == USART1)
         {
            if(RX_dat == 'a')//接收到字符a
            {
            //写上要执行的内容
            HAL_UART_Receive_IT(&huart1,&RX_dat,1);//每次接收以后都要再次开启接收中断
            }
      
         else if(RX_dat == 'b')//接收到字符b
         {
            //写上要执行的内容
            HAL_UART_Receive_IT(&huart1,&RX_dat,1);//每次接收以后都要再次开启接收中断
         }
       }
    }
}
/* USER CODE END 0 */

使用特权

评论回复
8
梅花香自123|  楼主 | 2023-5-30 17:28 | 只看该作者
  /* USER CODE BEGIN 2 */    
    HAL_UART_Receive_IT(&huart1,&RX_dat,1);//开启接收中断
  /* USER CODE END 2 */

使用特权

评论回复
9
梅花香自123|  楼主 | 2023-5-30 17:28 | 只看该作者
手机app发送数据端
手机app发送数据端可能需要配置一下,要将发送的数据格式与程序中写的接收数据的格式对应,否则手机发送的数据单片机可能也接收不到。

使用特权

评论回复
10
sab| | 2024-10-21 23:09 | 只看该作者
老师你好,我的hc-05设置role=1后再次查询还是0,请问您有解决办法吗?

使用特权

评论回复
11
呐咯密密| | 2024-10-22 10:44 | 只看该作者
这个模块太经典了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

92

主题

1059

帖子

0

粉丝