HC-04蓝牙模块实战:从串口透传到无线数据传输全流程解析
2026/9/23 7:43:58 网站建设 项目流程

1. 为什么要选HC-04做第一次无线数据传输

1.1 HC-04到底是个什么东西

很多刚接触单片机的人第一次做无线通信,最容易想到的就是蓝牙模块。市面上HC系列模块有好几种,HC-04、HC-05、HC-06、HC-08,名字看着像,用起来差别不小。我做这次实验用的是HC-04蓝牙模块,它本质上是HC-05的国产兼容改进版,最大的特点是普遍带一个底板,板载CH340串口转USB芯片,到手用一根USB线插电脑就能用,不需要额外的USB转TTL工具,这对新手来说省事太多。

看一下模块实物资源会更清楚。带底板的HC-04上,有一个Micro USB口,一片CH340转换芯片,一个黑色按键(EN按键),几颗LED指示灯,还有一排排针引出VCC、GND、TXD、RXD、KEY等引脚。这样一块板子本身就是一套完整的USB转串口+蓝牙收发系统。核心的蓝牙芯片走的是经典蓝牙SPP(串口透传)协议,工作在2.4GHz频段,不是低功耗BLE,所以手机端连接时搜到的是“经典蓝牙”设备,需要配对后才能用。

HC-04支持的工作电压范围大约是3.6V到6V,常见的5V供电完全在安全范围内。如果不带底板,需要外部接USB转TTL,那就要注意逻辑电平匹配的问题。我的建议是,新手第一次做就直接买带底板的HC-04,把不确定性降到最低。

1.2 一次无线数据传输的完整链路是什么样的

要说清楚“无线数据传输”,得先把数据流向讲明白。假定场景是:电脑通过USB线连接HC-04模块A,手机用蓝牙连接模块A,两边互发文字。

电脑端串口助手发送“hello”这个字符串,数据流向是这样的:

电脑串口助手 → CH340芯片 → 模块A的UART RX引脚 → 蓝牙芯片打包 → 2.4GHz无线发送 → 手机蓝牙接收 → 手机蓝牙串口APP显示

手机端回发数据,方向正好反过来。整个过程里,蓝牙模块做的事情就是把UART串口数据原封不动地“搬到”无线链路上,在另一端再还原成串口数据。对于使用的人来说,两端看起来就像用一根虚拟的串口线连着,不用关心蓝牙协议怎么分帧、怎么校验,这就是透传模式的意义。

如果你用的是两块HC-04模块配对,数据流向就是“电脑→模块A→无线→模块B→单片机”或反过来,这在后面会专门演示。理解了这条链路,后面无论怎么接设备、怎么排查故障,思路都会很清晰。

1.3 这套方案能用在哪些实际场景

HC-04这类经典蓝牙串口透传模块,最适合的应用场景有这么几类。

第一类是替代USB线做单片机调试。以前调串口输出,总觉得拖根线碍事,用蓝牙模块把MCU的串口转成无线,坐在两米外看日志、发调试指令,体验完全不一样。

第二类是手机和单片机之间的互动控制。比如做一个蓝牙小车,手机APP发送“前进”“后退”字符,单片机解析后就控制电机;做一个蓝牙台灯,手机开关、调亮度。这种场景对传输速率要求不高,SPP透传足够稳。

第三类是双单片机之间的无线通信。比如一个主控板把采集到的传感器数据发给另一块板子处理,中间不想布线,两块HC-04配对后就能直接UART对UART通信。

需要说清楚的一点是,HC-04不是低功耗蓝牙设备,它不能像AirTag那样用纽扣电池撑一年。想省电、做低功耗物联网设备,应该选HC-08或CC2541。但如果是“快速做实验、验证功能、学透传原理”,HC-04这套方案目前还是最稳的选择。

2. 实验前的准备:硬件清单和关键接线细节

2.1 需要准备的材料清单

做这次实验,需要的东西不多,清单如下:

序号物料数量说明
1HC-04蓝牙模块(带底板)1块推荐带CH340底板版本
2Micro USB数据线1根必须是数据线,不能只供电
3安卓手机1部用于安装蓝牙串口APP
4蓝牙串口APP1个推荐Android平台的“蓝牙串口”“Serial Bluetooth Terminal”
5电脑1台Windows系统
6串口助手软件1款xcom、sscom、正点原子串口助手都可
7杜邦线若干做双模块透传或接单片机时需要
8CH340驱动1份电脑识别串口芯片需要

