HC-05与JDY-31蓝牙模块跨品牌通信:主从配置与AT指令实战
2026/8/7 3:53:06 网站建设 项目流程

1. 项目概述:当经典遇见新秀

搞嵌入式开发的朋友,对HC-05这款蓝牙模块肯定不陌生,它几乎是很多单片机玩家入门无线通信的“启蒙老师”。稳定、资料多、价格亲民,是它的标签。但最近几年,市场上涌现了一批像JDY-31这样的新秀模块,它们往往宣称功耗更低、成本更优、甚至功能更花哨。于是,一个很实际的问题就摆在了面前:我手头有一个基于HC-05的老项目,或者我熟悉HC-05的配置,现在要接入一个使用JDY-31模块的新设备,它们俩能“对上话”吗?

答案是肯定的,但过程绝非简单的“即插即用”。这个项目,就是深入探讨如何让HC-05与JDY-31这两个不同品牌、不同指令集的蓝牙模块实现稳定、可靠的双向数据通信。这不仅仅是让两个模块配对连接那么简单,它涉及到对蓝牙透传模块核心工作模式的理解、对AT指令集的精确操控、对串口通信参数的统一,以及对一些隐藏“坑点”的预判和规避。

对于开发者而言,掌握这种跨模块通信的能力极具价值。它意味着你在设备选型上有了更大的自由度,可以不受单一供应商的束缚;也意味着你能维护和升级遗留系统,让老设备焕发新生;更深层次地,这是对串口透传蓝牙通信本质的一次深刻实践——剥开品牌的外衣,理解它们如何作为无线串口桥梁来工作。

2. 通信基础与模块选型解析

在动手连接线缆之前,我们必须先理清思路。HC-05与JDY-31的通信,本质上是两个蓝牙串口透传(SPP)模块之间的通信。它们将自己伪装成一个虚拟的串口,对单片机(MCU)而言,就像在和另一个串口设备通信,只不过数据是通过蓝牙空中接口传输的。

2.1 核心通信模式:主从配置

这是实现通信的第一步,也是最关键的概念。蓝牙透传模块通常有两种角色:主设备(Master)和从设备(Slave)。

  • 主设备:主动发起扫描和连接的设备。可以搜索并连接其他蓝牙从设备。
  • 从设备:等待被连接的设备。它广播自己的存在,供主设备发现和连接。

要让HC-05与JDY-31通信,必须将一个配置为主模式,另一个配置为从模式。通常,我们将相对固定、作为服务提供方的设备设为从机,将需要发起连接的移动设备或主机设为主机。例如,一个蓝牙数据采集器(JDY-31作为从机)等待一个手持控制器(HC-05作为主机)来连接。

为什么不能两个都是主机或都是从机?两个主机会互相扫描但无法连接;两个从机则都在等待,无人发起连接。因此,明确的主从关系是建立通信链路的前提。

2.2 HC-05与JDY-31模块简介与对比

了解你的“士兵”是打赢战役的基础。

HC-05模块:

  • 核心芯片:通常采用英国CSR的BC417系列蓝牙芯片,经典可靠。
  • 供电:典型3.3V,注意有些模块兼容5V逻辑电平,但供电最好还是3.3V。
  • 关键特性:支持经典蓝牙2.0+EDR,SPP协议。自带板载LED状态指示(快闪/慢闪/双闪含义不同)。AT指令集较为标准且丰富。
  • 工作模式:通过KEY引脚(或使能引脚)拉高进入AT命令模式,拉低或悬空为通信模式。这是其一大特点。

JDY-31模块:

  • 核心芯片:通常采用国产的杰理AC692X系列或其他TWS蓝牙芯片,成本控制出色。
  • 供电:典型3.3V。
  • 关键特性:支持蓝牙4.2或5.0(取决于版本),除了SPP,可能还支持BLE(但不同模式通常需不同固件)。功耗宣称较低。AT指令集可能与HC-05有差异,且不同批次、不同供应商的固件指令可能微调。
  • 工作模式:进入AT命令模式的方式多样,常见的有:① 在模块未连接时,直接通过串口发送特定字符(如+++)后,需在特定时间内收到a确认;② 通过拉低某个引脚(如PIO11)再上电;③ 直接上电即为AT模式。务必查阅你手中模块的具体数据手册!

简单对比表格:

