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

两块Firebeetle ESP32蓝牙连接故障排查求助

问题分析与解决方案

我用Firebeetle Espressif ESP32主控、MFMYUANHAN MAX30105传感器及3.7V小型锂电池制作可佩戴心率血氧腕带,需要两块同型号ESP32持续蓝牙连接。目前两块ESP32蓝牙无法建立连接,接收端获取不到传感端数据,且手机蓝牙搜索不到设备,请问是否是硬件板卡的问题?


一、核心问题定位:大概率是代码逻辑问题,而非硬件

先看代码中的蓝牙相关问题:

1. 传感端(Master)的蓝牙逻辑缺陷

  • ESP32的SPP Master模式下,设备不会对外广播,所以手机搜不到传感端是正常现象,但接收端(Slave)应该能被搜到。
  • 原代码中,传感端在setup()里直接死循环等待蓝牙连接:
    while (!SerialBT.connected(10000)) {
      Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
    }
    
    这个逻辑会导致如果Slave未就绪,程序直接卡死,甚至传感器都无法初始化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 17:34:52