如果要做双模块通信,HC-04模块需要两块,USB线需要两根,其他不变。另外建议准备一块万用表,排查接线问题时用得上。

这里有个容易被忽略的点:USB线不能是那种只能充电的“电源线”。区分方法很简单,插到电脑上如果设备管理器没有反应,大概率是线的问题,换线再试。

2.2 接线怎么接,为什么这样接

带底板的HC-04,接线非常简单:USB线插上就行。但做双模块通信或者接单片机时,就得知道引脚怎么接。HC-04的引脚一般标注为VCC、GND、TXD、RXD、KEY,有的版本叫EN或者STATE。

底板的排针和CH340芯片之间是相连的,所以直接用USB线连电脑时,模块供电和串口转换都走底板,不需要额外接线。但如果把模块当无线串口接单片机,就需要这样接:

HC-04引脚接单片机引脚说明
VCC5V 或 3.3V模块工作电压范围3.6V~6V
GNDGND必须共地
TXDRX模块发送接单片机接收
RXDTX模块接收接单片机发送

TX和RX为什么要交叉接?这是新手最容易犯迷糊的地方。UART串口通信的原则是“一方的发送端必须接另一方的接收端”。模块的TXD是发送引脚,它输出的数据要送到单片机的RXD接收引脚,所以TXD接RXD,RXD接TX。如果TX接TX、RX接RX,数据就“对不上话”,收发双方都在发,谁也收不到。

另外模块和单片机必须共地。GND不接,电平就没有参考点,串口数据会乱码或者干脆没反应。这块我在刚开始接触时吃过亏,后来养成习惯:不管接什么串口设备,先把GND接通再说。

2.3 关于KEY引脚和跳线帽的坑

KEY引脚是HC-04进入AT指令模式的开关,这个后面专门讲。在带底板的模块上,通常找不到独立的KEY排针,因为底板上已经用跳线帽或者按键代替了。我手上这块是按键方案:上电时按住按键,模块就进入AT模式;不按则进入透传模式。有些版本则需要用杜邦线把某个引脚接到高电平,具体看模块背面的丝印说明,不同批次有所差异。

跳线帽的问题也值得说。带底板的模块上,有两个跳线帽分别短路了“TXD↔底板CH340 RX”和“RXD↔底板CH340 TX”。也就是说,USB线插电脑时,模块的串口是直通电脑的。如果你同时用杜邦线外接单片机,信号就会冲突。所以做双模块通信时,两块模块都直接用USB线连电脑,不要额外接单片机;要接单片机时,把模块从电脑上拔下来,避免“一个串口两个主人”的混乱局面。

3. 第一次上电:驱动安装、串口助手选择和AT指令模式

3.1 CH340驱动和串口助手环境搭建

把USB线插上电脑,如果系统没自动识别出COM口,那就是缺CH340驱动。CH340是南京沁恒的串口转换芯片,驱动可以去官网下载,也可以在硬件管理器里右键“更新驱动”自动搜索。装好之后,打开“设备管理器”,展开“端口(COM和LPT)”,能看到“USB-SERIAL CH340 (COMx)”,这个COMx就是你模块的端口号。端口号要记住,后面串口助手要用。

串口助手软件很多,我用的是xcom,原因是界面干净、收发显示分开、支持定时发送,而且不用注册、没广告。sscom和正点原子串口助手也很常用,功能都差不多,选哪个完全看个人习惯。需要注意的是,串口助手本质上就是一个电脑端的串口读写工具,它不负责无线部分,无线部分是蓝牙模块自己处理的。

连接设置时,串口参数按这个来:波特率选9600(如果不知道模块默认波特率,或者你手上模块的默认值可能不同,可以在AT模式里用AT+UART?查询,后续会细说),数据位8,停止位1,校验位None,流控None。这是绝大多数蓝牙串口模块的出厂约定。选错波特率,收发的就是乱码。

3.2 AT指令模式怎么进,指示灯状态要会看