特性HC-05JDY-31 (常见版本)对通信的影响
蓝牙版本2.0+EDR (经典蓝牙)4.2/5.0 (可能双模)经典蓝牙间通信无碍,若JDY-31只开BLE则无法与HC-05通信。
默认角色从模式 (Slave)从模式 (Slave)默认都是“等待者”,需手动更改其一为主机。
AT指令进入拉高KEY引脚后上电方法多样 (+++a、引脚控制等)配置方式不同,是第一个操作难点。
指令集相对标准、统一可能非标,不同厂商有差异最大的挑战!需找到双方都能理解的指令进行配置。
波特率默认通常9600, 可改默认可能为9600或115200通信前,MCU与各自模块的串口波特率必须一致。
配对码默认1234默认1234或0000需设置为相同密码才能配对。

注意:市场上模块变种很多,以上信息为常见情况。动手前,找到你购买模块对应的最新、最准确的数据手册或卖家提供的资料,是成功的一半。

3. 硬件连接与准备工作

理论清晰后,我们开始搭建硬件环境。这里假设我们使用两个常见的开发板(如Arduino Uno、STM32最小系统板)分别连接HC-05和JDY-31,并通过它们的串口与模块交互。

3.1 所需材料清单

  1. HC-05蓝牙模块 x1
  2. JDY-31蓝牙模块 x1
  3. 单片机开发板 x2 (如Arduino Uno, 用于配置和测试)
  4. USB转TTL串口调试器 x1 (可选,但强烈推荐,用于直接监控和配置模块)
  5. 杜邦线 若干
  6. 电脑 x1 (安装串口调试助手,如PuttySecureCRT或国产的XCOMATK-XCOM)

3.2 接线示意图与电源警告

接线逻辑(以3.3V系统为例):

  • VCC-> 接3.3V严禁接5V!虽有些模块耐5V,但风险高)
  • GND-> 接GND
  • TXD-> 接 MCU/串口调试器的RXD
  • RXD-> 接 MCU/串口调试器的TXD

具体到两个模块:

HC-05接线:

  • VCC-> 3.3V
  • GND-> GND
  • TXD-> MCU的RX(例如 Arduino的D0/RX)
  • RXD-> MCU的TX(例如 Arduino的D1/TX)
  • KEY-> 接一个GPIO(用于控制进入AT模式,如ArduinoD7)。不接此脚则无法进入AT指令模式。

JDY-31接线:

  • VCC-> 3.3V
  • GND-> GND
  • TXD-> MCU的RX
  • RXD-> MCU的TX
  • PIO11(或标识为AT的引脚) -> 根据手册,可能需要接GPIO控制或上拉/下拉。对于+++a方式,则不需要接此脚。

重要提示:很多新手烧毁模块的第一原因就是电源接错或电压过高。请务必使用万用表确认你的电源输出是稳定的3.3V。使用USB转TTL调试器时,也请确认其VCC引脚输出的是3.3V而非5V。

3.3 串口调试助手设置

在电脑上打开串口调试助手,连接USB转TTL工具。设置关键参数:

  • 波特率:先尝试模块的默认波特率(HC-05常用9600,JDY-31可能9600或115200)。如果AT指令无反应,最常见的排查点就是波特率不对。
  • 数据位:8
  • 停止位:1
  • 校验位:NONE
  • 流控制:NONE
  • 务必勾选“加回车换行”:绝大多数AT指令需要以\r\n(回车换行)作为结束符,勾选此选项能自动添加。

4. 核心步骤:分别配置HC-05与JDY-31

这是项目的核心实操部分。我们的目标是:将其中一个模块(例如HC-05)设置为主机(Master),并绑定另一个模块(例如JDY-31)的蓝牙地址;将JDY-31设置为从机(Slave),并设置好配对密码等参数。

