You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32(蓝牙主设备)与HC-05从设备连接不稳定问题咨询

ESP32(主设备)与HC-05(从设备)稳定蓝牙通信问题排查与解决方案

问题背景

尝试将ESP32作为蓝牙主设备,与搭载HC-05的Arduino Uno建立稳定串口通信,当前可扫描到HC-05,但连接后立即断开或1-2秒后中断,无法实现数据传输。硬件配置与已尝试操作如下:

硬件配置

  • Arduino Uno通过SoftwareSerial连接HC-05,引脚13=RX、12=TX
  • HC-05设置为从设备模式(AT+ROLE=0),波特率9600(AT+UART?确认)

已尝试操作

  • 确认HC-05从模式与波特率
  • 测试9600/38400波特率
  • 通过MAC地址与设备名称尝试连接

问题解答

1. 连接不稳定的核心原因

  • HC-05未绑定配对设备:默认状态下HC-05未保存ESP32的配对信息,连接后无绑定关系导致快速断开
  • 电源供电不足:HC-05连接瞬间需较大电流,Arduino Uno的5V供电可能无法满足,引发模块重启或连接中断
  • SoftwareSerial引脚选择不当:Uno的13/12引脚硬件中断支持差,SoftwareSerial通信不稳定间接影响蓝牙连接
  • ESP32连接参数不匹配:BluetoothSerial库默认的连接超时、参数与HC-05的经典蓝牙协议兼容性不足

2. HC-05的必要配置调整

无需修改角色(保持AT+ROLE=0即可),需通过AT指令完成以下配置:

  • 绑定ESP32 MAC地址:AT+BIND=AA:BB:CC:DD:EE:FF(替换为ESP32的MAC地址),让HC-05仅与指定设备连接
  • 设置连接模式:AT+CMODE=0(仅连接绑定设备),避免无关设备干扰
  • 确认串口参数:AT+UART=9600,0,0(波特率9600、无校验、1停止位),确保与两端代码一致
  • 保存设置并重启:AT+RESET,使配置生效

波特率建议保持9600,更高波特率会加剧SoftwareSerial的丢包问题。

3. 可靠通信的推荐代码与配置

ESP32主设备代码(带重连机制)

#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Enable via `make menuconfig`
#endif

BluetoothSerial SerialBT;
const char* HC05_MAC = "98:D3:31:FB:XX:XX"; // 替换为你的HC-05 MAC地址

void setup() {
  Serial.begin(115200);
  SerialBT.begin("ESP32_BT_Master"); // 设置ESP32蓝牙名称
  Serial.println("ESP32 Master Ready");

  // 初始连接尝试
  if (!SerialBT.connect(HC05_MAC)) {
    Serial.println("Initial connection failed. Retrying...");
    delay(2000);
    SerialBT.connect(HC05_MAC);
  }
}

void loop() {
  // 自动重连机制
  if (!SerialBT.connected()) {
    Serial.println("Disconnected. Reconnecting...");
    SerialBT.connect(HC05_MAC);
    delay(1000);
  }

  // 数据收发逻辑
  if (SerialBT.available()) {
    String recvData = SerialBT.readStringUntil('\n');
    Serial.print("From HC-05: ");
    Serial.println(recvData);
  }
  if (Serial.available()) {
    String sendData = Serial.readStringUntil('\n');
    SerialBT.println(sendData);
    Serial.print("To HC-05: ");
    Serial.println(sendData);
  }
}

Arduino Uno从设备代码(优化引脚)

#include <SoftwareSerial.h>

// 改用引脚2/3(支持硬件中断,稳定性更高)
SoftwareSerial BTSerial(2, 3); // RX, TX

void setup() {
  Serial.begin(9600);
  BTSerial.begin(9600);
  delay(1000); // 等待HC-05初始化
  Serial.println("Arduino Uno Ready");
}

void loop() {
  if (BTSerial.available()) {
    String recvData = BTSerial.readStringUntil('\n');
    Serial.print("From ESP32: ");
    Serial.println(recvData);
  }
  if (Serial.available()) {
    String sendData = Serial.readStringUntil('\n');
    BTSerial.println(sendData);
    Serial.print("To ESP32: ");
    Serial.println(sendData);
  }
}

硬件优化建议

  • 给HC-05单独供电:使用外部5V电源(如充电宝),避免Uno供电不足
  • HC-05添加滤波电容:在VCC与GND之间并联100nF电容,减少电源干扰
  • 更换SoftwareSerial引脚:优先选择Uno的2/3引脚,利用硬件中断提升通信稳定性

内容的提问来源于stack exchange,提问作者Osama Tharwat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:44:53