两块Firebeetle ESP32蓝牙连接故障排查求助
问题分析与解决方案
我用Firebeetle Espressif ESP32主控、MFMYUANHAN MAX30105传感器及3.7V小型锂电池制作可佩戴心率血氧腕带,需要两块同型号ESP32持续蓝牙连接。目前两块ESP32蓝牙无法建立连接,接收端获取不到传感端数据,且手机蓝牙搜索不到设备,请问是否是硬件板卡的问题?
一、核心问题定位:大概率是代码逻辑问题,而非硬件
先看代码中的蓝牙相关问题:
1. 传感端(Master)的蓝牙逻辑缺陷
- ESP32的SPP Master模式下,设备不会对外广播,所以手机搜不到传感端是正常现象,但接收端(Slave)应该能被搜到。
- 原代码中,传感端在
setup()里直接死循环等待蓝牙连接:
这个逻辑会导致如果Slave未就绪,程序直接卡死,甚至传感器都无法初始化。while (!SerialBT.connected(10000)) { Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app."); }
2. 连接时序问题
原代码先尝试蓝牙连接,再初始化传感器,且未处理连接失败的重试逻辑,很容易因Slave启动滞后导致连接失败。
二、代码修复步骤
1. 修改传感端代码
调整初始化顺序与连接逻辑
把传感器初始化放在蓝牙连接之前,避免连接失败卡死程序;将连接逻辑移到loop()中循环重试:
void setup() { Serial.println("Hello World"); Serial.begin(115200); // 先初始化传感器,避免蓝牙连接失败导致程序卡死 if (sensor.begin() && sensor.setSamplingRate(kSamplingRate)) { Serial.println("Sensor initialized"); } else { Serial.println("Sensor not found"); while (1); } // 初始化蓝牙Master SerialBT.begin(myName, true); Serial.printf("The device \"%s\" started in master mode, make sure slave BT device is on!\n", myName.c_str()); SerialBT.setPin(pin); Serial.println("Using PIN"); Serial.printf("Will attempt to connect to slave BT device named \"%s\"\n", slaveName.c_str()); } void loop() { // 循环检查并尝试连接蓝牙 if (!SerialBT.connected()) { Serial.println("Attempting to connect to slave..."); bool connected = SerialBT.connect(slaveName); if (connected) { Serial.println("Connected Successfully!"); } else { Serial.println("Failed to connect, retry in 2s"); delay(2000); return; // 跳过本次循环,下次再尝试连接 } } // 原有的传感器数据采集与处理逻辑... }
2. 验证接收端(Slave)的蓝牙广播
单独给接收端上电,查看串口输出是否正常打印设备启动信息,然后用手机搜索ESP32-BT-Slave:
- 如果能搜到并配对,说明接收端蓝牙硬件正常;
- 如果搜不到,再进入硬件排查环节。
三、硬件排查步骤(代码修复后仍无效果时)
1. 单块ESP32蓝牙硬件验证
给任意一块ESP32刷入最简蓝牙测试代码,验证硬件是否正常:
#include "BluetoothSerial.h" BluetoothSerial SerialBT; void setup() { Serial.begin(115200); SerialBT.begin("Test-ESP32"); Serial.println("Bluetooth ready"); } void loop() { if (SerialBT.available()) { Serial.write(SerialBT.read()); } if (Serial.available()) { SerialBT.write(Serial.read()); } }
刷入后用手机搜索Test-ESP32,能搜到并配对则说明硬件正常。
2. 电源稳定性检查
- 蓝牙工作时峰值电流可达100mA以上,检查3.7V锂电池电压是否在3.3V~4.2V之间,尝试用USB供电排除电源不足问题;
- 检查电池与ESP32的接线是否牢固,避免接触不良导致供电波动。
3. 电磁干扰排查
MAX30105的LED工作时可能产生电磁干扰,调整传感器与ESP32的布线,尽量远离板载蓝牙天线,缩短布线长度。
内容的提问来源于stack exchange,提问作者Andy Wang
相关产品推荐
相关产品推荐