4.1 配置HC-05为主设备(Master)

  1. 进入AT命令模式

    • 给HC-05模块上电,先将KEY引脚连接至高电平(3.3V)。对于Arduino,可以写一段代码将某个引脚(如D7)设置为HIGH后再给模块供电。
    • 更稳妥的方法是:先正常接线(KEY悬空),模块上电后,LED慢闪(约1秒1次,表示进入可配对状态)。此时,再将KEY引脚接高电平,模块LED会变为约2秒1次的慢闪,这表示已进入AT命令模式。此时波特率固定为38400(大多数HC-05的AT模式波特率,请以手册为准)。
  2. 发送AT指令进行配置: 打开串口调试助手,选择正确的COM口,设置波特率为38400,发送以下指令(每条指令后都会收到OK回应):

    AT+ORGL\r\n //恢复出厂设置,避免遗留配置干扰 AT+ROLE=1\r\n //设置为主设备模式 (1:Master, 0:Slave, 2:Slave-Loop) AT+CMODE=0\r\n //设置连接模式为指定地址连接 (0:指定地址,1:任意地址) AT+PSWD="1234"\r\n //设置配对密码为1234,需与从机一致 AT+UART=9600,0,0\r\n //设置通信波特率9600,停止位1,校验位无 (与MCU通信的波特率)

    关键一步:绑定从机地址。我们需要获取JDY-31的蓝牙MAC地址。

    • 先将JDY-31配置为从机并上电,使其处于广播状态(LED闪烁)。
    • 让HC-05(仍为主机模式)搜索它。在AT模式下,向HC-05发送:
      AT+INQ\r\n //开始搜索附近的蓝牙设备
    • 等待几秒,HC-05会返回一串类似+INQ:98D3:31:XXXXXX,7A0C,FFE0的信息。其中98D3:31:XXXXXX就是JDY-31的蓝牙地址(格式可能为XX:XX:XX:XX:XX:XX,需要把冒号去掉)。
    • 记下这个地址(例如98D331XXXXXX),然后发送绑定指令:
      AT+BIND=98D331XXXXXX\r\n //绑定指定地址的从设备

      注意:有些HC-05的BIND指令地址格式需要带冒号,如AT+BIND=98D3,31,XXXXXX,具体需测试或查手册。

  3. 退出并重启: 发送AT+RESET\r\n重启模块,或者直接断电。重启后,KEY引脚恢复低电平或悬空。此时HC-05会尝试自动连接绑定的JDY-31。成功连接后,HC-05的LED会由闪烁变为双闪(快速闪烁两次后停顿)

4.2 配置JDY-31为从设备(Slave)

JDY-31的配置因其固件版本差异较大,以下以常见的通过+++a进入AT模式的版本为例。

  1. 进入AT命令模式

    • 将JDY-31的TXD/RXD/GND连接到USB转TTL,VCC接3.3V。
    • 打开串口助手,波特率先尝试9600,再尝试115200。发送区输入+++,注意不要勾选“加回车换行”
    • 点击发送。如果模块返回字母a,则表示准备进入AT模式。此时,你必须在很短的时间(如1秒)内,再发送一个字母a回去(同样不加回车换行)。
    • 如果操作成功,模块会返回+OK,表示已进入AT命令模式。此时,后续所有AT指令都需要以\r\n结尾了。
  2. 发送AT指令进行配置: 进入AT模式后,发送以下指令(期待返回+OK):

    AT+DEFAULT\r\n //恢复出厂设置 (注意:有些指令是AT+DEFAULT,有些是AT+RESTORE,需确认) AT+ROLE=S\r\n //设置为从设备角色 (S:Slave, M:Master) AT+NAME=JDY31_SLAVE\r\n //设置模块名称,便于识别 AT+PIN=1234\r\n //设置配对密码为1234 (注意指令可能是AT+PASS或AT+PSWD) AT+BAUD=9600\r\n //设置通信波特率为9600 (指令可能是AT+UART) AT+IMME=0\r\n //设置上电立即广播,等待连接 (0:立即工作,1:等待指令)

    特别注意:JDY-31的AT指令集可能不同。例如,设置波特率可能是AT+BAUD8(其中8代表9600),设置密码可能是AT+PASS1234最可靠的方法是向你购买的商家索要最新的AT指令集PDF文档。

  3. 退出并重启: 发送AT+RESET\r\nAT+RST\r\n重启模块,或者直接断电重启。重启后,JDY-31的LED应开始闪烁,表示处于广播状态,等待主机连接。

4.3 连接测试与数据透传

  1. 将配置好的HC-05(Master)和JDY-31(Slave)分别上电。它们应该会自动完成配对和连接。连接成功的标志是:

    • HC-05的LED由搜索时的快闪变为双闪
    • JDY-31的LED由广播时的慢闪变为常亮有规律的双闪/慢闪(取决于模块设计)。
  2. 数据透传测试

    • 将HC-05的TXD/RXD连接到单片机A的串口1。
    • 将JDY-31的TXD/RXD连接到单片机B的串口1。
    • 分别给两个单片机上电,并编写简单的串口回环测试程序。
    • 在单片机A上,通过串口1发送字符串Hello JDY-31
    • 在单片机B上,如果通过串口1收到了Hello JDY-31,则表示通信成功!
    • 反之,从单片机B发送数据到单片机A,也应能成功接收。

5. 深度排查与常见问题解决实录

即使按照步骤操作,也难免会遇到问题。以下是我在实际项目中踩过的坑和总结的排查技巧。

5.1 连接建立失败的排查流程

