
买回来的蓝牙模块第一件事多半是接上USB转TTL打开串口助手然后开始发AT指令。很多人脑子里默认的玩法是我要用它去连别人也就是一上来就把模块当主机用。可真到了做产品、做小玩意的时候八成以上的场景其实是反过来的你的模块一直待在那儿不动等着手机、等着电脑、等着另一个模块找上门来连它。这就是从机Slave。蓝牙模块从机测试之所以是最容易翻车的一环是因为它考的不是你主动去搜别人而是别人能不能发现你、能不能连上你、连上之后数据到底对不对。这几年我用HC05、HC06、HM10做过不少从机侧的东西从最简单的手机遥控继电器到把模块当成自动化测试里的一个执行端点踩的坑基本都堆在从机这一侧。这篇就把从机测试这件事掰开揉碎聊一遍从角色定位、硬件链路、AT配置差异一直到连接问题排查和业务联调尽量让你少走我走过的弯路。1. 从机角色意味着什么测试目标先想清楚1.1 从机和主机的差别不只是谁先发起连接不少人理解主机从机就是主机去搜、从机被搜这个理解不算错但太浅了浅到会让你在测试时漏掉一堆关键点。主机和从机在协议层的差别体现在广播、寻址、连接参数、角色切换能力这几件事上。从机要做的是持续广播自己的存在让周围的主设备能扫到自己主机则是去扫描、筛选、发起点对点连接。换句话说从机是开放门面等客来主机是挨家挨户敲门。这个差别带来的第一个测试思维转变是从机测试的重点不在你这一端而在对端能不能顺利完成发现和连接。你串口里发出去的数据再漂亮如果对端扫不到你的广播整个链路就是零。第二个容易被忽略的点是角色可切换性。HC05这类模块既能当主机也能当从机通过ATROLE来切换而HC06是纯从机出厂就是从机怎么发指令都改不了。所以在测试之前你得先明确手里这颗模块到底支不支持角色切换否则你会对着一个永远只当从机的HC06反复发ATROLE1然后纳闷为什么没反应。1.2 从机测试要覆盖的四件事我把从机测试拆成四个层次按顺序过一遍基本不会漏可发现模块上电后是否正常广播对端的扫描列表里能不能出现它。可连接对端发起点对点连接时能否建立连接配对码、绑定关系是否正确。可配置连接前通过AT指令设置的名字、波特率、配对码、角色是否真正生效并持久化。可透传连接建立后双向数据是否能稳定、无丢包地穿过模块。这四件事是递进关系前一层没过就别急着测下一层。我见过太多人跳过可发现直接去测透传结果数据不通最后发现问题根本不在数据而在模块压根没进对模式。1.3 三种典型从机场景决定了三套测试重点从机在真实项目里的用法不同测试重点也完全不一样场景从机角色测试重点手机连模块模块接单片机被手机连接配对稳定性、透传延迟、断线重连模块连模块一主一从被另一模块连接绑定地址、角色配对、自动重连模块作为被控端点做自动化被上位机连接指令协议、响应确定性、长时稳定性第一种是绝大多数爱好者的场景第二种常出现在固定配对的产品里第三种是近年做自动化测试的人会碰到的。三种场景对稳定的定义完全不同——手机连模块更看重兼容性模块连模块更看重绑定关系自动化场景更看重长时间跑不出错。测之前先想清楚自己属于哪一类能省掉大量无意义的折腾。2. 硬件链路没搭对后面全是白测2.1 TX/RX交叉与共地出错率最高的两个接线问题接线错误排在我所有从机测试翻车原因的第一位而且它特别隐蔽因为模块灯照样亮、串口照样能打开看起来一切正常。核心就两条注意模块的TX要接USB转TTL的RX模块的RX要接USB转TTL的TX。同名相接是大忌。很多人第一次接线会本能地把TX接TX、RX接RX觉得信号对应信号结果就是串口助手发出去的AT指令石沉大海。判断方法很简单如果模块的LED正常闪烁、供电正常但你发任何指令都毫无回应第一件事就是掉换TX/RX再试。第二条是共地。USB转TTL和模块必须共地也就是GND对GND。有些玩家用的是独立电源给模块供电只连了信号线没连地线这时候电平参考是浮的通信会时好时坏甚至完全不通。共地是所有串口通信的基础别省这一根线。2.2 KEY/EN引脚与进入AT模式的时机HC05和HC06进入AT模式的方式不一样这也是新手常栽的地方。HC05经典固件进入AT模式需要在上电之前把KEY引脚拉高或者按住模块上的小按键然后再上电。进入AT模式后模块上的LED会变成慢闪大概一秒闪一次此时才能正常收发AT指令。如果你直接上电再想进AT模式多半是进不去的或者进去了但波特率不对。HC05在AT模式下的默认波特率常见是38400也有部分是9600取决于固件版本。HC06则简单一些它没有专门的AT模式按键在上电且未被连接的状态下直接就是AT模式默认波特率9600。所以你给HC06发AT没有响应时先别怀疑模块坏了先确认它是不是已经被某个设备连上了——连接状态下HC06是不响应AT指令的。2.3 供电最容易被忽略的假故障来源蓝牙模块在广播和建立连接的瞬间会有电流尖峰尤其是HC05这类经典蓝牙模块峰值电流能到几十毫安。如果你的供电是USB转TTL板子上引出来的3.3V而这块板子的稳压能力一般就会出现非常诡异的现象模块能上电、灯能亮但一发起连接就复位、或者广播断断续续。我自己的经验是从机测试阶段尽量用独立、干净的3.3V电源把它和USB转TTL的地连在一起。如果条件不允许至少保证USB转TTL的3.3V输出能力够用看板子上的稳压芯片规格。那种广播时有时无、连上秒断的问题十有八九是供电在作怪而不是模块本身。还有一个细节很多模块是3.3V逻辑电平如果你用的是5V的USB转TTL且没有电平转换长期通信可能损伤模块的RX脚。稳妥做法是在模块RX前串一个分压电阻或者直接用带3.3V电平输出的转接板。3. HC05、HC06、HM10三种从机的AT配置差异3.1 HC05从机ROLE、PSWD、UART怎么设HC05是我用得最多的一颗指令体系比较完整。把它配成从机最小配置就三条指令。以常见固件为例进入AT模式后依次发送ATROLE0 // 设为从机 ATNAMEMySlave // 设置广播名称 ATPSWD1234 // 设置配对码发完每条都应该收到OK。然后是串口参数这条最关键ATUART9600,0,0 // 波特率96001位停止位无校验参数格式一般是波特率,停止位,校验位。这里要特别提醒ATUART改的是透传模式下的串口波特率和AT模式的波特率是两码事。你改完之后退回到透传模式串口助手也得跟着改成新的波特率否则收到的就是乱码。很多改了波特率之后模块就失联了的求助都是因为这个。改完参数建议发一条ATRESET复位让配置生效并持久化。想确认当前配置可以发ATADDR?查地址、ATNAME?查名称。HC05还有一个ATCMODE连接模式要注意0是绑定指定地址1是任意地址都可连。从机做通用测试时通常设为1如果误设成0且没绑定地址对端就会一直连不上。3.2 HC06的AT无响应到底出在哪HC06是纯从机指令非常精简常用就ATNAME、ATPSWD、ATUART这几条而且部分固件不带问号查询。ATROLE在HC06上一般只能读、不能改因为它根本没有主机模式。HC06的AT无响应我总结下来按概率排已经被连接这是最常见的。HC06一旦被连上就切到透传状态AT指令全部不响应。解决办法是断开所有连接或者重启模块。波特率不匹配HC06的AT模式默认9600如果你串口助手开的是38400或者其他值就是乱码或没反应。接线问题TX/RX接反、没共地。供电问题电流不够导致模块一直在复位循环。指令格式问题有些HC06固件要求AT指令不带回车换行有些要求带回车换行。串口助手里勾选/取消发送新行都试一次。这里有个我踩过的坑HC06改ATUART之后它不会立刻切换但下次上电透传就按新波特率走了。如果你忘了改串口助手的波特率就会误以为模块配置丢了。其实没丢是你自己跟丢了。3.3 HM10低功耗蓝牙的从机配置完全是另一套逻辑HM10是低功耗蓝牙模块BLE它和HC05/HC06这种经典蓝牙模块在从机测试上完全是两个世界。BLE的从机不叫从机那么随意它是以**服务Service和特征值Characteristic**的模型来组织数据的。HM10做从机关键指令包括ATROLE0 // 从机模式 ATNAMEHM10S // 广播名称 ATBAUD9600 // 串口波特率 ATADVI1 // 广播间隔 ATADTY0 // 广播类型 ATUUIDFFE0 // 服务UUID ATCHARFFE1 // 特征值UUID注意BLE的UUID是核心。手机端的BLE调试APP要通过特定的Service UUID和Characteristic UUID去读写数据如果你的UUID和APP里用的对不上就会出现能连上但发不了数据的情况——这跟经典蓝牙的串口透传体验完全不同。HM10还有个坑它的广播参数如果设得太激进广播间隔太短功耗和稳定性都会受影响设得太长手机扫描时又容易扫不到。做从机测试时建议先用默认广播参数把链路跑通再谈优化。另外HM10默认可以在AT模式下发指令透传后指令就不响应了这点和HC06类似。模块角色能力AT默认波特率配对码默认特殊点HC05主/从可切38400常见1234需KEY进AT模式HC06仅从机96001234连接后不响应ATHM10BLE从机为主9600无BLE配对依赖UUID4. 连不上、连上就掉、搜不到从机连接问题的排查链路4.1 HC05连接不上的五类根因HC05蓝牙模块连接不上是搜索量很高的一个问题原因五花八门。我按自己的排查顺序列一遍从高频到低频配对码不对对端输入1234或0000都试一下不同固件默认值不同。已经连了别的设备HC05同一时间只能保持一个连接经典蓝牙如果它还被上一个设备连着新连接自然失败。先把之前的连接断开。CMODE设成了绑定模式如上文说的ATCMODE0且没绑地址对端连不上。波特率/串口参数在透传下不匹配这表现为能连上但数据是乱的容易被归类成连接问题。供电或复位问题连接瞬间掉电表现为连接一闪而过。排查这类问题我建议养成一个习惯打开串口助手盯着模块的输出同时在手机端操作连接。很多连不上其实是连上了但立刻因为供电或参数问题掉了盯着串口看比盲猜高效得多。4.2 连上秒断的排查顺序连上秒断是从机测试里最折磨人的现象之一。我的排查顺序是这样的先看供电用示波器或万用表看一眼连接瞬间电压有没有塌陷这是最常见的原因。再看配对与绑定如果是绑定模式下的地址不匹配连接会在握手阶段直接失败。看串口参数透传波特率和主控端不一致时有些方案会在握手后检测异常并断开。看模块状态脚HC05有STATE/连接状态引脚接个LED或接到单片机IO上能直观看到断开时刻。我实际遇到过的一次秒断折腾了小半天最后发现是USB转TTL板子的3.3V带不动模块的连接电流尖峰换了个独立LDO就好了。所以我把供电永远放在排查第一位。4.3 手机搜不到设备的排查手机端搜不到你的从机属于可发现层就没过。排查思路模块是否真的在广播确认模块处于未连接、非AT锁定状态。有些模块进AT模式后不广播。广播名称是否可读如果名称设置成了特殊字符或空部分手机可能不显示。BLE的特殊性HM10这类BLE模块要确认手机端APP是在扫BLE还是扫经典蓝牙两者不通用。距离与干扰这虽然是老生常谈但从机测试时桌子上一堆2.4G设备确实会影响扫描。是不是被系统缓存了手机蓝牙列表有时会缓存旧设备换个APP或用系统设置里的扫描刷新一下。5. 透传与业务联调从机测试的最后一步5.1 回环测试先确认链路在接业务逻辑之前我强烈建议先做一次回环测试。方法很简单模块正常进入透传模式后在串口助手发一段字符看手机端能不能收到反过来手机端发字符串口助手能不能收到。双向都通了才说明从机链路本身没问题。回环测试的价值在于把模块问题和业务问题隔离开。很多人的现象是我发指令继电器不动然后一头扎进代码里改半天最后发现是模块那边根本没连上或者波特率不对。先做回环链路干净了再上业务能省掉大量无效调试。5.2 从机单片机控制继电器的完整链路通过蓝牙模块控制继电器是经典玩法从机侧的链路是这样一条手机APP - 从机模块 - 单片机串口 - 解析指令 - 驱动继电器这里有几个实操要点从机模块本身不能直接驱动继电器它只是把收到的数据透传给单片机。继电器一般要经过三极管或光耦驱动单片机IO直接推继电器线圈基本推不动。指令协议要定清楚。比如约定ON开、OFF关或者用单字节0x01/0x00。协议越简单解析越不容易出错。数据结束符要处理。透传是流式的单片机需要知道一帧数据什么时候结束通常用换行符\n或者固定长度来切分。我早期做过一个版本手机发ON单片机用indexOf找字符串结果因为透传把两次指令粘在一起出现了误动作。后来改成带结束符的定长/定界协议就稳了。这个教训很典型透传不是消息队列它是字节流必须自己做分帧。5.3 把从机当成自动化测试端点的思路这两年有个有意思的用法就是把蓝牙从机模块当成自动化测试里的一个被控执行端点。思路是上位机电脑通过经典蓝牙或BLE连接从机模块往它发指令单片机收到后执行某个动作再把状态回传。这样一来模块就成了一个可以被脚本驱动的输入/执行通道。比如做手机相关的自动化回归时你可以让测试脚本通过蓝牙从机模块向被测设备发送约定的触发信号或者用它来采集某个传感器状态。这跟让Cursor做手机自动化测试这类需求背后的逻辑是相通的——把物理动作抽象成一个可编程接口。从机侧要做好的就是响应确定性收到什么指令、延时多久、回什么内容全部固定下来别引入随机性否则自动化脚本没法稳定断言。这条路对从机测试的要求比普通玩法高一个档次因为它要长时间跑、要能自动重连、要能容忍偶发的断链。我的做法是在单片机侧加一个看门狗式的重连逻辑一段时间没收到心跳就主动复位蓝牙模块重新广播把偶发断链自愈掉。6. 几张表和一些只有踩过才记得住的细节把前面零散的经验收成一张排查速查表方便你对着现象找方向现象高概率原因优先动作发AT没反应接线反、波特率错、已被连接换TX/RX、试9600/38400、断连接搜不到从机未广播、进AT模式、BLE/经典混淆复位、确认模式、换扫描APP连不上配对码错、CMODE绑定、已连他设备试1234/0000、改CMODE1、断开旧连接连上秒断供电塌陷、绑定不匹配换独立电源、检查绑地址能连数据乱透传波特率不匹配主从两端波特率对齐指令误动作透传粘包、无分帧加结束符、定长协议再补几个文档里很少写、但实测很重要的细节第一改完参数一定复位再测。很多模块的配置是写进Flash的但当前运行的参数还在内存里不复位的话你测的是旧参数会得出错误结论。第二AT模式波特率和透传波特率分开记。这是新手最容易混的一对概念混淆之后会出现明明改了为什么没变的经典困惑。第三给每个模块贴标签记配置。手里模块一多哪个是9600哪个是38400、哪个配对码是多少全靠脑子记不现实。我现在的习惯是用标签纸写上名称、波特率、配对码贴在模块背面省事太多。第四测试顺序永远是先发现、再连接、再配对、最后透传。跳过任何一步去测后面出问题都很难定位因为故障点被放大了。第五HM10这类BLE模块测试UUID一定要和手机端对齐。如果要改UUID改完必须同步更新APP端配置否则就是能连上但数据进不来。从机测试这件事说到底就是把我等别人来连这条路径上的每个环节都验证一遍。它没有主机测试那种主动扫描的爽感反而处处是对端不配合的无力感但恰恰是这些环节最容易出问题。我个人的体会是把硬件链路、AT模式时机、透传波特率这三件事从源头做对后面九成的坑都不会踩。至于那些偶发的断链和复位先怀疑供电再怀疑参数最后才怀疑模块本身——大部分时候模块是冤枉的。