在购买HC05和HC06模块时,有一点注意事项:VCC一般能接受3.2V~6V的供电电压,平时使用Arduino的5V输出供电没有什么问题。但TXD和RXD的工作电平需要额外注意,因为有些厂商提供的HC05/06模块支持3.2V~6V,而有的只支持3.3V。
这里一个潜在的问题是:3.3V电平的RXD和TXD和5V的Arduino引脚通信时,存在损坏蓝牙模块的风险,为了安全起见需要做「电平转换」。小编当然推荐直接购买支持3.2V~6V的模块,不然需要在RXD端加1KΩ限流电阻,或者采用电阻分压接法。
了解了蓝牙模块的引脚功能,我们还需要了解一下蓝牙模块的工作模式。蓝牙串口通讯模块具有两种工作模式:命令响应工作模式和自动连接工作模式。
当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输,自动连接工作模式下又有三种模式可选:
主模式(Master):该模块可以主动搜索并连接其它蓝牙模块并接收发送数据。
从模式(Slave):只能被搜索被其它蓝牙模块连接进行接收发送数据。
回环(Loopback):蓝牙模块就是将接收的数据原样返回给远程的主设备。当模块处于命令响应工作模式时才能执行AT命令,用户可向模块发送各种AT 指令,为模块设定控制参数或发布控制命令。
利用TTL转串口下载器进行AT设置
在使用模块前我们需要使用串口AT命令对模块进行设置。简单地来说,就是通过串口向模块发送命令,可以读取/修改模块的参数。下面就HC05模块,我们来实践一下如何通过AT命令进行设置。准备以下材料:
HC05模块
TTL转USB串口下载器
杜邦线若干
如何进入命令工作模式呢?HC05模块需要将KEY(EN)引脚拉高再供电就自动进入AT命令工作模式,而HC05模块上的KEY按键就是方便用户所设置的。HC05模块是否进入AT模式也可以通过板载的LED闪烁判断,在未配对连接时,HC05的LED是快闪,若进入AT模式,快闪变为慢闪 (两秒钟闪一次)。HC06模块与HC05模块不同,在未配对连接时,都处于命令响应工作模式中,换句话说只要模块上电,自动进入AT模式。
要使用TTL转USB串口下载器连接电脑对HC05模块进行AT命令设置。如下图连接好HC05模块,按住HC05模块上的按钮,再把USB线接上电脑。
当确认HC05模块进入AT命令工作模式后,我们打开电脑上的串口助手工具(下载链接见文末),使用通的串口调试工具也可以。
选择正确的出厂波特率(具体咨询厂家,HC05模块出厂的通信波特率一般为38400bps,而HC06模块出厂的通信波特率一般为9600bps。)连接模块成功,我们就可以进行AT命令设置了。
串口助手工具提供了一些快捷命令按键,当然我们也可以完全根据模块命令集说明发送特定指令,比如:
AT+NAME=master 蓝牙主机名称为masterAT+ROLE=1 蓝牙模式为主模式,0为从模式AT+CMODE=1 蓝牙连接模式为任意地址连接模式AT+PSWD=1234 蓝牙配对密码为1234AT+UART=9600,0,0 蓝牙通信串口波特率为9600,停止位1位,无校验位AT+RMAAD 清空配对列表
其实我们主要设置的参数就是蓝牙模块的主从模式、通信的波特率、蓝牙的名称和密码。如果系统中用到一对HC05模块,那么需要一个作为主机模式(Master),一个作为从机模式(Slave);如果是和电脑、手机或者平板配合使用,那么HC05模块可以设置为从机模式(Slave)。
利用Arduino进行AT设置
上述方法是通过TTL转串口下载器配合电脑串口对HC05/HC06模块进行AT命令设置,当你手上实在没有TTL转串口下载器, 其实借助Arduino 也可以进行AT命令设置。大致的思路就是Arduino作为透传设备,将串口监视器输入的命令直接传给蓝牙模块,将蓝牙模块返回的数据直接打印出来,起到“中介”作用。如下图连接好HC05/HC06模块:
Arduino IDE烧录以下代码:
这样,我们在电脑上打开Arduino IDE的串口监视器就可以进行AT命令设置了。这里要注意的是:因为HC05模块和HC06模块的命令格式不同,如果HC05模块,串口监视器换行选项要选择“NL和CR(Both NL and CR)”;如果是HC06模块,换行选项要选择“没有行结尾(No line ending)”。
使用场景1: 主从Arduino蓝牙通信
配置好蓝牙模块以后,我们就可以正常使用了。我们先实践一下主从Arduino互相通信的场景,即一个HC05/HC06模块设置为主机模式(Master)和一块Arduino相连,另一个HC05/HC06模块设置为从机模式(Slave)和另一块Arduino相连,它们之间相互传输数据。
如图所示,我们在主机端添加一个按钮,从机端添加LED,从主机发送命令控制从机端LED的亮和灭。
主机端代码:
从机端代码:
如此,我们就实现了蓝牙远程控制LED的亮灭。
使用场景2: 配合手机/电脑使用
另外一个常见的使用场景就是带有蓝牙功能的手机、电脑或者平板作为主机控制端,发送命令控制Arduino执行命令。下面我们也简化实践一下,利用手机,发送命令给HC05/HC06从机模块,进而控制Arduino实现LED的亮灭。
从机端我们沿用场景1的
电路连接,代码修改如下:
作为主机模式的手机端,我们需要下载一个蓝牙串口助手工具,安卓手机可以下载“蓝牙串口”或者“蓝牙调试器”,苹果手机可以在应用商城搜索“蓝牙串口助手”。下载APP后,先配对蓝牙模块,成功连上后,我们在APP里向蓝牙发送A就可以点亮LED,发送a就可以熄灭LED。
总结
至此,我们通过HC05/HC06模块的具体使用了解了如何使用经典蓝牙BT模块让Arduino与Arduino、或者Arduino与手机实现无线蓝牙通信。传统蓝牙模块现在主要还是用于大数据的音视频传输场景,虽然数据量大,但相对地设备功耗也大,配对复杂,这些缺点也直接催生了低功耗蓝牙协议(BLE)的诞生,更适合于数据量少、功耗小的嵌入式设备。
原作者:小B 爱上Arduino