如果模块上电后LED状态未显示连接成功,请按以下顺序排查:

  1. 电源与接线复查:万用表测量VCC-GND是否为稳定3.3V?TXD/RXD是否交叉连接?连接是否松动?
  2. 角色与模式确认:百分之九十的问题出在这里。请再次确认:
    • HC-05的ROLE是否为1(Master)?
    • HC-05的CMODE是否为0(指定地址)?
    • HC-05的BIND地址是否正确无误地填写了JDY-31的地址?
    • JDY-31的ROLE是否为S(Slave)?
    • 两个模块的配对密码PSWD/PIN是否完全一致(包括大小写)?
  3. 波特率统一性:这是另一个高频问题点。确保:
    • AT配置阶段:MCU/串口助手与模块通信的波特率正确(HC-05 AT模式常用38400,JDY-31 AT模式常用9600或115200)。
    • 透传通信阶段:两个模块的通信波特率AT+UARTAT+BAUD设置的)必须一致,且与连接它们的单片机串口波特率一致。例如,都设为9600。
  4. 绑定地址有效性:确保HC-05绑定的地址是当前JDY-31的实时地址。恢复出厂设置后,蓝牙地址可能会变。最稳妥的方法是:每次配置JDY-31后,都让HC-05重新INQ搜索一次并绑定新地址。
  5. 干扰与距离:初期测试时,请将两个模块靠近(<1米),排除障碍物干扰。蓝牙2.0/4.0在复杂环境下性能差异很大。

5.2 AT指令无响应的解决方案

  1. 检查进入模式是否正确
    • HC-05KEY引脚是否在上电前或上电后稳定拉高?LED是否变为约2秒1次的慢闪?
    • JDY-31:发送+++后是否收到a?是否快速回复了a?波特率是否尝试了9600和115200?
  2. 检查串口助手设置
    • 串口号选对了吗?
    • 发送新行(回车换行)选项是否勾选?对于AT模式下的指令,这是必须的(除了JDY-31进入时的+++a)。
    • 流控制(RTS/CTS)是否全部禁用?
  3. 尝试所有可能波特率:如果不知道AT模式波特率,用串口助手以不同波特率(如38400, 9600, 19200, 57600, 115200)连续发送AT\r\n,看哪个速率下有OK返回。

5.3 数据通信不稳定、丢包或乱码

  1. 波特率容错问题:单片机产生的波特率可能存在误差。如果双方波特率设置值相同但仍丢包,尝试将波特率适当调低(如从115200降到57600),或提高单片机系统主频和优化串口时钟配置。
  2. 电源噪声:蓝牙模块在发射数据时瞬时电流较大。确保电源线够粗,并在模块的VCC和GND之间并联一个10uF电解电容和一个0.1uF陶瓷电容,以滤除高频和低频噪声。
  3. 流控制未启用:当高速传输大量数据时,如果没有硬件流控制(RTS/CTS),缓冲区可能溢出导致丢包。如果模块和MCU都支持,可以启用硬件流控。但对于简单的短指令传输,通常不需要。
  4. 软件缓冲区处理:在单片机程序中,确保串口接收中断服务函数(ISR)执行时间尽可能短,只做数据搬移。在主循环中及时处理接收缓冲区,防止溢出。

5.4 独家心得与进阶技巧

  1. “指令手册至上”原则:永远不要完全相信网络教程。即使是HC-05,不同时期、不同厂家的固件版本,其AT指令集和细节也可能有微小差别。JDY-31更是“重灾区”。向卖家索要PDF版数据手册,并保存好。
  2. 使用逻辑分析仪或示波器:当通信完全没反应时,它们是终极武器。可以抓取TXD/RXD线上的实际波形,确认单片机是否发出了数据,数据格式(波特率、起始位、停止位)是否正确。我曾用此方法发现过一个单片机串口引脚配置错误的低级问题。
  3. 编写自动化配置脚本:如果产品需要批量生产,可以编写一段单片机初始化代码,上电后自动通过串口向蓝牙模块发送一系列AT指令进行配置。这样即使模块更换批次,也只需更新单片机程序,无需人工干预。
  4. 关于JDY-31的“双模”陷阱:有些JDY-31模块支持经典蓝牙(SPP)和低功耗蓝牙(BLE)。务必确认你使用的固件是SPP模式。BLE模式下的JDY-31与HC-05是无法通信的,因为协议栈不同。
  5. 连接稳定性优化:在HC-05的主机配置中,可以尝试AT+POLAR设置连接极性,或调整AT+INQM设置查询模式,但这属于高阶优化,一般情况下默认值即可。

让HC-05与JDY-31成功通信,就像为两个说不同方言的人找到了共同的普通话。这个过程磨练的是你对底层通信协议的理解、对硬件操作的细致程度,以及排查问题的系统性思维。一旦打通,你会发现无论是HC-05、JDY-31,还是其他类似的蓝牙透传模块,其核心逻辑都是相通的。掌握这种能力,意味着你在物联网设备的无线连接方案上,拥有了更灵活的选择权和更强的解决问题的能力。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询