HC-05蓝牙模块串口功能异常求助:无法收发数据及响应AT命令
排查HC-05蓝牙模块乱码&AT命令无响应的问题
我之前折腾HC-05的时候也碰到过几乎一模一样的问题,给你梳理几个最可能的排查方向,按顺序来试:
1. 先揪出最容易犯的硬件错误
- TX/RX引脚接反了:这是90%新手都会踩的坑!Arduino的
TX要接HC-05的RX,Arduino的RX要接HC-05的TX,接反直接导致乱码、收不到任何响应。 - 供电不足/电压不对:HC-05是3.3V设备,虽然有些模块带5V转3.3V的降压电路,但不稳定的供电会让模块工作异常。优先用Arduino的
3.3V引脚供电,或者单独的3.3V电源(电流最好能到100mA以上),别直接怼5V。 - EN引脚没接对(AT模式必备):要进入AT模式,必须把HC-05的
EN引脚接3.3V(部分模块是接5V,看模块说明书),而且要先接EN再给模块上电。上电后模块LED慢闪(约2秒1次)才是AT模式,快闪的话是配对模式,肯定不响应AT命令。
2. 修正AT模式的操作姿势
- 波特率要对应AT模式的默认值:大部分HC-05的AT模式默认波特率是
38400,不是普通配对模式的9600!你之前试了38400,但要确保是在AT模式下测试的。 - AT命令要规范:命令必须大写(比如
AT、AT+VERSION),换行模式选NL+CR,发送后如果模块响应OK才是正常的。
3. 解决电平不兼容导致的乱码
HC-05是3.3V电平,Arduino是5V电平,直接连接会导致信号失真出现乱码:
- 最简单的办法是加一个电平转换模块(双向的,专门用于3.3V和5V设备通信)。
- 临时测试可以用电阻分压:给Arduino的
TX引脚串一个1kΩ电阻,再接HC-05的RX,同时HC-05的RX接一个2kΩ电阻到GND,这样就能把5V信号降到3.3V左右。
4. 调整代码的串口使用逻辑
你的代码用了Arduino的硬件Serial(RX/TX引脚),但这个串口同时负责和PC上传代码、串口监视器通信,接HC-05会冲突:
- 建议用
SoftwareSerial库把HC-05接到其他数字引脚,把硬件串口留给PC调试。修改后的代码示例:
#include <SoftwareSerial.h> // 定义软串口:引脚2是HC-05的TX,引脚3是HC-05的RX SoftwareSerial btSerial(2, 3); char junk; String inputString = ""; void setup() { Serial.begin(9600); // PC串口监视器的波特率 btSerial.begin(9600); // HC-05配对模式的默认波特率 pinMode(13, OUTPUT); } void loop() { // 读取HC-05发来的数据 if (btSerial.available()) { while (btSerial.available()) { char inChar = (char)btSerial.read(); inputString += inChar; } // 把模块数据打印到PC监视器看 Serial.println("收到蓝牙数据: " + inputString); // 处理LED控制逻辑 if (inputString == "a") { digitalWrite(13, HIGH); btSerial.println("LED已开启"); // 给蓝牙设备反馈 } else if (inputString == "b") { digitalWrite(13, LOW); btSerial.println("LED已关闭"); } // 清空缓存和字符串 while (btSerial.available() > 0) { junk = btSerial.read(); } inputString = ""; } // 把PC串口监视器的消息转发给HC-05 if (Serial.available()) { String pcMsg = Serial.readString(); btSerial.print(pcMsg); } }
- 上传代码前记得把HC-05从硬件RX/TX引脚上拔下来,不然串口被占用会上传失败。
5. 最后排查模块本身故障
如果以上所有步骤都试过还是不行,那大概率是模块本身的问题:比如蓝牙芯片损坏、引脚虚焊。可以换一个HC-05模块测试,或者检查模块的焊接点有没有松动。
内容的提问来源于stack exchange,提问作者antisycop




