HC-06蓝牙模块主从模式实战:从AT指令到双向通信
1. HC-06蓝牙模块基础认知第一次接触HC-06蓝牙模块时很多人会误以为它功能有限其实这个小家伙在无线通信领域相当能干。HC-06属于经典蓝牙2.0模块最大传输距离约10米视环境而定默认波特率9600采用串口透传方式工作。与HC-05最大的区别在于HC-06出厂时固定为从机模式但这不代表它不能实现主从通信——通过AT指令完全可以配置成主机模式。我手头的HC-06模块尺寸比硬币大不了多少四个引脚清晰标注着VCC、GND、TXD和RXD。实测发现它的工作电压范围很宽3.3V-6V都能稳定运行不过建议用5V供电以获得最佳性能。模块背面印着linvor字样这是HC-06的常见版本不同厂商的固件可能略有差异但AT指令集基本通用。注意购买时建议选择带底板的产品这种模块已经集成了电平转换和稳压电路直接使用更安全。我曾贪便宜买过裸模块结果因为电平不匹配烧毁了一个串口血泪教训啊2. 硬件连接与AT模式进入2.1 必备工具清单两个HC-06模块建议买带底板的CH340G USB转TTL模块PL2303也行杜邦线若干建议用彩色的方便区分串口调试助手推荐XCOM或SSCOM5V电源可用USB供电2.2 接线示意图HC-06 CH340G VCC ----- 5V GND ----- GND TXD ----- RXD RXD ----- TXD这里有个新手常踩的坑蓝牙模块的TXD要接CH340的RXDRX接TX交叉连接我第一次用时傻傻地直连结果死活没反应后来用万用表量了半天才发现问题。另外建议先用USB供电测试避免电源问题导致模块异常。2.3 AT模式进入技巧与HC-05不同HC-06进入AT模式简单到令人发指——直接上电就是AT模式只要模块没有连接任何设备蓝色指示灯慢闪约2秒一次就表示已准备好接收AT指令。我测试过多个版本的HC-06这个特性都很稳定。有个细节要注意有些教程说需要按住按键上电那是HC-05的操作方式用在HC-06上反而会出问题。记得有次帮学弟调试他坚持要按按键结果折腾半天才发现根本不需要。3. AT指令实战详解3.1 基础指令测试打开串口助手设置波特率9600默认值勾选发送新行输入AT正常会返回OK这是最基本的握手指令。如果没反应先检查接线是否正确特别是TX/RX交叉波特率是否匹配模块供电是否稳定3.2 主从模式配置关键指令来了要让两个HC-06互相通信必须将一个设为主机(Master)另一个保持从机(Slave)# 设置主机模式 ATROLEM 返回OKROLE:M # 设置从机模式默认值 ATROLES 返回OKROLE:S这里有个重要特性HC-06的主机模式是一次性的断电后会恢复从机模式。我在智能家居项目中就遇到过这个问题——每次重启都要重新配置。后来在代码里加了自动配置逻辑才解决。3.3 参数配置三件套波特率设置ATBAUD8 # 设为115200 返回OK115200建议先用低波特率调试稳定后再提高。超过115200时普通串口助手可能不支持需要单片机直接控制。蓝牙名称修改ATNAMEMyBT 返回OKsetname名称别超过20字符中文可能乱码。主机模式下改名会失败这是正常现象。配对密码修改ATPIN8888 返回OKsetPIN默认1234太简单建议改成复杂点的。我在展会上演示时周围好几个人试图连我的模块改了密码就清净了。4. 双向通信实战测试4.1 硬件连接方案主机端HC-06(Master) -- CH340 -- PC 从机端HC-06(Slave) -- Arduino -- 传感器4.2 通信测试步骤主机发送搜索指令ATINIT # 初始化主机 ATINQ # 搜索周边设备会返回类似OKINQ:20:13:01:23:45,-35的地址信息绑定从机地址ATPAIR20:13:01:23:45,5 # 最后数字是超时秒数 ATLINK20:13:01:23:45建立连接后指示灯会从闪烁变常亮此时在串口助手直接输入内容就能双向传输4.3 常见问题解决连接不稳定检查电源是否充足可用万用表量电压降低波特率试试两个模块距离拉近AT指令无响应确认模块处于AT模式指示灯慢闪检查串口助手是否勾选发送新行尝试所有可能的波特率从1200开始数据传输乱码双方波特率必须一致避免使用过高波特率超过115200容易出错检查接地是否良好5. 进阶应用技巧5.1 与单片机配合使用以STM32为例配置串口2连接HC-06// 初始化代码 USART_InitTypeDef USART_InitStruct; USART_InitStruct.USART_BaudRate 9600; USART_InitStruct.USART_WordLength USART_WordLength_8b; USART_InitStruct.USART_StopBits USART_StopBits_1; USART_InitStruct.USART_Parity USART_Parity_No; USART_InitStruct.USART_Mode USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART2, USART_InitStruct); USART_Cmd(USART2, ENABLE);5.2 数据分包处理蓝牙传输可能丢包建议设计简单协议# Python示例代码 def send_data(data): packet f[{len(data)}]{data} ser.write(packet.encode()) def receive_data(): buffer while True: if ser.in_waiting: char ser.read().decode() if char [: length_str while True: char ser.read().decode() if char ]: length int(length_str) data ser.read(length).decode() return data length_str char5.3 低功耗优化虽然HC-06本身不支持BLE低功耗但可以通过EN引脚控制电源需硬件改造设置自动休眠部分固件支持降低发射功率AT指令调整我在电池供电项目中实测配合休眠策略可使待机电流从30mA降到5mA以下。