ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

HC-04蓝牙模块实战:从串口透传到无线数据传输全流程解析

HC-04蓝牙模块实战:从串口透传到无线数据传输全流程解析 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部用于安装蓝牙串口APP4蓝牙串口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~6VGNDGND必须共地TXDRX模块发送接单片机接收RXDTX模块接收接单片机发送TX和RX为什么要交叉接这是新手最容易犯迷糊的地方。UART串口通信的原则是“一方的发送端必须接另一方的接收端”。模块的TXD是发送引脚它输出的数据要送到单片机的RXD接收引脚所以TXD接RXDRXD接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模式里用ATUART?查询后续会细说数据位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指令可用。ATNAMExxx修改蓝牙模块名称。比如发送ATNAMETestDev返回OK后模块名称变成TestDev。这个名称是手机搜索蓝牙时显示的名字建议改得有个性一点避免多个模块混用时分不清。改名后需要重新上电或者重新搜索才能生效。ATPSWD1234修改配对密码。默认密码大多是1234如果有安全需求就改掉。注意修改密码后手机连接时需要输入新密码。ATUART9600,0,0设置串口波特率。这三个参数分别是波特率、停止位01位12位、校验位0None1Odd2Even。这条指令极其关键因为你改完波特率后串口助手和另一端设备必须同步修改否则全部乱码。ATROLE0设置主从模式。0是从机Slave1是主机Master。两个模块互连时必须设置一个为主、一个为从。ATRESET软复位模块。改完参数后最好执行一次让模块重启后生效。应答格式方面绝大多数HC-04模块回复“OK”表示成功错误情况会回复“ERROR”或没有任何回应。这里提个容易踩的坑如果模块返回的是乱码通常是波特率没对上回到AT模式查一下ATUART?的输出就明白了。4.2 双模块配对的核心配置步骤如果需要两块HC-04模块互连形成一条无线串口链路正确配置主从关系是成功的关键。把模块A设为主机模块B设为从机。两个模块都进入AT模式后分别执行以下配置。模块A主机AT → OK ATROLE1 → 设置为主机 ATPSWD1234 → 设置配对密码 ATNAMEMasterDev → 改个名字 ATRESET → 复位模块B从机AT → OK ATROLE0 → 设置为从机 ATPSWD1234 → 设置相同配对密码 ATNAMESlaveDev → 改个名字 ATRESET → 复位主机和从机的密码必须一致这是建立配对的前提。两边都复位后退出AT模式重新上电不按按键模块A会自动搜索周围可配对的从机并尝试连接。此时观察两块模块的指示灯如果都变成“常亮”或者“双闪”说明配对成功一条无线串口链路就建立了。配对成功后你可以在电脑上分别打开两个串口助手分别对应两个模块的COM口然后一边发送、另一边接收观察数据是否互通。4.3 配置实操实录把模块改名为“蓝牙测试”以我手头这块模块为例实际操作一遍给大家一个直观参考。按住模块的EN按键插上USB线等待2秒后松手。打开设备管理器确认COM口号这里看到的是COM5。打开xcom串口助手选择COM5波特率9600打开串口。发送区输入“AT”勾选“发送新行”会自动附加回车换行点击发送。接收区显示“OK”确认模块在AT模式且通信正常。发送“ATNAME蓝牙测试”返回“OK”。发送“ATROLE0”设置模块为从机返回“OK”。发送“ATUART9600,0,0”确认波特率9600返回“OK”。发送“ATRESET”模块自动重启。重启后指示灯变成快闪说明模块已经在透传模式。这时候打开手机蓝牙搜到“蓝牙测试”这个设备配对密码输入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的RXDRXD接单片机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用ATPSWD?查询或恢复默认接收数据显示乱码两端波特率不一致统一波特率可跑ATUART?确认连接成功后很快断开供电不足换电脑USB口或插有源Hub重试串口助手无法打开COM口COM口被占用关闭其他串口助手实例双模块一直配对不上主从模式设置错误用ATROLE?查询确认主从数据发送后对方毫无反应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还支持一些进阶指令遇到问题时能派上大用场。ATVERSION?查询固件版本。不同批次的模块固件可能有差异指令细节也会有不同。我买到的两块模块一块回复“hc05V2.1”另一块回复“hc04V1.0”说明固件版本确实不一样。如果某个指令不生效先查一下固件版本再到网上搜对应的指令集。ATUART?查询当前波特率。修改波特率之前最好先查一下当前值避免出现“以为自己改成功了实际改的是另一套参数”的乌龙。ATROLE?查询当前主从模式。双模块配对失败时最先就应该用这条指令确认两边角色而不是反复重启碰运气。ATPSWD?查询配对密码。如果手机一直连不上模块先用这条指令确认密码是不是被改成了自定义值。这些查询指令有一个共同的好处它们不会修改参数只做读取所以可以放心在透传模式下随时查询。配对失败、乱码、连不上先查询再动手改这是成熟的排查思路。最后说两句自己的体会第一次跑通HC-04无线数据传输的时候我盯着串口助手看手机发来的那行字看了好一会儿确实有点兴奋。回头想想这件事能成不是因为用了多高深的技术而是把“接线、AT配置、串口参数、主从关系”这几个基础环节一步一步做到位了。HC-04这类模块最大的价值就是让人用最低的成本和最直观的方式理解无线透传到底是怎么一回事。如果你手里刚好有模块按文章里的顺序走一遍第一次就成功不是难事。之后再往蓝牙小车、无线传感器这些方向扩展思路自然就顺了。
返回列表