HC-05 蓝牙模块 技术文档
HC-05 是一款高性能的主从一体蓝牙串口模块,遵循蓝牙 V2.0+EDR 规范,它可以将串口数据转换为蓝牙无线数据,或者将蓝牙无线数据转换为串口数据,从而实现各类设备(如单片机、电脑、手机)之间的无线串口通信。

主要特性:
- 蓝牙版本: Bluetooth V2.0 + EDR (Enhanced Data Rate)
- 工作频率: 2.4GHz ISM 频段
- 调制方式: GFSK
- 发射功率: Class 2,可达 +4dBm
- 灵敏度: -80dBm
- 工作电压: 3.3V ~ 6V
- 串口接口: TTL 电平 (RX, TX)
- 工作模式: 主机模式、从机模式、回环模式
- 默认波特率: 9600, 8, N, 1
- 蓝牙名称: HC-05 (可通过 AT 指令修改)
- 配对密码: 1234 或 0000 (可通过 AT 指令修改)
模块引脚定义
HC-05 模块通常通过排针或焊盘引出,常见的引脚排列如下:
| 引脚 | 名称 | 功能描述 | 电平 |
|---|---|---|---|
| 1 | VCC | 电源正极 | 3V - 6V |
| 2 | GND | 电源地 | GND |
| 3 | TXD | 发送数据 (TTL 电平) | 输出 |
| 4 | RXD | 接收数据 (TTL 电平) | 输入 |
| 5 | KEY / EN | 模式切换引脚 | 高电平: AT 模式 低电平: 正常工作模式 |
| 6 | STATE | 连接状态指示 | 高电平: 已连接 低电平: 未连接 |
| 7 | +5V | (可选) 5V 电源输入 | 5V |
重要提示:
- TXD 和 RXD: 这两个引脚用于与主控板(如 Arduino、STM32)进行串口通信,连接时必须交叉连接,即
HC-05的TXD连接到主控板的RXD,HC-05的RXD连接到主控板的TXD。 - KEY / EN 引脚: 这是切换工作模式的关键引脚。
- 当此引脚接高电平时,模块进入 AT 指令模式。
- 当此引脚接低电平时,模块进入 正常工作模式(作为从机或主机)。
- STATE 引脚: 可用于在程序中检测蓝牙连接状态,通常外接一个 LED 灯进行直观显示。
工作模式
HC-05 支持 3 种工作模式,通过 KEY 引脚和特定指令进行切换。
1 从机模式
这是最常用的模式,模块作为从机,等待主机(如手机、电脑)的连接请求。

