【嵌入式实战】HC-05/06蓝牙模块AT指令配置与主从配对全解析
1. 蓝牙模块选型HC-05与HC-06的核心差异第一次接触蓝牙模块时很多人会被HC-05和HC-06相似的外观迷惑——它们都是蓝色PCB板、4-6个引脚、尺寸相近。但实际用起来两者的区别就像智能手机和功能机的差距。我在做智能小车项目时就曾因为选错模块导致整个通信方案推倒重来。主从模式是最大的分水岭。HC-05像是个社交达人既能主动连接别人主模式也能等待被连接从模式。而HC-06则是个内向型永远只能被动等待配对。举个例子如果你需要两个蓝牙模块直接对话比如遥控车和底盘通信必须至少有一个HC-05作为主机但如果只是让手机控制ArduinoHC-06就够用了。硬件上有个快速识别技巧HC-05模块上有颗黑色按键KEY引脚HC-06则没有。这个按键就是进入AT模式的关键——长按它再上电HC-05的LED会变成慢闪约1秒1次此时才能接收AT指令。而HC-06上电即进入AT模式但部分型号可能需要特定电平触发。实测建议购买时一定要问清模块型号。我曾遇到过商家把HC-06标记为HC-05销售导致项目卡在配对环节整整两天。2. 硬件连接避开那些坑连接蓝牙模块看似简单但新手常在这几个地方翻车。先说最基础的接线方案// USB转TTL连接方案以CP2102为例 蓝牙模块 → USB转TTL TX → RX RX → TX VCC → 5V或3.3V GND → GND电压匹配是第一个坑。虽然多数模块标称支持5V但实测发现3.3V供电更稳定。我有次用5V供电模块发热严重且频繁断连后来串接1N4007二极管降压才解决。建议先用万用表测实际电压确保在3.3-5V范围内。交叉接线是第二个坑。蓝牙的TX要接转接器的RXRX接TX这个反接逻辑让很多新手困惑。有个记忆口诀发对收收对发。接错线会导致AT指令无响应我当初就因此怀疑模块坏了白白浪费三小时。如果连接单片机推荐用SoftwareSerial创建虚拟串口#include SoftwareSerial.h SoftwareSerial BT(10, 11); // RX,TX void setup() { Serial.begin(9600); BT.begin(38400); // HC-05默认AT模式波特率 }紧急情况处理当模块毫无反应时先检查电源指示灯是否亮起再用镊子短接TX-RX。如果串口助手能收到自发数据证明串口通路正常。3. AT指令实战从零配置模块AT指令就像蓝牙模块的控制台命令但不同厂家的指令集可能有细微差别。这里给出HC-05和HC-06的通用配置流程3.1 基础测试首先发送AT正常会返回OK。如果没反应HC-05确认KEY引脚接高电平3.3VLED是否为慢闪HC-06尝试不同波特率9600/38400/1152003.2 关键参数设置用表格对比两个模块的常用指令功能HC-05指令HC-06指令修改名称ATNAMEMyBTATNAMEMyBT设置密码ATPSWD1234ATPIN1234查询地址ATADDR?不支持设置波特率ATUART9600,0,0ATBAUD4恢复出厂设置ATORGLATDEFAULT特别注意波特率设置HC-05的ATUART后跟三个参数波特率、停止位(01位)、校验位(0无)HC-06用数字代码49600, 638400, 81152003.3 主从模式配置仅HC-05ATROLE0 // 从模式 ATROLE1 // 主模式 ATCMODE0 // 指定地址连接 ATBIND1234,56,abcdef // 绑定从机地址我曾遇到个典型问题设置主模式后模块不断重启。后来发现是没先执行ATCMODE0模块在尝试搜索所有设备导致内存溢出。正确顺序应该是ROLE→CMODE→BIND。4. 主从配对实战智能小车案例以遥控小车为例需要实现手机→主控HC-05→从机HC-06的通信链路。以下是经过三次迭代优化的配置步骤4.1 从机配置HC-06连接USB转TTL上电自动进入AT模式依次执行ATNAMECar_Slave ATPIN8888 ATBAUD4 // 9600bps断电后重新上电用手机搜索Car_Slave配对密码88884.2 主机配置HC-05按住KEY键上电LED慢闪后松开设置主模式参数ATUART9600,0,0 ATROLE1 ATCMODE0 ATBIND1234,56,abcdef // 替换为从机实际地址 ATPSWD8888查询从机地址技巧用手机APPBLE Scanner扫描地址显示为12:34:56:ab:cd:ef格式AT指令中要去掉冒号并用逗号分隔4.3 硬件连接方案手机 ↔ HC-05主模块 ↔ Arduino ↔ HC-06从模块 ↔ 电机驱动实际调试中发现当主机和从机共用Arduino电源时会出现电压跌落。后来改用独立供电方案HC-05接3.3V LDO稳压器HC-06接5V电源共地处理5. 故障排查那些年踩过的坑5.1 无法进入AT模式现象发送AT指令无响应排查测KEY引脚电压HC-05需保持3.3V检查波特率HC-05默认38400HC-06默认9600尝试降低波特率到9600测试5.2 配对后无法通信典型原因主从模块波特率不一致密码或连接模式不匹配未执行ATRESET生效配置解决方案// 在Arduino代码中添加软复位 if(BT.available() BT.read()R){ digitalWrite(RST_PIN, LOW); }5.3 数据传输不稳定优化措施在TX/RX线上加10KΩ上拉电阻代码中添加数据校验void sendData(String msg){ byte checksum 0; for(int i0; imsg.length(); i){ checksum ^ msg[i]; // 异或校验 } BT.print(msg * checksum \n); }最后分享一个血泪教训曾因没注意模块版本按照旧教程操作导致配置失败。后来发现新版HC-06改用HC-05的指令集建议每次拿到新模块先用ATVERSION?查询固件版本再查找对应的AT指令手册。