尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

HC-05与JDY-31蓝牙模块AT指令配置与通信实战指南

HC-05与JDY-31蓝牙模块AT指令配置与通信实战指南 1. 项目缘起为什么需要让两个蓝牙模块“对话”最近在做一个智能家居中控的DIY项目核心需求是让一个放置在客厅的中央控制器主控能够无线控制分布在卧室、厨房的多个传感器和执行器。无线方案的选择上Wi-Fi功耗偏高且配置复杂Zigbee需要网关而蓝牙特别是经典蓝牙Bluetooth Classic以其成熟、稳定、开发简单的特点进入了我的视野。我的主控板预留了串口很自然地就想到了使用HC-05这种经典的蓝牙串口透传模块。而受控端的设备为了追求更低的成本和功耗我选择了JDY-31这款同样基于串口透传的蓝牙模块。想法很美好主控通过串口发送指令HC-05模块将指令通过蓝牙无线发出JDY-31模块接收到后再通过其串口传递给受控端的单片机从而实现无线控制。但实际操作起来发现事情没那么简单。HC-05和JDY-31虽然都是蓝牙串口透传模块但它们的默认配置、通信角色乃至一些底层细节都有差异直接上电连接大概率会失败。这就需要我们深入它们的“内心”通过AT指令进行配置让它们能够互相识别并建立稳定的通信链路。这个过程就是一次典型的嵌入式无线通信调试充满了硬件连接、指令交互和逻辑梳理的细节。2. 模块选型与核心特性对比HC-05与JDY-31的异同在动手连接之前我们必须先搞清楚手里的两块“积木”到底有什么不同。盲目接线只会导致时间浪费在无意义的调试上。2.1 HC-05经典主从一体蓝牙模块HC-05可以说是蓝牙开发领域的“老兵”了非常常见。它的核心特点是主从一体也就是说同一个模块既可以通过AT指令配置为**主设备Master去主动搜索并连接其他蓝牙从设备也可以配置为从设备Slave**等待被其他主设备连接。供电与接口工作电压通常是3.3V或5V注意查看具体型号通过一个电平转换芯片如MAX3232与电脑USB转TTL模块的3.3V TX/RX连接最为稳妥。它有六个引脚VCC、GND、TXD、RXD、STATE、EN/KEY。其中STATE是连接状态指示EN/KEY用于进入AT命令模式。通信角色默认出厂状态一般是从机模式。这意味着如果你买两个HC-05默认是无法直接配对的需要将其中一个配置为主机。AT指令通过拉高EN/KEY引脚电平或通过特定上电时序进入AT命令模式此时波特率固定为38400绝大多数型号务必确认可以通过串口工具发送AT指令进行查询和配置。退出AT模式后以用户设定的波特率进行数据透传。配对码默认配对码通常是“1234”。2.2 JDY-31低成本、低功耗的从机模块JDY-31是近年来非常流行的一款低成本蓝牙模块常被用于智能小车、遥控器等对成本敏感的场景。供电与接口工作电压一般为3.3V部分型号兼容5V逻辑电平。引脚简洁通常只有VCC、GND、TXD、RXD四个核心引脚有些型号会多一个STATE状态引脚。它通常只支持从机Slave模式。这意味着JDY-31只能被搜索和连接而不能主动去连接别人。通信角色固定为从机。这是它与HC-05最根本的区别之一。所以在HC-05与JDY-31通信的系统中HC-05必须被设置为主机Master。AT指令JDY-31也支持AT指令但其进入方式可能与HC-05不同。常见的方式是在模块未连接的状态下直接通过串口发送特定字符如“”注意不带回车换行来唤醒AT模式退出则发送“ATEXIT”。其AT指令集和波特率也可能与HC-05有差异需要查阅具体的数据手册。配对码默认可能为“0000”或“1234”同样需要根据手册确认。2.3 对比表格与选型结论为了让差异更直观我整理了下面的对比表格特性HC-05JDY-31对本项目的影响默认角色从机 (Slave)从机 (Slave)两者默认都是从机无法主动连接必须配置HC-05为主机。角色可变性主从一体可通过AT指令切换通常固定为从机系统架构已定HC-05为主JDY-31为从。AT指令进入方式拉高EN/KEY引脚电平后上电或特定时序未连接时发送“”等唤醒字符硬件连接和软件操作流程不同这是调试的第一个关键点。AT模式波特率通常固定为38400通常为9600或115200需查手册连接电脑配置时串口工具的波特率必须设置正确否则收不到“OK”响应。默认配对码12340000 或 1234两者必须设置为相同的配对码才能成功配对。成本与复杂度稍高引脚多功能全低引脚少功能专注JDY-31更经济但HC-05在需要主从切换的场景更灵活。选型结论对于本项目这种“一主多从”的星型网络拓扑由HC-05作为唯一的主设备去连接多个JDY-31从设备是一个合理且经济的方案。HC-05的主机能力提供了连接主动性而JDY-31的低成本适合大规模部署在终端节点上。3. 硬件连接与AT指令配置实战理论清晰后我们进入实操环节。整个过程分为两大步第一步分别用USB转TTL模块连接HC-05和JDY-31到电脑进行独立配置第二步将配置好的两个模块分别接入各自的目标系统单片机实现最终通信。3.1 硬件连接准备你需要准备以下硬件HC-05模块一个JDY-31模块一个。USB转TTL模块如CH340、CP2102等两个或者一个但需要来回切换。杜邦线若干。电脑一台安装好串口调试助手如XCOM、SSCOM、Putty等。连接示意图以配置HC-05为例电脑USB口 - USB转TTL模块 - HC-05模块 3.3V -- VCC GND -- GND TXD -- RXD RXD -- TXD注意这里是交叉连接USB转TTL的TXD发送端要接模块的RXD接收端USB转TTL的RXD要接模块的TXD。VCC一定要接对电压HC-05接5V或3.3V建议先3.3VJDY-31强烈建议接3.3V。对于HC-05还需要连接EN/KEY引脚到高电平3.3V以便进入AT模式。有些模块板载了按键按下再上电也可进入。3.2 配置HC-05为主设备Master这是最关键的一步。我们假设你手上的是一个全新的、未配置过的HC-05模块。进入AT模式按照上述连接图接好线确保HC-05的EN/KEY引脚连接到了VCC高电平然后给模块上电。此时模块指示灯会慢闪约2秒一次表示进入AT命令模式。打开串口工具在电脑上打开串口调试助手选择正确的COM口设置波特率为38400数据位8停止位1无校验位8N1。打开串口。测试连接在发送框输入AT并回车确保勾选“发送新行”或输入\r\n。如果模块返回OK恭喜你AT模式进入成功。如果没反应请检查接线是否正确特别是TXD/RXD是否交叉、EN/KEY电平是否拉高、波特率38400是否正确。查询当前信息可选但推荐ATNAME?查询当前蓝牙名称。ATROLE?查询当前角色。通常返回ROLE:00代表从机1代表主机2代表回环。ATPSWD?查询当前配对码。通常返回PSWD:1234。ATUART?查询当前串口通信参数波特率、停止位等。进行关键配置设置角色为主机发送ATROLE1返回OK。这一步将HC-05从默认的从机改为可以主动搜索连接的主机。设置配对码发送ATPSWD“1234”返回OK。这里设为“1234”需要和JDY-31的配对码一致。设置蓝牙名称发送ATNAMEMaster_HC05返回OK。给主机起个名字方便识别。设置通信波特率发送ATUART9600,0,0返回OK。这个命令格式为ATUART波特率,停止位,校验位。9600,0,0表示波特率96001位停止位无校验。这个波特率是模块退出AT模式后进行数据透传时使用的波特率需要和你的主控单片机程序设定的串口波特率一致。这里我们先设为9600。保存并退出发送ATRESET或重新上电断开EN/KEY的高电平连接使配置生效。重启后模块指示灯会快闪约1秒两次表示处于主机模式并正在搜索从设备。3.3 配置JDY-31为从设备SlaveJDY-31的配置方式略有不同因为它通常没有专门的AT模式引脚。连接与上电用另一个USB转TTL模块同样以交叉接法连接JDY-31的VCC(3.3V)、GND、TXD、RXD。注意JDY-31不要连接任何触发AT模式的引脚直接上电即可。上电后指示灯可能常亮或快闪表示处于可被发现的从机模式。打开串口工具选择对应的COM口设置波特率。JDY-31的AT模式波特率需要查阅手册常见的有9600或115200。如果不确定可以两个都试一下。同样设置为8N1。唤醒AT模式这是关键操作。在串口工具的发送框不勾选“发送新行”直接输入并点击发送。模块收到后指示灯可能会改变闪烁模式比如慢闪并在接收框返回OK。这表示成功进入AT模式。重要提示发送“”时前后不能有其他字符最好关闭串口工具的“自动发送回车换行”功能。如果没反应可以尝试在“”后加一个回车再试但优先不加。进行关键配置查询/设置配对码发送ATPASS?查询可能返回PASS1234。发送ATPASS1234进行设置确保与HC-05的配对码相同。查询/设置蓝牙名称发送ATNAME?查询。发送ATNAMESlave_JDY31设置一个从机名称。查询/设置通信波特率发送ATBAUD?查询。发送ATBAUD9600设置透传波特率为9600与HC-05保持一致。查询MAC地址可选但重要发送ATLADDR?或ATMAC?模块会返回其蓝牙MAC地址如MAC20:16:07:12:34:56。记下这个地址在HC-05的主机模式下我们可以通过MAC地址直接指定连接它避免误连其他设备。退出AT模式发送ATEXIT或ATRESET模块会退出AT模式并重启应用新配置。重启后它应该处于可被连接的从机状态。4. 双模块配对连接与数据透传测试两个模块都配置好后就可以让它们“牵手”了。测试分为两个阶段一是直接用USB转TTL连接电脑进行无线透传测试二是接入最终的单片机系统。4.1 无线配对连接测试这个测试可以完全在电脑端完成验证蓝牙链路是否通畅。硬件连接将已配置为主机的HC-05模块其EN/KEY引脚悬空或接地退出AT模式然后通过USB转TTL连接电脑COM1。串口工具设置波特率为9600与之前ATUART设置的透传波特率一致。将已配置为从机的JDY-31模块同样通过另一个USB转TTL连接电脑COM2。串口工具波特率也设为9600。自动配对两个模块上电后HC-05主机会开始自动搜索周围可用的从设备。如果JDY-31从机处于可发现状态指示灯快闪HC-05会找到它并使用之前设置的相同配对码“1234”进行配对。配对成功后两个模块的指示灯都会变为双闪快速闪烁两下然后停顿或常亮取决于具体型号这表示蓝牙链路已经建立。数据透传测试在连接HC-05的串口工具COM1发送框输入“Hello JDY-31”点击发送。在连接JDY-31的串口工具COM2的接收框你应该能看到“Hello JDY-31”字样。反之在COM2发送“Hi HC-05”在COM1接收框也能看到。如果成功恭喜你两个模块之间的蓝牙串口透传通道已经完全打通。你现在拥有了一个无线串口电脑通过COM1发送的数据会无线传输到COM2就像用一根无形的线连接了两个串口。4.2 使用AT指令指定连接进阶在自动搜索配对的环境下如果周围有多个蓝牙从设备HC-05可能会连错对象。更可靠的方式是让HC-05通过AT指令绑定指定MAC地址的JDY-31。让HC-05重新进入AT模式给HC-05的EN/KEY引脚接高电平后重新上电串口工具波特率切回38400。清除已配对列表发送ATRMAAD清除所有已绑定的设备地址返回OK。绑定指定从机发送ATBIND2016,07,123456。这里的参数就是你在3.3节第4步记下的JDY-31的MAC地址但需要去掉冒号并用逗号分隔。例如MAC20:16:07:12:34:56就写成2016,07,123456。发送后返回OK。设置连接模式发送ATCMODE0返回OK。这个命令ATCMODE0表示HC-05只连接绑定的地址即我们上一步指定的JDY-31地址。ATCMODE1是连接任何设备ATCMODE2是回环模式。重启并测试发送ATRESET或重新上电退出AT模式。HC-05重启后会主动去寻找并连接MAC地址为20:16:07:12:34:56的设备。连接成功后的透传测试方法与4.1节相同。这种方式在有多设备干扰或需要固定配对的工业场景中非常有用。5. 集成到单片机系统硬件连接与软件逻辑无线链路测试通过后就可以将它们集成到最终的项目中了。我们将HC-05连接主控单片机如STC89C52、STM32、Arduino等将JDY-31连接从机单片机。5.1 硬件连接示意图主控系统 主控MCU (UART1) -- HC-05蓝牙模块 TX - RXD RX - TXD VCC - VCC (注意电平匹配3.3V/5V) GND - GND 从机系统 从机MCU (UART1) -- JDY-31蓝牙模块 TX - RXD RX - TXD VCC - VCC (建议3.3V) GND - GND电平匹配警告如果主控MCU是5V系统如51单片机、Arduino Uno而蓝牙模块是3.3V电平直接连接可能会损坏模块。务必使用电平转换电路如分压电阻、电平转换芯片TXS0108E或选择支持5V TTL输入的模块型号。5.2 主控端HC-05侧软件逻辑主控端的单片机程序变得非常简单因为它只需要与HC-05进行有线串口通信无线部分由HC-05模块自己完成。// 以Arduino为例的伪代码 void setup() { Serial.begin(9600); // 初始化与HC-05通信的串口波特率必须与HC-05透传波特率一致 } void loop() { // 1. 发送指令到从机 if (某个触发条件如按键按下) { Serial.println(TURN_ON_LED); // 通过串口发送指令HC-05会无线转发给JDY-31 delay(100); // 避免发送过快 } // 2. 接收从机返回的数据 if (Serial.available() 0) { String receivedData Serial.readStringUntil(\n); // 读取从HC-05传来的数据源自JDY-31 // 处理接收到的数据例如“TEMP:25.6” processData(receivedData); } }主控程序完全无需处理蓝牙协议栈、配对、连接等复杂过程它只是把HC-05当作一个“无线串口线”来用。所有蓝牙层面的工作都在我们之前用AT指令配置模块时完成了。5.3 从机端JDY-31侧软件逻辑从机端的逻辑同样清晰它也只与JDY-31进行有线串口通信。// 以Arduino为例的伪代码 void setup() { Serial.begin(9600); // 初始化与JDY-31通信的串口波特率必须匹配 pinMode(LED_PIN, OUTPUT); } void loop() { // 监听来自主机的指令 if (Serial.available() 0) { String command Serial.readStringUntil(\n); // 读取从JDY-31传来的指令源自HC-05 command.trim(); // 去除末尾换行符等 if (command TURN_ON_LED) { digitalWrite(LED_PIN, HIGH); Serial.println(LED_ON_OK); // 可以发送状态回传 } else if (command TURN_OFF_LED) { digitalWrite(LED_PIN, LOW); Serial.println(LED_OFF_OK); } else if (command.startsWith(SET_VALUE:)) { // 解析更复杂的指令 int value command.substring(10).toInt(); // ... 执行操作 } } // 可以定时采集传感器数据并上报 static unsigned long lastReport 0; if (millis() - lastReport 5000) { // 每5秒上报一次 float temperature readTemperature(); Serial.print(TEMP:); Serial.println(temperature); lastReport millis(); } }6. 深度避坑指南与高级调试技巧在实际项目中我踩过不少坑这里总结出来希望能帮你节省大量时间。6.1 电源与干扰问题问题现象模块时好时坏连接不稳定数据丢包甚至无法启动。根因与解决电源功率不足蓝牙模块在发射数据时瞬时电流可能达到几十毫安。使用劣质USB转TTL模块或单片机板载的3.3V LDO可能供电不足。务必使用独立、稳定的3.3V电源为模块供电或在VCC引脚就近并联一个100μF的电解电容和一个0.1μF的瓷片电容进行滤波。电源噪声如果使用开关电源DCDC为整个系统供电其噪声可能干扰蓝牙模块的射频电路。在模块的电源入口处增加π型滤波电路电感电容会有奇效。地线问题确保所有设备电脑USB转TTL、单片机、蓝牙模块的GND共地否则串口通信电平会错乱。6.2 串口通信参数不匹配问题现象AT指令无响应或透传时收到乱码。根因与解决AT模式与透传模式波特率混淆这是最常见错误。务必牢记HC-05AT模式波特率固定38400透传模式波特率由ATUART命令设置如9600。JDY-31AT模式波特率需查手册如9600透传模式波特率由ATBAUD命令设置。操作时连接电脑配置用AT模式波特率连接单片机通信用透传模式波特率。数据格式不一致除了波特率还要检查数据位8、停止位1、校验位无。单片机串口初始化必须与模块透传设置完全一致。6.3 连接建立失败问题现象模块指示灯一直快闪无法配对成功。根因与解决角色未正确设置确保HC-05已通过ATROLE1设为主机JDY-31为从机。配对码不一致用AT指令仔细检查并统一两者的配对码ATPSWDvsATPASS。从机不可发现有些JDY-31模块有“可见模式”指令如ATDISC或ATSCAN相关命令确保其处于可被搜索状态。默认上电一般是可发现的。距离与障碍物初期测试请让两模块靠近1米内避开金属屏蔽和强干扰源如路由器、微波炉。6.4 数据丢包与传输优化问题现象小数据量正常大数据量或高速传输时丢包。根因与解决缓冲区溢出单片机串口接收缓冲区太小。在单片机程序中提高串口接收中断的优先级或使用环形缓冲区并确保及时读取Serial.available()的数据。协议设计在应用层设计简单的通信协议。例如为每帧数据添加帧头如0xAA、帧尾如0x55和校验和如累加和。接收方只有收到完整且校验正确的帧才进行处理。// 示例协议帧0xAA [数据长度] [数据内容...] [校验和] 0x55降低波特率在满足业务需求的前提下使用较低的透传波特率如9600比高波特率如115200更稳定抗干扰能力更强。模块固件与驱动确保你使用的串口库或驱动是稳定版本。在某些嵌入式RTOS中串口驱动任务优先级设置不当也会导致丢包。6.5 使用逻辑分析仪抓包调试当问题非常诡异软件排查无从下手时硬件工具是终极武器。你可以使用逻辑分析仪或示波器抓取单片机TXD引脚与蓝牙模块RXD引脚之间的波形。连接将逻辑分析仪的通道探头连接到单片机串口的TXD引脚即发送给模块的数据线。设置软件中设置正确的采样率和协议UART波特率9600。抓取与分析触发一次数据发送逻辑分析仪会捕获到实际的数字波形并将其解码为十六进制或ASCII字符。你可以直观地看到单片机实际发送出的数据是什么是否包含了多余的字符、格式是否正确。这能有效排除是单片机程序问题还是蓝牙模块本身的问题。通过以上五个步骤——从模块特性理解、AT指令配置、无线测试、系统集成到深度排错——你应该能够彻底掌握HC-05与JDY-31模块间的通信。整个过程的核心思想是“化繁为简”利用AT指令将复杂的蓝牙协议配置好然后对上层单片机程序而言它们就变成了两条简单的、无线的串口线。这种思路可以扩展到几乎所有类似的串口透传无线模块如Wi-Fi模块ESP8266、LoRa模块等只要吃透了AT指令集和硬件连接剩下的就是串口编程的基本功了。
返回列表