蓝牙模块有两种工作状态:AT指令模式和透传模式。AT模式用来查询和修改模块参数,透传模式才是正常收发数据的状态。这两种模式靠KEY引脚区分,带按键底板的操作方法是:按住按键不松手,然后再插USB线上电,保持2秒左右再松手。此时观察指示灯,如果变成“慢闪”,大约2秒闪一次,就说明已经成功进入AT模式。

指示灯的含义非常重要,我整理了一个状态速查表:

指示灯状态意义
快闪(约1秒一次)透传模式,等待配对连接
慢闪(约2秒一次)AT指令模式
常亮或双闪已与对端设备建立蓝牙连接

不同批次的HC-04指示灯节奏可能会有一点差异,但基本逻辑都是“慢闪=AT模式、快闪=配对中、常亮/双闪=已连接”。如果插上电发现灯在快闪,说明模块在透传模式,此时发送AT是不会有反应的。

进入AT模式后,打开串口助手,选择正确的COM口,波特率先试9600,点击“打开串口”,然后发送一个“AT”(注意末尾加回车换行,有些串口助手要勾选“发送新行”)。如果串口助手返回“OK”,说明模块已经准备好接收指令了。如果没反应,先把波特率改成38400再试一次,再不行就检查驱动、COM口、KEY按键步骤有没有做对。

4. AT指令详解与配置实操

4.1 必会基础指令:名称、密码、波特率、主从模式

AT指令是蓝牙模块的“管理后台”。把模块参数写好,后面透传才稳定。下面列出的几个指令是最常用的,也是这次实验一定会用到的。

AT:测试指令。返回OK表示模块正常,AT指令可用。

AT+NAME=xxx:修改蓝牙模块名称。比如发送AT+NAME=TestDev,返回OK后,模块名称变成TestDev。这个名称是手机搜索蓝牙时显示的名字,建议改得有个性一点,避免多个模块混用时分不清。改名后需要重新上电或者重新搜索才能生效。

AT+PSWD=1234:修改配对密码。默认密码大多是1234,如果有安全需求就改掉。注意,修改密码后,手机连接时需要输入新密码。

AT+UART=9600,0,0:设置串口波特率。这三个参数分别是波特率、停止位(0=1位,1=2位)、校验位(0=None,1=Odd,2=Even)。这条指令极其关键,因为你改完波特率后,串口助手和另一端设备必须同步修改,否则全部乱码。

AT+ROLE=0:设置主从模式。0是从机(Slave),1是主机(Master)。两个模块互连时,必须设置一个为主、一个为从。

AT+RESET:软复位模块。改完参数后最好执行一次,让模块重启后生效。

应答格式方面,绝大多数HC-04模块回复“OK”表示成功,错误情况会回复“ERROR”或没有任何回应。这里提个容易踩的坑:如果模块返回的是乱码,通常是波特率没对上,回到AT模式查一下AT+UART?的输出就明白了。

4.2 双模块配对的核心配置步骤

如果需要两块HC-04模块互连,形成一条无线串口链路,正确配置主从关系是成功的关键。

把模块A设为主机,模块B设为从机。两个模块都进入AT模式后,分别执行以下配置。

模块A(主机):

AT → OK AT+ROLE=1 → 设置为主机 AT+PSWD=1234 → 设置配对密码 AT+NAME=MasterDev → 改个名字 AT+RESET → 复位

模块B(从机):

AT → OK AT+ROLE=0 → 设置为从机 AT+PSWD=1234 → 设置相同配对密码 AT+NAME=SlaveDev → 改个名字 AT+RESET → 复位

主机和从机的密码必须一致,这是建立配对的前提。两边都复位后,退出AT模式(重新上电,不按按键),模块A会自动搜索周围可配对的从机并尝试连接。此时观察两块模块的指示灯,如果都变成“常亮”或者“双闪”,说明配对成功,一条无线串口链路就建立了。

配对成功后,你可以在电脑上分别打开两个串口助手,分别对应两个模块的COM口,然后一边发送、另一边接收,观察数据是否互通。

4.3 配置实操实录:把模块改名为“蓝牙测试”

