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

flutter_blue_plus示例无法扫描ESP32 BLE设备的问题求助

Flutter Blue Plus无法扫描到ESP32的问题排查方案

核心原因:Android模拟器不支持真实BLE扫描

Android Studio的模拟器无法识别物理蓝牙设备,只能处理虚拟BLE设备。你用iPhone的nRF能搜到ESP32,说明ESP32广播正常,问题出在模拟器的硬件限制上。

具体解决步骤

1. 改用真实Android设备测试

这是最直接有效的方法,模拟器本身不具备与真实BLE设备通信的能力,换成实体Android手机运行Flutter应用,大概率能正常扫描到ESP32。

2. 补全Android 11的权限配置

Android 11(API 30)对蓝牙权限有严格要求,检查android/app/src/main/AndroidManifest.xml,确保包含以下权限:

<!-- 旧版蓝牙权限(兼容到API30) -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!-- Android 11+ 专属蓝牙权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- BLE扫描必须的位置权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 声明支持BLE -->
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />

同时,在Flutter代码中动态申请权限,因为Android 6+以上危险权限(位置、蓝牙扫描)需要运行时授权。可以用permission_handler包,在扫描前调用权限申请逻辑,确保BLUETOOTH_SCAN和ACCESS_FINE_LOCATION权限已被用户授予。

3. 调整Flutter Blue Plus的扫描逻辑

默认扫描可能过滤了设备,尝试修改扫描代码:

  • 精准扫描:指定ESP32的服务UUID,避免无关设备干扰:
FlutterBluePlus.startScan(
  timeout: const Duration(seconds: 5),
  withServices: [Guid("你的ESP32服务UUID")]
);
  • 全量扫描:关闭服务过滤,扫描所有可见BLE设备:
FlutterBluePlus.startScan(timeout: const Duration(seconds: 10));
  • 检查示例代码中是否有额外过滤逻辑(比如只显示已配对设备),确保扫描回调没有丢弃ESP32的广播数据。

4. 确认ESP32的广播状态

检查ESP32代码,确保广播正常启动:

  • 确认调用了esp_ble_gap_start_advertising(),且广播参数配置正确(比如广播名称、可发现模式)。
  • 重启ESP32,避免蓝牙模块处于异常状态。

5. 排除环境干扰

  • 确保ESP32与测试设备距离在1-2米内,避开金属遮挡物。
  • 关闭周围其他蓝牙设备,减少广播信号冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:20:20