元器件 · 通信
HC-05 蓝牙模块
HC-05 为机器人加上一条蓝牙串口:与手机配对后就能遥控机器人或回传数据,用的还是和有线连接完全相同的 TX/RX 引脚。
它是什么
HC-05 是让机器人无线最简单的办法。它是表现得像没有线的串口线的蓝牙模块:单片机在 TX/RX 脚上读写字节,和走 USB 一模一样,只是另一头是蓝牙配对的手机或电脑。手机 App 发个 F 车就前进——不用 Wi-Fi,不用网络,不用账号。
工作原理
HC-05 实现蓝牙串口协议(SPP)。配对后,空中收到的东西出现在 TX 脚上,发给 RX 脚的东西飞到配对设备。代码只管串口——Serial.read() / Serial.print()——无线链路隐形。名字、波特率、主从角色用另一个命令模式的 AT 命令配置,大多数机器人默认就能直接用。
什么时候用它
想甩掉线指挥或监控机器人时拿 HC-05:
车上已经有 ESP32 就不需要 HC-05——ESP32 自带蓝牙和 Wi-Fi。HC-05 是给 Arduino Uno 加同样无线本事的外挂。
接线与坑
- **串口线交叉:**模块 TX → 板子 RX,模块 RX → 板子 TX。接反是“连不上”第一大原因。
- RX 脚分压到 3.3 V(Uno 5 V 的板子)。
- 烧录时让出硬件串口,或用软串口脚——模块和 USB 烧录器共用不了 Uno 唯一的硬件 UART。
- 先配对(PIN 一般 1234/0000);板载 LED 显示连接状态。
引脚
| 引脚 | 名 | 作用 |
|---|---|---|
| 1 | EN / KEY |
上电时拉 HIGH 进 AT 命令模式 |
| 2 | VCC |
3.6–6 V,转接板内部稳到 3.3 V |
| 3 | GND |
地 |
| 4 | TXD |
模块发送,接单片机的 RX |
| 5 | RXD |
模块接收。3.3 V 逻辑——5 V 信号要分压 |
| 6 | STATE |
有设备连接时 HIGH。真有用,常被无视 |
STATE 脚值得更好待遇。读它的车知道手机走出范围,这是安全停车和一头撞墙等永远等不到的指令的区别。
接到 Arduino
这里两个错误占了大多数“连不上”报告。
| HC-05 | Arduino Uno | 说明 |
|---|---|---|
| VCC | 5 V | 板载稳压搞定 |
| GND | GND | |
| TXD | 10 脚(软串口 RX) | 模块 TX → 板子 RX,交叉 |
| RXD | 经分压接 11 脚(软串口 TX) | 板子 TX → 模块 RX,经 2:1 分压 |
| EN | 悬空 | 只 AT 模式用 |
| STATE | 任一数字脚 | 可选,查连接 |
串口线交叉
TX 说,RX 听。两台设备在同一根线上各说各的等于什么都没说,而且没报错——模块配对正常,LED 常亮,数据永远不动。模块 TX 接板子 RX,模块 RX 接板子 TX。
RX 线分压
RXD 是 3.3 V 输入,Uno 输出 5 V。两个电阻:
Arduino TX ──── 1 kΩ ──┬── HC-05 RXD
│
2 kΩ
│
GND
反方向 TXD 不用分压——模块 3.3 V 输出过得了 Uno 3.0 V 的高阈值。
别用 0 和 1 脚
Uno 只有一个硬件 UART,USB 烧录器已经占了。模块接上去烧录失败,串口监视器输出跑到模块里,调试没法做。用另外两脚 SoftwareSerial。
能跑的最小代码
#include <SoftwareSerial.h>
SoftwareSerial bt(10, 11); // RX (from module TX), TX (to module RX)
const int STATE_PIN = 8;
void setup() {
Serial.begin(115200); // USB, for debugging
bt.begin(9600); // HC-05 default in data mode
pinMode(STATE_PIN, INPUT);
}
void loop() {
// Lose the link, stop the robot. Do this before reading commands.
if (digitalRead(STATE_PIN) == LOW) { stopMotors(); }
if (bt.available()) {
char c = bt.read();
switch (c) {
case 'F': driveForward(); break;
case 'B': driveBackward(); break;
case 'L': turnLeft(); break;
case 'R': turnRight(); break;
case 'S': stopMotors(); break;
}
Serial.print("cmd: "); Serial.println(c); // echo to USB for debugging
}
}
循环顶的连接检查是大多数教程漏掉的部分,也是拦住失控车的部分。蓝牙距离约 10 m,墙一挡锐减;链路掉了还执行上一条指令的车会一直走到撞上东西。
AT 命令模式
改名字、波特率、PIN 要 AT 模式,进它的步骤模块上一个字不写。
- 模块断电。
EN拉 HIGH(板子有小按键就按住)。- 按住
EN上电。 - LED 慢闪——约两秒一次——而不是快闪。
- 38400 波特率对话,不是 9600,回车换行都要。
AT -> OK
AT+NAME=LineBot -> OK set the name shown when pairing
AT+PSWD="1234" -> OK set the pairing PIN (quotes on newer firmware)
AT+UART=115200,0,0 -> OK data-mode baud rate
AT+ROLE=0 -> OK 0 = slave (normal), 1 = master
AT+ADDR? -> +ADDR the module's own address
两个坑:AT 模式永远 38400,和数据波特率无关;LED 闪法是唯一可靠标志。快闪是数据模式,AT 命令会直接发到空中给配对设备。
HC-05 还是 HC-06?
长得一样,混着卖,只有一个真区别。
| HC-05 | HC-06 | |
|---|---|---|
| 角色 | 主机或从机 | 仅从机 |
| 能主动连接 | 能 | 不能 |
| AT 模式 | EN 脚进,38400 |
未配对时随时,数据波特率 |
| 价格 | 贵一点 | 便宜一点 |
模块只等人家手机连,HC-06 够了。两台车互聊,或车主动连模块而不是等人连,就要 HC-05 的主机角色。
故障排查
| 现象 | 可能原因 | 解决 |
|---|---|---|
| 配对上但数据不动 | TX/RX 没交叉 | 模块 TX → 板子 RX,模块 RX → 板子 TX |
| 乱码 | 波特率不一致 | 两端都 9600,或设成同一个 |
| 连着烧录失败 | 模块占了 0/1 脚 | 挪到 SoftwareSerial 脚 |
| AT 命令没反应 | 根本没进 AT 模式 | 上电时按住 EN;看慢闪 |
| AT 模式无应答 | 用了数据波特率 | AT 模式永远 38400 |
| 配对不上 | PIN 错 | 1234 再 0000 试 |
| 几米就掉 | Class 2 距离加上墙体 | 正常;用 STATE 脚做故障安全处理 |
| 断连车还跑 | 无链路检查 | 读 STATE,LOW 就停 |
| USB 供电好、电池跪 | 电源电压下垂 | 射频发射的尖峰需要稳定的 5 V |
HC-05 还是 ESP32?
选零件而不是用存货时,这是真问题。
| HC-05 + Arduino | ESP32 | |
|---|---|---|
| 无线 | 经典蓝牙 SPP | 内置 Wi-Fi 和蓝牙 |
| 额外硬件 | 模块、分压、两脚 | 无 |
| 控制界面 | 串口字节流 | 车自己开的网页 |
| 距离 | 约 10 m | Wi-Fi 约 50 m,有网多远都行 |
| 要手机 App | 要——通用蓝牙终端 | 不要——浏览器就行 |
| 学习价值 | 串口协议,最素的链路 | 网络,大学问 |
手里有 Arduino、想最快无线,HC-05 是正解:真简单,进一字节出一字节,无网络概念。新作品硬性要无线,ESP32 花更少干更多还不加零件——自己开控制页的车,谁的手机都不用装 App。
探索关联图谱
用到它的搭建
包含 HC-05 蓝牙模块 的项目、学习路线和模拟器。
对比
替代方案
问题
HC-05 蓝牙模块 常见问题
HC-05 是什么?
HC-05 是一种蓝牙模块,它把无线连接变成普通的串口(UART)链路。在你的单片机看来,它和一根有线串口线一模一样——你在 TX/RX 上读写字节——只不过另一端是通过蓝牙连接的手机或电脑。这是无线控制机器人最简单的办法。
HC-05 怎么接到 Arduino?
先接好 VCC 和 GND,然后把串口线交叉连接——模块 TX 接 Arduino RX,模块 RX 接 Arduino TX。由于 HC-05 的 RX 引脚是 3.3 V 的,要用分压电路把 Arduino 5 V 的 TX 信号降下来。这样一来,你通过串口打印的任何内容都会无线发送到配对的手机上,反之亦然。
HC-05 的通信距离有多远?
视距约 10 米——它是 Class 2 蓝牙设备。墙体和干扰会让距离缩短。用手机遥控机器人在房间里跑,这个距离绰绰有余;但要远距离控制,就得改用 Wi-Fi 或专用的无线电。
HC-05 模块怎么配对?
与手机配对时,先给模块上电,打开手机的蓝牙设置,选择 HC-05,然后输入 PIN(通常是 1234 或 0000)。要让两个 HC-05 相互配对,需要用 AT 命令把一个设为主机、另一个设为从机,再按地址把它们绑定。
怎么给 HC-05 编程配置?
HC-05 有两种模式。在数据模式下,它只是把串口字节原样透传。要修改它的名称、波特率或主从角色,就得让它进入 AT 命令模式——上电时把 EN/KEY 引脚保持为高电平——然后通过串口发送 AT 命令。
延伸阅读