以我手头这块模块为例,实际操作一遍,给大家一个直观参考。

  1. 按住模块的EN按键,插上USB线,等待2秒后松手。
  2. 打开设备管理器确认COM口号,这里看到的是COM5。
  3. 打开xcom串口助手,选择COM5,波特率9600,打开串口。
  4. 发送区输入“AT”,勾选“发送新行”(会自动附加回车换行),点击发送。
  5. 接收区显示“OK”,确认模块在AT模式且通信正常。
  6. 发送“AT+NAME=蓝牙测试”,返回“OK”。
  7. 发送“AT+ROLE=0”,设置模块为从机,返回“OK”。
  8. 发送“AT+UART=9600,0,0”,确认波特率9600,返回“OK”。
  9. 发送“AT+RESET”,模块自动重启。

重启后指示灯变成快闪,说明模块已经在透传模式。这时候打开手机蓝牙,搜到“蓝牙测试”这个设备,配对密码输入1234,连接成功后指示灯变为常亮。整个过程到这里,模块已经准备好进行真正的数据传输了。

5. 真正的无线数据传输:从AT模式到透传模式

5.1 电脑和手机之间的双向透传

模块配置完成后,剩下的事情就非常直观了。这时模块已经退出AT模式,处于透传模式。手机连接上模块,指示常常亮。电脑上的串口助手继续保持打开状态,连接的COM口不变,波特率9600。

手机端需要打开一个蓝牙串口APP。我用的“蓝牙串口”APP,界面非常简单:上方是连接区,选择已配对的设备;下方是收发区,一个输入框加一个发送按钮。打开APP,连接“蓝牙测试”,然后就可以开始互发信息了。

电脑串口助手发送区输入“Hello Bluetooth”,点击发送。手机APP的接收区会显示这条字符串。反过来,手机APP发送“收到,请回答”,电脑串口助手的接收区就能看到对应的内容。

这一刻就是“第一次无线数据传输”成功完成的时刻。不要小看这个过程,前面所有配置、接线、AT指令,全部是为了让这一组数据能干干净净地从有线串口跑到无线链路再跑回串口端。数据如果中文正常、英文正常、没有乱码,说明链路完全打通,波特率、密码、主从配置全部正确。

这里特别提醒一个点:手机连接蓝牙模块后,串口助手里发送的数据是直接广播给蓝牙链路的,没有确认机制。如果发送过快、数据量过大,可能出现丢包。SPP协议本身有流控和重传,但串口侧如果只管往模块UART里灌数据,模块来不及处理就会丢。做实际项目时要加延时或者做应答握手。

5.2 双模块透传:两块HC-04直接组网

手机连模块的方式虽然方便,但真正做嵌入式系统的时候,更多是“单片机A —— 无线 —— 单片机B”这种双模块方案。用之前配置好的“MasterDev”和“SlaveDev”两块模块,可以实现完整的无线UART链路。

接线方式参考第二小节。模块A(主机)的TXD接单片机B的RXD,RXD接单片机B的TX;模块B(从机)同理接到单片机A上。两块单片机程序的写法跟有线串口完全一样,唯一的区别是数据经过了一段无线链路,速率和可靠性需要自己把控。

我实际测过,9600波特率下双向收发稳定,延迟大概几十毫秒,对传感器数据上报、遥控指令这类场景完全够用。如果跑高速数据流,比如音频或者大文件,SPP就不适合了,那个要上BLE或者WiFi模块。

双模块调试时最容易出的问题是“两个串口同时连电脑导致的端口冲突”。正确的做法是:先把模块A插电脑,打开串口助手确认连通;再插模块B,打开第二个串口助手实例。Windows下同一个COM口只能被一个程序占用,如果打不开串口或者没有数据,看看是不是串口助手重复占用了。

5.3 传输速率和可靠性的实际感受

实测下来,HC-04在9600波特率下,单向传输稳定,几乎没有丢包。如果把波特率提到115200,短距离传输仍然能跑,但偶发乱码和丢包的概率会上升。这类经典蓝牙模块标称速率不超过2Mbps,但实际UART侧会被波特率卡住,串口速度才是真正的瓶颈。

我一般控制在9600到38400之间,这样最稳。如果你要传大量数据,建议应用层做分包和校验。传中文时尤其注意,串口助手和蓝牙模块都是按字节透传,中文字符的编码格式要一致,电脑端发送UTF-8或GBK编码,手机端必须用相同的编码解码,否则中文会显示成乱码。

6. 常见问题和排查技巧实录

6.1 快速定位问题:照着表格排查

实际操作中遇到的问题,八成集中在几个点上。我整理了一张问题速查表,可以直接按图索骥。

