不知道你有没有遇到过这种场景:开发板已经跑起来了,串口打印一屏一屏地刷,结果你却发现USB线不够长,或者电脑离设备隔着半堵墙。我以前总觉得蓝牙串口是“玩具级”方案,直到一次项目里要把一块采集板放到窗边,工位却在对面,拖线拖不过门,才认真把JDY-33拿来试。试完之后只有一个感受:这个模组解决的不只是“免插线”,而是把PC、手机和开发板之间的通讯方式彻底简化了。
JDY-33是一颗国产低功耗蓝牙BLE透传模组,支持AT指令配置,核心玩法就是“蓝牙转串口”:开发板那边把数据从串口丢给它,电脑或手机通过蓝牙收下来,反过来也一样。也就是说,你原来怎么写串口程序,现在还怎么写,只是把USB线换成了空气。这篇文章我就按实际折腾过的路线,把硬件接线、AT指令配置、主机从机配对、PC端接收数据这些步骤全部拆开讲,最后附一张整理过的AT指令速查表,给打算入手的兄弟姐妹们做一个完整的参考。
1. 为什么选JDY-33而不是HC-05:从一次“串口自由”的需求说起
别急着接线,先花两分钟搞清楚选型逻辑。市面上的蓝牙串口模组看起来都差不多,但拉开差距的几个关键点,直接影响你后面的开发体验。
1.1 经典蓝牙还是BLE,这个区别不是版本号那么简单
很多教程推荐HC-05,我也用过,HC-05是蓝牙2.0时代的经典SPP串口模组,好处是PC、笔记本上的老蓝牙适配器基本都能直接创建一个COM口,连上就能用。但它有两个我受不了的问题:一是功耗高,HC-05工作电流能到几十毫安,电池供电的项目根本扛不住;二是配对逻辑有点“老派”,主从配对的AT指令细节不少,新手上手容易卡壳。
JDY-33是BLE低功耗蓝牙,协议栈是4.2/5.0这一代,官方标注的待机电流能做到微安级别,通信时的峰值电流也比HC-05低得多。更重要的是,它不需要在一个程序里处理复杂的主从配对逻辑,直接靠AT指令切角色,简单直接。当然,BLE有BLE的代价——电脑侧如果蓝牙适配器太老,不支持BLE 4.0以上,那识别不到它。这点后面专门讲。
1.2 JDY-33和JDY-31、JDY-23、JDY-08到底有啥关系
JDY-33不是市面上唯一的BLE透传模组,同系列的JDY-31、JDY-23、JDY-08也经常被拿来做同类项目。它们的共同点是:都支持串口透传,都能用AT指令配置,甚至指令集都接近。区别主要在封装、天线形式和功耗控制上。
- JDY-33:板载PCB天线,接口相对好焊接,适合直插面包板和接线端子,我最常用的是带排针的模块。
- JDY-31:更早的型号,编程方式类似,但体积和功耗控制不如33。
- JDY-23:体积更小,适合贴片集成,但DIY玩家手工焊接难度高。
- JDY-08:同样是BLE透传,常用于语音和数据透传结合的场景。
如果你只是做PC和开发板之间的数据透传,JDY-33是我试过的最稳、最容易买到、资料也最全的选择。更重要的是它的AT指令集覆盖了广播控制、主从切换、连接指定MAC、iBeacon这些日常用得上的配置项,灵活性很高。
1.3 选模组时最容易忽略的“底线参数”
很多人看到“蓝牙模组”就下单,拿到手才发现自己的开发板是5V逻辑,而模组是3.3V,一接串口就烧。挑选的时候一定要确认三件事:
| 参数 | JDY-33典型值 | 注意项 |
|---|---|---|
| 工作电压 | 2.0V-3.6V | 不能直接接5V电源,需要稳压或串LDO |
| 串口电平 | 3.3V TTL | 接5V单片机需要电平转换,不能直接连TX/RX |
| 蓝牙版本 | BLE 4.2/5.0 | 电脑蓝牙适配器至少支持BLE 4.0 |
| 通信电流 | 约几毫安到十几毫安 | 待机低功耗表现很优秀 |
| 默认波特率 | 9600 | 很多二手/存货模组可能被改过,到手先恢复出厂 |
我自用的经验是:不管买哪个牌子,到手第一件事不是接线,而是查规格书确认电压范围。曾经就有人把3.3V的模组接到5V电源上,侥幸亮灯,烧芯片是迟早的事。
2. 拿到模组后的第一件事:引脚、接线和电平匹配
JDY-33的引脚并不多,但接线错误是新手翻车率最高的环节。这里把每个引脚的用途和最小系统接线一次性说透。
2.1 引脚定义与最小系统接线
JDY-33的常见引脚有VCC、GND、TXD、RXD,一部分模组还会引出EN/KEY、STATE、PWM等控制脚。透传场景下其实只需要四根线:
- VCC:接3.3V正极,注意绝对不能直接接5V。
- GND:和开发板共地。
- TXD:模组的发送端,接开发板的RXD。
- RXD:模组的接收端,接开发板的TXD。
如果你用USB转TTL模块来做电脑直连测试,记得USB转TTL模块一般输出5V/3.3V可切换,调到3.3V那一档。很多USB转TTL的TX/RX在5V电平下工作,而JDY-33的RXD并不能承受5V逻辑电平,这种组合很容易出问题。哪怕当时没烧,长期用也会影响稳定性。
这里给一个我把开发板、USB转TTL和JDY-33接在一起的例子:
| 设备A | 接口 | 设备B | 接口 |
|---|---|---|---|
| STM32开发板 | 3.3V/GND | JDY-33 | VCC/GND |
| STM32开发板 | TXD | JDY-33 | RXD |
| STM32开发板 | RXD | JDY-33 | TXD |
| USB转TTL | 3.3V/GND | JDY-33 | VCC/GND(与上并列) |
| USB转TTL | RXD | JDY-33 | TXD(仅调试时接) |
调试完成之后,USB转TTL就可以拔掉,不必和开发板同时挂在模组上。如果两个串口设备同时往JDY-33的RXD上发数据,是会出现竞争冲突的。
2.2 为什么“共地”这件事这么重要
蓝牙模组的信号传输本质上是串口电平,而电平是相对GND来定义的。模组和开发板不共地,TXD踩高电平时,接收端可能读到随机电平,就会出现“乱码”或者“数据时有时无”的奇葩问题。尤其是开发板用电池供电、PC用适配器供电的时候,两边的GND电位可能差出好几伏,不接共地线直接就把数据毁了。
有意思的是,很多人在排查时先怀疑代码、再怀疑波特率,最后才想到是共地问题。我在调试无线的项目时,第一件事就是用万用表量一下两块板子GND之间的压差,压差接近0才算正常。
2.3 电平转换:5V单片机接3.3V模组的三种办法
如果你用的是经典51、Arduino UNO这类5V单片机,电平匹配就是绕不开的问题。我试过三种方案,按推荐程度排:
- 串电阻分压:在单片机TXD到模组RXD之间串一个1kΩ电阻,配合模组内部的保护二极管,很多场景够用,但只适合低速串口,速率高了波形边沿会变差。
- 二极管电平转换:用一个4148二极管加10kΩ上拉电阻,把5V逻辑拉低到3.3V,便宜但信号质量一般。
- 专用电平转换模块:TXS0108E或者软件模拟I2C的方式最稳,特别是波特率高于9600时,建议直接用模块,省得在波形的边沿问题上折腾。
从实际效果看,如果是STM32、ESP32、树莓派这类本身就有3.3V UART的开发板,直接对接就行,根本不涉及电平转换。这也是我推荐用JDY-33的第一理由——它专为现代3.3V MCU设计。
3. 进入AT配置模式:指令集逐条拆解
JDY-33的使用分两个阶段:先用AT指令配置参数,然后再进入透传模式。这个模组没有独立的状态切换引脚那么复杂,但指令的格式、回车换行、波特率限制都是新手最容易卡住的地方。
3.1 进入AT模式:一条最简单的指令先建立信心
给JDY-33通电之后,用USB转TTL把它和电脑相连,打开串口助手,把波特率设为9600(出厂默认),然后发送:
AT如果模组正常,会返回:
OK只要能收到OK,说明模组、串口线、波特率都是通的。如果发AT没反应,先排查三件事:TX和RX是不是交叉接反了;串口助手的发送格式是不是带了错误换行;波特率是不是被上一手的人改过。JDY-33一旦被改过波特率,AT指令也会失效,所以到手第一件事我建议发送恢复出厂指令(不同批次指令可能不同,有的用AT+DEFAULT,有的没有),或者在模块说明书中确认恢复方法。
这里要注意,JDY-33的AT指令一般都需要以回车换行(\r\n)结尾。很多串口助手下方的“发送新行”勾选框就是干这个的。忘记勾选,指令永远得不到回复,这是新手最常见的坑。
3.2 基础配置指令:名称、波特率、配对密码
配置广播名:
AT+NAME=MyDevice返回OK后,蓝牙广播名就变成了MyDevice,不用重启,手机或PC刷新一下即可看到。有些模组指令格式是AT+NAMEMyDevice不带等号,虽然我手头的JDY-33支持等号格式,但如果你买的是精简版,拿到手最好先发一下AT+HELP看看支持列表。
设置波特率:
AT+BAUD=4JDY-33中波特率对应表通常为:0对应1200,1对应2400,2对应4800,3对应9600,4对应19200,5对应38400,6对应57600,7对应115200,8对应230400。改完之后记得把串口助手也切到相同波特率,再发AT验证。
设置配对密码(部分固件支持):
AT+PIN=123456BLE连接更多依靠配对绑定,JDY-33的PIN指令主要影响的是绑定过程,如果不需要加密可以忽略。
3.3 主从模式与连接控制指令
JDY-33可以工作在从机模式,也可以工作在主机模式。透传场景下,如果只是让手机连它,保持默认的从机模式(广播模式)就行。但如果是开发板主动连接PC端的BLE设备,或者两块JDY-33做数据桥接,就要把其中一块设成主机。
切换从机/主机:
AT+ROLE=0 // 0为从机,1为主机查询/连接指定从机:
AT+SCAN // 扫描周围BLE设备 AT+CONN // 连接扫描到目标(具体格式看固件)说实话,JDY-33的扫描连接指令在不同批次上格式有点不一样,有的用AT+CONN=<MAC>,有的是先扫描再连接。这里我不敢给你写一个绝对通用的“连接某个MAC”指令,因为这是踩坑重灾区。我建议在买模组时直接向卖家要最新版AT指令手册,以手册为准。
3.4 JDY-33 AT指令速查总表
基于我实际使用和对照多份规格书的经验,整理出下面这张常用指令表。需要说明的是,不同批次固件的指令可能有增删,使用前最好先用AT+HELP或规格书确认:
| 指令 | 功能说明 | 示例/参数 |
|---|---|---|
| AT | 测试通信 | 返回OK |
| AT+NAME | 设置广播名称 | AT+NAME=JDY33 |
| AT+BAUD | 设置波特率 | AT+BAUD=7,0-8对应1200-230400 |
| AT+PIN | 设置配对码 | AT+PIN=123456 |
| AT+ROLE | 设置主机/从机 | AT+ROLE=0从机,1主机 |
| AT+MAC | 查询本机MAC | AT+MAC |
| AT+ADDR | 查询/设置目标地址 | AT+ADDR=目标MAC |
| AT+TYPE | 设置广播类型 | AT+TYPE=0可连接广播 |
| AT+CLSS | 设置设备类别 | AT+CLSS=0 |
| AT+START | 开启广播 | AT+START |
| AT+DISC | 断开当前连接 | AT+DISC |
| AT+RST | 软复位模组 | AT+RST |
| AT+SLEEP | 进入休眠 | AT+SLEEP |
| AT+WAKE | 唤醒模组 | AT+WAKE |
| AT+IBEACON | 切换iBeacon模式 | AT+IBEACON0/1 |
| AT+HELP | 查看指令帮助 | AT+HELP |
| AT+DEFAULT | 恢复出厂设置(部分固件支持) | AT+DEFAULT |
这张表是我自己的实操清单,覆盖了90%的日常场景。特别提一句,AT+RST在改完配置后很关键。有些配置需要重启才能生效,不重启就继续透传,可能出现“指令已经改了但功能没变”的错觉。
4. 让PC和开发板“通话”:三种实操路径
配置好AT指令之后,下面才是真正的核心:如何把JDY-33和PC连接起来,并在PC上看到开发板发过来的数据。这里有三条路线,根据不同硬件环境选一条就好。
4.1 路径一:USB转TTL直接连JDY-33,最快验证模块
这个方式不涉及PC蓝牙,只是用USB转TTL把模组的串口和电脑串口助手连起来。最适合用来验证模组好坏、测试AT指令、跑通一次透传流程。
操作步骤:
- 把USB转TTL的3.3V、GND、TXD、RXD分别接JDY-33的VCC、GND、RXD、TXD。
- 插入电脑,安装驱动后查看设备管理器确认COM口号。
- 打开串口助手(SSCOM或XCOM都行),波特率调到9600。
- 发送AT,确认模组在线。
- 这时候打开手机蓝牙调试助手,搜索并连接JDY-33。
- 在手机上发一条数据,电脑串口助手应该能收到;在电脑上发一条数据,手机端也能收到。
这个路径让我能快速判断“是模组坏了还是配置错了”。如果电脑串口助手收发正常,而手机连不上,问题在BLE广播或密码;如果手机连上了但收不到数据,问题往往在串口波特率或TXRX接反。
4.2 路径二:电脑蓝牙适配器 + BLE虚拟串口,真正无线
这是最接近“无线串口”体验的方案,但也是坑最多的地方。JDY-33是BLE设备,它不像HC-05那样在Windows上直接生成COM口。Windows的蓝牙栈对BLE支持比较“半残”,默认只支持低功耗蓝牙设备,但不自动提供串口服务。想用串口助手读写BLE透传服务,需要借助第三方软件把BLE的UART服务映射成虚拟串口。
我实测可用的方法是:
- 确认电脑蓝牙适配器支持BLE 4.0以上,Windows 10/11自带驱动一般可以。
- 安装一个支持BLE UART的串口桥接工具,把JDY-33的串口服务映射为COM口。
- 连接成功后,串口助手里会多出一个COM口,直接按普通串口收发即可。
这种方案适合每天都要跟开发板调试的开发场景,省掉USB线之后,确实方便很多。唯一的门槛是映射软件的选择,市面上的软件质量参差不齐,有些还收费。如果你不想折腾虚拟串口,也可以直接用支持BLE的调试软件,界面里直接调出UART透传页签。
4.3 路径三:开发板当主机,主动连PC端BLE设备
大多数PC调试场景是手机连开发板,但如果你想让开发板主动发起连接——比如设备端主动连接旁边一个BLE信标或者另一个蓝牙设备——就需要把JDY-33设置成主机模式。
操作流程:
- 发送
AT+ROLE=1把模组切到主机模式。 - 发送
AT+RST重启。 - 用AT指令扫描周围BLE设备。
- 找到目标设备的MAC,执行连接指令。
PC端如果要扮演被连接的BLE外设,需要用专门的软件模拟出BLE服务,或者用另一个BLE适配器做桥接。这个方法调试起来比较复杂,我自己只有在做“两块JDY-33无线透传”时才用,普通PC开发场景不太推荐优先试它。
4.4 双向透传测试:如何判断数据传输是干净的
不管走哪条路径,最后都要做一个双向透传测试,确认数据没有丢、没有乱。
测试方法:在PC端串口助手设置一个周期发送任务,每隔1秒发一串带递增序号的数据,比如>#include "main.h" #include "usart.h" #include "adc.h" uint8_t buffer[64]; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_USART1_UART_Init(); MX_ADC1_Init(); while (1) { HAL_ADC_Start(&hadc1); if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) { uint16_t value = HAL_ADC_GetValue(&hadc1); int len = sprintf((char *)buffer, "adc:%d\r\n", value); HAL_UART_Transmit(&huart1, buffer, len, 100); } HAL_ADC_Stop(&hadc1); HAL_Delay(500); } }
关键点只有一个:HAL_UART_Transmit发送的就是普通串口数据,JDY-33会原样把它广播出去。这就是“透传”的含义,开发板这边的串口程序完全不用知道蓝牙的存在。
5.3 PC端接收显示:串口助手里连续滚动数据
PC端的操作是在串口助手里选择映射好的COM口,波特率调成9600,然后就能看到数据不断滚动:
adc:2048 adc:2051 adc:2047 adc:2043如果数据能从传感器一路跑到电脑屏幕上,这个链路就算彻底打通了。这套方案我后来还用到了树莓派上,树莓派的UART接JDY-33,PC蓝牙接收,效果一样稳定,只是树莓派的miniUART默认时钟不稳,需要先把蓝牙串口的映射配置好。
6. 玩JDY-33三个月后我踩过的坑
最后分享几个实战中遇到的问题,都是说明书里一般不写、但概率很高的坑。
6.1 配对成功后一传输就断,多半是“PM”模块在作怪
JDY-33的低功耗特性有时候会坑人。它默认可能存在省电策略,在长时间不传数据时进入休眠,等下一包数据来了再唤醒。如果PC端发送数据间隔太长,或者开发板采集间隔不规律,就会觉得“链路断了”。我的解决办法是把发送间隔调整到1秒以内,或者想办法关闭低功耗功能(具体看规格书,不同批次指令不同)。
6.2 波特率不一致导致AT指令无效
一顿操作把波特率改成了115200,结果忘了把串口助手切过去,回头发AT返回空,很多人第一反应是“模组坏了”。实际上模组好好的,就是说话频率没对上。这个坑几乎每个人都会踩一次。建议在板子上贴标签标明当前波特率,尤其是同时用多块模组的时候,不然很容易混乱。
6.3 假JDY-33怎么识别
JDY-33因为性价比高,市面上出现了一些兼容模组或翻新模组,指令集、引脚定义都有出入。我买过一批“号称”JDY-33的模组,引脚比原版多了一排,AT指令也精简了不少。遇到这种情况,不要硬套本文的指令,先看模块上的丝印,再用AT+HELP导出指令集,按实际固件操作。
6.4 距离问题别怪天线
JDY-33用的是板载PCB天线,官方标称空旷距离二三十米,实际隔一堵墙可能就剩几米。很多人为了提高距离去外接天线,实际上JDY-33根本没有外接天线接口,硬改只会破坏匹配。想增加距离,更靠谱的方法是提高两端蓝牙适配器的接收灵敏度,或者加一个BLE网关做中继,而不是折腾天线。
6.5 一个容易被忽略的小技巧:透传成功后立刻保存配置
JDY-33的大部分配置在断电后会保存,但我遇到过某些批次固件在异常断电后丢配置的情况。改完参数后,如果模组支持AT+RST,先软复位一次,再断电,能减少配置丢失的概率。这算是经验之谈,毕竟重新调一套波特率和广播名虽然不难,但浪费时间。
说回整体感受,JDY-33其实是一个非常典型的“底层透了,上层就简单”的模组。PC和开发板之间本来要解决的无非是数据通道问题,而它直接把通道拉透明了。你只要把精力放在串口数据本身,蓝牙这层基本上不需要投入太多成本。按照文章里的顺序:先接线、再AT配置、再透传测试、最后落入项目,几乎不会卡住太久。我每次给朋友演示这套方案,最开心的时刻都不是“蓝牙连上了”,而是串口助手里滚动出开发板数据的那一瞬间——那种感觉就像是把一根看不见的线,稳稳地握在了手里。