公司动态

HC-06蓝牙模块AT命令配置与无线串口通信实战指南

📅 2026/8/1 17:49:50
HC-06蓝牙模块AT命令配置与无线串口通信实战指南
1. 项目概述从零上手HC-06蓝牙模块如果你玩过Arduino、树莓派或者STM32想让你的单片机项目摆脱那根烦人的数据线实现无线数据传输那么蓝牙模块几乎是绕不开的选择。而在众多蓝牙模块中HC-06或者它的马甲ZS-040以其极低的成本、简单的串口通信方式和广泛的社区支持成为了无数电子爱好者和学生入门无线通信的首选。我第一次用它是在一个智能小车上当时为了摆脱红外遥控的距离限制琢磨着用手机蓝牙来控制HC-06就成了我的“启蒙老师”。简单来说HC-06是一个经典的蓝牙2.0EDR串口透传模块。所谓“透传”就是它把你单片机串口TX/RX发过来的数据原封不动地通过蓝牙无线信号发送出去反之手机或电脑通过蓝牙发送过来的数据它也原样交给单片机的串口。你不需要懂复杂的蓝牙协议栈就像使用一根“透明的无线串口线”一样简单。它的核心价值在于极大降低了在嵌入式项目中集成无线功能的门槛让你可以专注于应用逻辑本身比如遥控、数据采集、无线调试等。然而很多新手拿到这个蓝色或黑色的小板子接上VCC、GND、TXD、RXD四根线后发现手机能搜到它但连上后要么没反应要么乱码项目就此卡住。这背后往往是因为忽略了一个关键步骤配置。HC-06出厂有默认的名称、密码和通信参数如波特率但这些默认设置很可能不匹配你的单片机程序或你的使用习惯。因此掌握如何进入并正确使用其AT命令模式进行配置是玩转HC-06的必修课。本文将带你彻底搞懂HC-06/ZS-040的硬件连接、AT模式进入方法、常用命令详解以及与手机/电脑的实际连接测试分享我从无数次连接失败中总结出的实操经验和避坑指南。2. 硬件解析与连接基础2.1 认识你的HC-06/ZS-040模块市面上常见的HC-06模块其实很多都标着“ZS-040”的型号两者在功能和AT命令上基本完全兼容可以视为同一产品。模块通常有6个引脚VCC、GND、TXD、RXD、STATE、EN或KEY。对于基础的数据透传和配置我们主要关心前四个。VCC与GND供电引脚。这里有一个至关重要的细节HC-06模块的工作电压通常是3.3V虽然很多模块的板载稳压芯片可以接受3.6V到6V的宽电压输入但为了稳定和保险我强烈建议使用3.3V为其供电。直接接5V短期可能工作但长期会发烫甚至损坏模块核心的蓝牙芯片。TXD与RXD串口数据引脚。这是通信的通道。记住一个核心原则设备的TXD要接对方的RXD设备的RXD要接对方的TXD。也就是说HC-06的TXD要接单片机如Arduino的RXD引脚HC-06的RXD要接单片机的TXD引脚。STATE状态指示引脚。蓝牙未连接时为低电平连接成功后输出高电平。你可以用它来驱动一个LED直观显示连接状态非常实用。EN/KEY使能或进入AT模式的关键引脚。这个引脚的不同操作决定了模块是处于正常工作透传模式还是AT命令配置模式。这是配置环节的核心我们稍后详细展开。模块上通常还有一个LED指示灯其闪烁模式代表了不同状态快速闪烁每秒数次表示正在等待配对慢速闪烁约2秒一次表示已配对但未建立数据连接常亮表示已建立数据连接。读懂这个灯语是快速诊断问题的第一步。2.2 与单片机以Arduino为例的基础连接让我们以最常见的Arduino Uno为例建立最基础的连接。你需要准备一个USB转TTL串口模块如CH340、CP2102等因为在配置阶段我们需要用电脑直接与HC-06对话。连接示意图如下供电将HC-06的VCC连接到Arduino的3.3V输出引脚切勿接5VGND连接到Arduino的GND。通信线将HC-06的TXD连接到Arduino的RX引脚数字引脚0将HC-06的RXD连接到Arduino的TX引脚数字引脚1。注意在配置时Arduino的RX/TX引脚会被USB串口占用可能导致冲突。因此更稳妥的做法是在配置阶段我们不通过Arduino而是用USB转TTL模块直接连接HC-06。配置线关键将HC-06的EN/KEY引脚通过一个1kΩ左右的电阻用于限流防止意外高电平冲击连接到一个可控的GPIO例如Arduino的数字引脚2。你也可以暂时用杜邦线手动连接至高电平3.3V或低电平GND来测试。重要提示很多教程让你在连接USB线给Arduino供电的同时进行配置这很容易因为串口冲突导致AT指令无响应。我个人的标准做法是配置时断开Arduino与电脑的USB连接单独使用一个USB转TTL模块连接HC-06和电脑。这样能确保通信链路干净、唯一。2.3 专用配置电路搭建为了彻底避免干扰我推荐搭建一个独立的配置环境这也是最可靠的方法准备一个USB转TTL模块确保其支持3.3V电平。连接USB转TTL模块的3.3V到HC-06的VCCGND到GND。连接USB转TTL模块的RXD到HC-06的TXDTXD到HC-06的RXD。将HC-06的EN/KEY引脚通过一个1kΩ电阻连接到USB转TTL模块的3.3V引脚或者用一个跳线帽接到VCC。此时模块处于AT命令模式。将USB转TTL模块插入电脑打开串口调试助手如Arduino IDE自带的串口监视器、Putty、SSCOM等你就可以开始配置了。3. AT命令模式深度解析与配置实战AT命令是调制解调器时代的遗产意为“Attention”是一套通过文本字符串进行控制的简单协议。HC-06的所有配置都通过向其串口发送特定的AT指令来完成。3.1 如何正确进入AT模式进入AT模式是成功配置的前提也是新手最容易踩坑的地方。HC-06有两种常见的进入方式取决于模块背面主控芯片的型号。方法一上电前拉高KEY/EN引脚适用于大多数HC-06这是最主流的方法。操作步骤如下确保HC-06的KEY/EN引脚通过电阻连接到高电平3.3V。在保持KEY/EN为高电平的状态下给HC-06模块上电接通VCC和GND。此时模块上的LED指示灯会变为慢闪约每秒2次这与配对成功但未连接的状态很像但此时它实际上是在等待AT命令。这个状态就是AT命令模式。打开串口调试助手设置正确的串口参数波特率通常为9600或384008位数据位1位停止位无奇偶校验即可发送AT指令。方法二在透传模式下拉高KEY/EN引脚适用于部分ZS-040有些版本的模块支持在正常通电并进入透传模式后再将KEY/EN引脚拉至高电平模块会自动切换到AT模式LED变为常亮。但这种方法成功率不稳定我建议优先使用方法一。实操心得如果你不确定模块是哪种就统一用“方法一”。如果上电后LED是快闪搜索状态而不是慢闪说明KEY/EN引脚电平可能没接好或者模块不支持该方法。另一个关键点是在AT模式下模块无法被手机蓝牙搜索到这是一个很好的判断依据。3.2 核心AT命令详解与使用进入AT模式后在串口调试助手中选择“发送新行”即自动在指令后加回车换行\r\n因为HC-06的AT命令需要以回车换行作为结束符。1. 测试连接AT指令AT预期返回OK说明这是最基本的指令用于检查模块是否处于AT模式以及通信是否正常。如果没返回OK请检查接线是否正确TXD/RXD是否交叉、波特率是否匹配、KEY/EN引脚电平是否正确、是否选择了“发送新行”。2. 修改模块名称ATNAMEname指令ATNAMEMyBluetooth预期返回OKsetname说明将模块的蓝牙广播名称改为“MyBluetooth”。手机扫描时看到的就是这个名字。名称最好有辨识度避免使用默认的“HC-06”。3. 修改配对密码ATPINpin指令ATPIN1234预期返回OKsetPIN说明将配对密码修改为“1234”。出厂默认常为“1234”或“0000”。为了安全建议修改。密码必须是4位数字。4. 修改通信波特率ATBAUDnum指令ATBAUD4预期返回OK9600说明这是最容易出错的地方波特率参数num是一个数字代码而不是直接的波特率数值。1- 12002- 24003- 48004- 9600(出厂默认最常用)5- 192006- 384007- 576008- 115200重要发送ATBAUD4后模块波特率立即变为9600。此时你必须将串口调试助手的波特率也改为9600才能继续通信。如果你想设为115200则发送ATBAUD8然后立即将串口波特率切换到115200再发送下一条指令。5. 查询版本信息ATVERSION指令ATVERSION预期返回类似OKlinvorV1.8的字符串。说明用于确认模块固件版本。不同版本的指令响应可能有细微差别。6. 恢复出厂设置ATORGL指令ATORGL预期返回OK说明将所有参数名称、密码、波特率恢复为出厂默认值。当你把配置改乱时这是最后的“后悔药”。配置流程示例假设我们想将模块名称改为“RobotCar”密码改为“8888”波特率设为115200与后续Arduino程序匹配。按“方法一”进入AT模式串口助手波特率设为9600。发送AT收到OK。发送ATNAMERobotCar收到OKsetname。发送ATPIN8888收到OKsetPIN。发送ATBAUD8收到OK115200。注意收到此回复后模块波特率已变为115200。立即将串口助手的波特率从9600改为115200。再次发送AT确认在115200波特率下能收到OK说明修改成功。断开电源将KEY/EN引脚从高电平断开或接地重新上电。此时模块LED应开始快闪进入可被发现配对的状态名称变为“RobotCar”。3.3 配置过程中的常见陷阱与排查发送AT指令无任何返回检查1电源与电平。确保供电是稳定的3.3VTXD/RXD交叉连接KEY/EN引脚在上电前已稳定接高电平3.3V。检查2波特率。尝试更换波特率从9600、38400到115200都试一遍。有些出厂模块的默认波特率可能是38400。检查3串口设置与线序。确认串口助手选择了正确的COM口设置了“8N1”8位数据、无校验、1位停止位并勾选了“发送新行”。检查USB转TTL模块的TX/RX线是否接反。返回乱码这几乎是波特率不匹配的典型症状。你发送指令的波特率和模块当前工作的波特率不一致。请用各种常见波特率逐一测试或者发送AT指令看哪个波特率下返回的是清晰的OK。修改波特率后“失联”这是经典问题。发送ATBAUDx后模块波特率立刻改变。你必须同步更改串口助手的波特率才能继续对话。如果改错了就重新上电用原来的波特率通常是9600连接或者用ATORGL恢复默认后再试。AT模式下达指令返回ERROR检查指令格式是否正确有无多余空格。例如ATNAMEMyBT是正确的ATNAME MyBT可能就会报错。某些指令参数有范围限制如PIN必须是4位数字。4. 与手机及电脑的配对连接实战配置完成后模块重启进入透传模式。接下来就是让终端设备手机/电脑连接它。4.1 与手机连接以Android为例硬件准备将配置好的HC-06与你的单片机系统正确连接KEY/EN引脚悬空或接地使其处于透传模式。给整个系统上电HC-06的LED应开始快速闪烁。手机操作打开手机的蓝牙设置开始扫描设备。你应该能看到你之前设置的名称如“RobotCar”。配对点击该设备进行配对手机会提示输入PIN码输入你之前设置的密码如“8888”。连接状态配对成功后HC-06的LED会变为慢闪约2秒一次这表示已配对但未建立数据连接。此时手机和模块是“认识”状态但还没开始“通话”。建立数据连接配对本身并不自动建立用于数据传输的RFCOMM通道。你需要一个蓝牙串口APP如“Serial Bluetooth Terminal”、“蓝牙串口”等来主动连接。在APP内选择已配对的设备“RobotCar”进行连接。连接成功后模块LED变为常亮手机APP的串口界面就变成了一个无线终端可以发送和接收数据了。注意事项很多初学者卡在“已配对但无法通信”这一步原因就是缺少了第5步——用专用APP建立数据连接。手机系统的蓝牙设置界面只负责配对管理不提供通用的串口数据通道。4.2 与电脑连接Windows系统在电脑上使用HC-06通常是为了调试或作为无线串口接收数据。配对打开Windows设置 - 蓝牙和其他设备 - 添加蓝牙或其他设备 - 蓝牙。电脑会搜索到你的HC-06模块点击配对并输入PIN码。识别COM口配对成功后Windows会为这个蓝牙连接虚拟出一个串行端口COM口。你可以在“设备管理器” - “端口COM和LPT”下找到它例如“Standard Serial over Bluetooth link (COM5)”。记下这个COM口号。数据通信使用任何串口调试软件如Putty、AccessPort、甚至Arduino IDE的串口监视器选择对应的蓝牙虚拟COM口如COM5设置与HC-06模块相同的波特率如115200即可进行双向通信。一个高级技巧你可以编写一个简单的Python脚本使用pySerial库来读写这个蓝牙COM口从而实现用电脑程序无线控制你的单片机项目。import serial import time # 替换成你的蓝牙COM口 bluetooth_port COM5 baud_rate 115200 try: ser serial.Serial(bluetooth_port, baud_rate, timeout1) print(fConnected to {bluetooth_port}) # 发送数据 ser.write(bHello from PC!\n) # 接收数据 time.sleep(0.1) while ser.in_waiting: data ser.readline().decode(utf-8).strip() print(fReceived: {data}) ser.close() except Exception as e: print(fError: {e})4.3 连接稳定性优化与故障排除蓝牙连接有时会不稳定特别是距离稍远或有遮挡时。以下是一些提升稳定性的经验和问题排查点电源噪声HC-06对电源纹波比较敏感。如果单片机系统中有电机等大电流负载强烈的电源噪声会导致蓝牙模块频繁断开。解决方案是为HC-06使用独立的LDO低压差线性稳压器供电并在VCC和GND之间靠近模块引脚处并联一个10μF电解电容和一个0.1μF陶瓷电容用于滤波。天线远离干扰源HC-06的PCB天线部分通常是一段蛇形走线应尽量远离单片机的高速数字线路、晶振、开关电源电路并避免被金属外壳完全包裹。软件握手在单片机程序中不要一味地高速向串口发送数据。可以设计简单的通信协议如“一问一答”或加入数据校验如校验和避免因数据冲刷导致缓冲区溢出或连接断开。连接断开后重连如果连接意外断开HC-06模块会自动回到快闪的待配对状态。手机或电脑端需要重新在蓝牙串口APP中进行连接操作不是重新配对。在单片机程序里可以监测STATE引脚的电平变化来检测连接状态。无法搜索到设备确认模块已供电且LED在快闪。确认模块未处于AT模式AT模式下不可被发现。手机/电脑蓝牙是否已打开并处于可发现模式。周围是否有过多蓝牙设备干扰尝试靠近模块。5. 进阶应用与设计考量掌握了基础配置与连接后我们可以探讨一些更深入的应用场景和设计选择。5.1 在典型单片机项目中的集成以Arduino控制一个LED为例演示完整的双向通信。Arduino端代码// 使用 SoftwareSerial 库避免占用硬件串口便于同时使用USB监控 #include SoftwareSerial.h SoftwareSerial myBluetooth(2, 3); // RX, TX (连接HC-06的TXD, RXD) void setup() { Serial.begin(115200); // 用于USB调试输出 myBluetooth.begin(115200); // 必须与HC-06模块波特率一致 pinMode(LED_BUILTIN, OUTPUT); Serial.println(Bluetooth LED Control Ready!); } void loop() { // 检查蓝牙串口是否有数据 if (myBluetooth.available()) { char command myBluetooth.read(); Serial.print(Received: ); Serial.println(command); if (command 1) { digitalWrite(LED_BUILTIN, HIGH); myBluetooth.println(LED ON); } else if (command 0) { digitalWrite(LED_BUILTIN, LOW); myBluetooth.println(LED OFF); } else { myBluetooth.println(Unknown command); } } // 可以定期通过蓝牙发送一些状态数据 // static unsigned long lastSend 0; // if (millis() - lastSend 5000) { // lastSend millis(); // myBluetooth.println(System is alive.); // } }手机端操作在蓝牙串口APP中发送字符1打开LED发送0关闭LED同时APP会收到来自Arduino的回复信息。5.2 HC-06与JDY-31、BLE模块的对比选择HC-06属于经典蓝牙Bluetooth ClassicSPP协议而JDY-31这类模块通常支持蓝牙低功耗BLE。了解它们的区别有助于你为项目选型特性HC-06 (蓝牙2.0/SPP)JDY-31 (蓝牙4.2/BLE)功耗较高适合持续供电场景极低适合电池供电、待机长的设备连接速度快配对后连接即建立连接过程稍慢但数据传输效率高通信模型基于串口流像水管数据连续不断基于服务与特征值像寄存器和邮箱需要读写操作手机端开发简单通用蓝牙串口APP即可需要特定APP或系统支持Android/iOS SDK通用性稍差通信距离约10米无遮挡类似或稍优取决于版本成本极低略高适用场景遥控车、持续数据监控、无线调试、需要与旧设备兼容物联网传感器、穿戴设备、低功耗遥控器、与手机App深度交互选择建议如果你的项目需要手机用一个现成的串口APP就能快速控制设备是插电或使用大容量电池的HC-06是完美选择。如果你的项目是电池供电的传感器需要长时间待机并且你愿意为手机端开发一个定制App那么BLE模块如JDY-31更合适。5.3 多模块组网与主从模式HC-06模块可以设置为主机Master或从机Slave模式。出厂默认为从机模式即等待手机等主机来连接。从机模式Slave就是我们一直用的模式被动等待连接。主机模式Master模块可以主动搜索并连接指定的从机设备。通过AT命令ATROLEMMMaster SSlave可以切换。在主机模式下还需要用ATBINDaddr命令绑定目标从机的蓝牙MAC地址。应用场景你可以让两个单片机各带一个HC-06一个设为主机一个设为从机并绑定地址。这样上电后它们会自动配对连接实现两个单片机系统之间的无线串口通信无需手机介入。这在构建点对点的无线传感网络或双机通信系统中非常有用。配置主机模式相对复杂因为需要知道从机的MAC地址可通过手机APP或从机在AT模式下用ATADDR?命令查询。一旦配好其便利性是显而易见的。6. 疑难杂症速查与终极清单即使按照步骤操作现实世界还是会有各种意外。下面是我整理的一份问题排查清单覆盖了从硬件到软件的常见坑点。问题模块完全没反应LED不亮。排查检查电源电压是否为3.3V极性是否接反电源是否有足够电流HC-06工作电流约30mA。用万用表测量VCC和GND之间电压。问题LED常亮但无法配对和通信。排查模块可能处于AT模式。检查KEY/EN引脚是否被意外拉高。断电后确保该引脚悬空或接地再重新上电。问题手机能配对但串口APP无法连接。排查1手机蓝牙设置里找到已配对的HC-06设备选择“取消配对”或“忘记此设备”然后重新在串口APP内进行扫描、配对、连接的全流程。有时系统级的配对信息会干扰APP。排查2确认单片机程序使用的波特率与模块配置的波特率一致。排查3尝试更换不同的蓝牙串口APP。问题通信一段时间后自动断开。排查1电源问题。在模块供电处并联大电容如100μF缓冲。排查2软件问题。检查单片机程序是否发生阻塞或看门狗复位。确保串口发送缓冲区不会溢出。排查3距离或障碍物。蓝牙在穿墙后信号衰减严重。问题发送数据出现丢失或错乱。排查1波特率误差。单片机的主频可能产生非标准的波特率与HC-06的波特率存在误差累积。尽量使用标准的波特率如9600, 115200并确保单片机时钟配置准确。排查2电气干扰。确保TXD/RXD信号线远离电源线和电机驱动线必要时使用双绞线。排查3程序逻辑。在单片机端避免在中断服务程序中进行长时间的串口打印操作。使用缓冲区并合理安排发送时序。最后的大招如果所有方法都试过模块依然行为异常。尝试使用ATORGL恢复出厂设置然后仅用ATBAUD4和ATNAME、ATPIN进行最基础的配置排除是复杂配置导致的问题。如果恢复出厂设置后连AT模式都无法进入那很可能是模块硬件本身已损坏考虑更换一个。玩转HC-06的过程就是一个典型的嵌入式系统调试过程从硬件连接到软件配置从协议理解到问题排查。它虽然是一个简单的模块但涵盖了无线嵌入式开发中最基础也最重要的概念。希望这份超详细的指南能帮你扫清障碍让你手中的这个小蓝板真正成为项目腾飞的翅膀。