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

Flutter BLE广播器无法发数据包,ESP32检测不到指定UUID

问题排查方向

1. Beacon格式与ESP32扫描逻辑不匹配

beacon_broadcast默认发送的是iBeacon格式,并非普通BLE服务广播。如果ESP32代码仅针对服务UUID或设备名称做扫描过滤,肯定找不到目标——iBeacon的UUID藏在广播帧的特定位置(从第9字节开始的16字节),帧头是固定的0x02 0x01 0x06 0x1A 0xFF 0x4C 0x00 0x02 0x15。

  • 先检查ESP32代码有没有专门解析iBeacon帧的逻辑,别用普通BLE广播的解析方式套。

2. 手机端Beacon参数配置错误

核对你的main.dart初始化代码:

  • UUID是不是严格的128位小写格式?比如00000000-0000-0000-0000-000000000000,别写错字符或大小写。
  • Major/Minor值别超出0-65535的范围,部分设备碰到非法值会直接拒绝广播。
  • txPower设得太低会导致ESP32收不到信号,试试默认值或调高一点。

3. 权限配置细节遗漏(尤其是Android 12+)

别只看静态权限,Android 12及以上必须动态申请权限:

  • 除了BLUETOOTH_ADVERTISE、BLUETOOTH_SCAN、BLUETOOTH_CONNECT,还要添加ACCESS_FINE_LOCATION,而且必须在代码里弹框让用户授权,仅在Manifest里声明没用。
  • 确认Manifest里加了BLE硬件要求:
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
    

4. Beacon未真正启动

给启动代码加错误监听,确认是否启动失败:

beaconBroadcast.start().catchError((error) {
  print('Beacon启动失败: $error');
});

另外,小米、华为这类机型后台会限制BLE广播,测试时别切后台,保持APP在前台。

5. ESP32扫描参数设置问题

  • 检查ESP32是否用的被动扫描(BLE_SCAN_TYPE_PASSIVE),主动扫描可能过滤掉iBeacon帧。
  • 别设置过于严格的过滤条件,比如仅扫描特定设备名称——iBeacon的设备名通常是空的,或是苹果厂商ID,过滤名称肯定抓不到。
  • 核对ESP32的BLE初始化流程,是否正确开启BLE模式、注册扫描回调。

6. 先确认手机是否真的在发广播

用nRF Connect这类工具在手机上扫描自己的设备,看看有没有iBeacon广播出来。如果工具都扫不到,那是手机端的问题;如果工具能扫到,就是ESP32代码的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 09:40:18