- 进入方式:
- 确保 KEY 引脚为 低电平。
- 给模块上电。
- 模块会自动进入从机模式,蓝牙名称为
HC-05(默认),等待配对。
- 指示: 模块上的 LED 灯会 慢闪(约 2 秒闪一次),表示未连接;当连接成功后,LED 会 快闪(约 200ms 闪一次)。
2 主机模式
模块作为主机,可以主动搜索并连接其他蓝牙设备(尤其是另一个处于从机模式的 HC-05)。
- 进入方式:
- 需要通过 AT 指令 将模块设置为可被其他主机连接(
AT+ROLE=1)。 - 在程序中通过串口发送指令
AT+CMODE=1和AT+RMAAD清除之前的配对记录,并设置连接模式。 - 发送
AT+BIND=指令来绑定目标从机的 MAC 地址。 - 重启模块,并将 KEY 引脚置为低电平上电,模块会自动连接绑定的设备。
- 需要通过 AT 指令 将模块设置为可被其他主机连接(
- 指示: 主机模式下的 LED 灯行为与从机模式类似,慢闪表示正在寻找或未连接,快闪表示已连接。
3 回环模式
此模式下,模块连接到自身,主要用于测试。
- 进入方式: 通过 AT 指令设置
AT+ROLE=2。
4 AT 指令模式
此模式用于配置模块的参数,如修改名称、密码、波特率等。
- 进入方式:
- 将 KEY 引脚接 高电平 (VCC)。
- 给模块上电。
- 模块进入 AT 指令模式,LED 灯会 快速双闪(约 100ms 闪两次,停顿一下)。
- 注意事项:
- AT 指令的波特率可能与默认串口波特率不同,需要查阅模块手册或尝试常用波特率(如 38400)。
- 所有 AT 指令都必须以
回车+换行(\r\n或0x0D 0x0A)
AT 指令集
在 AT 指令模式下,可以通过发送特定指令来配置模块。

| 指令 | 功能 | 参数 | 示例 | 返回值 |
|---|---|---|---|---|
AT |
测试通信 | 无 | AT\r\n |
OK\r\n |
AT+VERSION |
查询固件版本 | 无 | AT+VERSION\r\n |
VERSION:2.0-20100601\r\nOK\r\n |
AT+NAME |
设置/查询蓝牙名称 | 新名称 |
AT+NAMEMyArduino\r\n |
OK\r\n |
AT+PSWD |
设置/查询配对密码 | 4位密码 |
AT+PSWD1234\r\n |
OK\r\n |
AT+BAUD |
设置/查询串口波特率 | 值 (见下表) |
AT+BAUD4\r\n |
OK\r\n |
AT+ADDR |
查询模块 MAC 地址 | 无 | AT+ADDR\r\n |
ADDR:98D3:31F2:5CBE\r\nOK\r\n |
AT+ROLE |
设置角色 | 0=从机, 1=主机 |
AT+ROLE1\r\n |
OK\r\n |
AT+CMODE |
设置连接模式 | 0=只连接绑定设备, 1=连接任何设备 |
AT+CMODE1\r\n |
OK\r\n |
AT+RMAAD |
移除所有配对记录 | 无 | AT+RMAAD\r\n |
OK\r\n |
AT+RESET |
复位模块 | 无 | AT+RESET\r\n |
OK\r\n |
AT+BAUD 波特率设置对照表:
| 值 | 波特率 | 值 | 波特率 |
|---|---|---|---|
| 0 | 1200 | 4 | 38400 |
| 1 | 2400 | 5 | 57600 |
| 2 | 4800 | 6 | 115200 |
| 3 | 9600 | 7 | 230400 |
| 8 | 460800 | 9 | 921600 |
与 Arduino 连接示例
1 准备工作
- Arduino Uno (或其他型号)
- HC-05 蓝牙模块
- 杜邦线若干
2 硬件连接 (从机模式)
| HC-05 引脚 | Arduino 引脚 |
|---|---|
| VCC | 5V |
| GND | GND |
| TXD | D10 (作为软件串口的 RX) |
| RXD | D11 (作为软件串口的 TX) |
| KEY | GND (设置为从机模式) |
注意: Arduino Uno 只有一个硬件串口 (0, 1),通常用于上传代码和与电脑通信,为了避免冲突,我们使用 SoftwareSerial 库在数字引脚上创建一个虚拟串口。
3 代码示例 (回环测试)
这个示例让 HC-05 接收来自电脑串口的数据,并原样返回,形成一个回环。
#include <SoftwareSerial.h>
// 定义软件串口的 RX 和 TX 引脚
// HC-05 的 TXD 连接到 Arduino 的 RX (D10)
// HC-05 的 RXD 连接到 Arduino 的 TX (D11)
SoftwareSerial BTSerial(10, 11); // RX, TX
void setup() {
// 初始化硬件串口,用于与电脑通信
Serial.begin(9600);
Serial.println("Arduino Bluetooth HC-05 is ready.");
// 初始化软件串口,用于与 HC-05 通信
// 这里的波特率必须和 HC-05 模块的默认波特率或设置后的波特率一致
BTSerial.begin(9600);
}
void loop() {
// 如果电脑有数据发送过来
if (Serial.available()) {
// 读取数据
char c = Serial.read();
// 将数据发送给 HC-05
BTSerial.write(c);
}
// HC-05 有数据发送过来
if (BTSerial.available()) {
// 读取数据
char c = BTSerial.read();
// 将数据发送到电脑串口监视器
Serial.write(c);
}
}
4 使用步骤
- 按照上述接线图连接硬件。
- 将代码上传到 Arduino。
- 打开 Arduino IDE 的 串口监视器 (波特率设置为 9600)。
- 在电脑上搜索蓝牙设备,找到
HC-05并配对,密码为1234。 - 配对成功后,在串口监视器中输入任何字符,该字符会通过蓝牙发送给 Arduino,Arduino 再通过蓝牙发回,最终在监视器上显示出来。
常见问题与解决方案
-
无法进入 AT 模式:
- 检查 KEY 引脚: 确保上电前 KEY 引脚稳定接高电平。
- 检查波特率: 尝试使用不同的波特率(如 38400)发送
AT指令。 - 检查接线: 确保 TX/RX 交叉连接,且没有接反。
-
AT 指令返回
ERROR:- 检查指令格式: 确保指令拼写正确,并且以
\r\n- 检查当前模式: 确保模块确实在 AT 模式下(LED 快速双闪)。
- 检查指令格式: 确保指令拼写正确,并且以
-
无法配对或连接:
- 检查电源: 确保 VCC 电压稳定在 3.3V-6V。
- 检查距离: 确保设备在有效通信距离内(约 10 米)。
- 检查密码: 确认输入的配对密码正确。
- 重启设备: 尝试重新给 Arduino 和蓝牙模块上电。
-
数据传输乱码:
- 检查波特率: 这是最常见的原因! 确保 Arduino 代码中
SoftwareSerial.begin()的波特率与 HC-05 模块的波特率完全一致,如果通过 AT 指令修改了波特率,必须重新设置 Arduino 代码。
- 检查波特率: 这是最常见的原因! 确保 Arduino 代码中
应用场景
- 无线遥控: 用手机或电脑遥控 Arduino 控制的机器人、小车。
- 数据采集: 将传感器数据(如温湿度、GPS)通过蓝牙实时传输到手机或电脑。
- 智能家居控制: 通过手机 APP 控制家中的灯光、窗帘等设备。
- 串口调试助手: 在没有物理串口线的情况下,用手机或电脑调试设备的串口输出。
- 无线透传: 替代有线串口,实现设备间的无线数据交换。