现象可能原因解决方案
发送AT无回应没进入AT模式重新按住按键上电,确认慢闪
发送AT无回应波特率不对依次尝试9600和38400
手机搜索不到模块模块还在AT模式重新上电进入透传模式
手机搜索不到模块被其他设备占用连接关闭已连接设备蓝牙,重启模块
连接时提示密码错误密码不是1234用AT+PSWD?查询或恢复默认
接收数据显示乱码两端波特率不一致统一波特率,可跑AT+UART?确认
连接成功后很快断开供电不足换电脑USB口或插有源Hub重试
串口助手无法打开COM口COM口被占用关闭其他串口助手实例
双模块一直配对不上主从模式设置错误用AT+ROLE?查询确认主从
数据发送后对方毫无反应TX/RX接反或GND未共地检查杜邦线接线

遇到问题时,排查顺序建议是:先看指示灯状态,确认模块工作在哪个模式;再看串口参数,确认波特率、数据位、停止位;最后查接线,确认TX/RX交叉、GND共地。按照这个顺序,大部分问题都能快速定位。

6.2 我踩过的几个坑

第一个坑是TX/RX接反。当时接单片机的时候,想当然地TX接TX、RX接RX,结果串口死活没有数据。后来用万用表量引脚电压才发现,模块的TXD引脚在空闲时是3.3V高电平,接到单片机的TXD会互相“顶牛”,信号直接废掉。从那以后我接串口线都会默念“发送对接收,接收对发送”,再也没有犯过。

第二个坑是供电不足。HC-04模块虽然工作电压宽,但从电脑USB口供电时,如果同时给其他外设供电,USB口的电压会下降,模块表现为“连接成功后随机断开”或者“收发不稳定”。解决办法是单独用一个有源USB Hub给模块供电,或者在模块电源引脚并一个100uF电解电容稳定电压。

第三个坑是模块进不了AT模式。有几次按住按键上电,指示灯就在快闪,说明按键没按住或者上电过程有问题。后来总结了一个可靠的方法:先把USB线插入电脑,确认模块通电;再把USB线从电脑端拔出来一点但要维持接触,按下按键瞬间重新插紧。这样按键信号可以做到和上电严格同步,进入AT模式的成功率几乎100%。

第四个坑是跳线帽引起的“幽灵数据”。带底板模块的跳线帽把模块串口直通到CH340,如果把模块同时接USB和单片机,两组信号会打架,表现为数据乱码、单片机程序崩溃。记住一条原则:带底板模块要么插USB、要么接单片机,不要同时接。

6.3 AT指令的进阶使用心得

除了基础指令,HC-04还支持一些进阶指令,遇到问题时能派上大用场。

AT+VERSION?查询固件版本。不同批次的模块固件可能有差异,指令细节也会有不同。我买到的两块模块,一块回复“hc05V2.1”,另一块回复“hc04V1.0”,说明固件版本确实不一样。如果某个指令不生效,先查一下固件版本,再到网上搜对应的指令集。

AT+UART?查询当前波特率。修改波特率之前最好先查一下当前值,避免出现“以为自己改成功了,实际改的是另一套参数”的乌龙。

AT+ROLE?查询当前主从模式。双模块配对失败时,最先就应该用这条指令确认两边角色,而不是反复重启碰运气。

AT+PSWD?查询配对密码。如果手机一直连不上模块,先用这条指令确认密码是不是被改成了自定义值。

这些查询指令有一个共同的好处:它们不会修改参数,只做读取,所以可以放心在透传模式下随时查询。配对失败、乱码、连不上,先查询再动手改,这是成熟的排查思路。

最后说两句自己的体会

第一次跑通HC-04无线数据传输的时候,我盯着串口助手看手机发来的那行字看了好一会儿,确实有点兴奋。回头想想,这件事能成,不是因为用了多高深的技术,而是把“接线、AT配置、串口参数、主从关系”这几个基础环节一步一步做到位了。HC-04这类模块最大的价值,就是让人用最低的成本和最直观的方式理解无线透传到底是怎么一回事。如果你手里刚好有模块,按文章里的顺序走一遍,第一次就成功不是难事。之后再往蓝牙小车、无线传感器这些方向扩展,思路自然就顺了。

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

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

立即咨询