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

Flutter Blue Plus扫描无法发现HC-05设备的问题求助

Flutter Blue Plus 无法扫描到HC-05的解决方案

以下是针对你遇到的扫描不到HC-05模块问题的排查和修复步骤:

1. 确认HC-05硬件处于可发现状态

HC-05只有在配对模式(指示灯快速闪烁)下才会被蓝牙扫描发现,正常连接状态下可能不会广播自身信息。请按HC-05的重置/配对按钮,确保进入可发现模式后再尝试扫描。

2. 完善权限申请(Android端)

Android 12+及部分低版本系统需要位置权限才能正常扫描蓝牙设备,你的代码中缺少位置权限申请,补充如下:

修改_requestPermissions方法:

void _requestPermissions() async {
  // 申请位置权限(蓝牙扫描依赖)
  var locationStatus = await Permission.location.status;
  if (!locationStatus.isGranted) {
    await Permission.location.request();
  }

  var scanStatus = await Permission.bluetoothScan.status;
  if (!scanStatus.isGranted) {
    await Permission.bluetoothScan.request();
  }

  var connectStatus = await Permission.bluetoothConnect.status;
  if (!connectStatus.isGranted) {
    await Permission.bluetoothConnect.request();
  }
}

同时在android/app/src/main/AndroidManifest.xml中添加必要权限:

<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />

3. 修改扫描逻辑,避免依赖设备名称

部分HC-05模块可能未设置名称,或名称被修改为非"HC-05"的值。修改扫描监听代码,打印所有扫描到的设备信息,同时支持通过MAC地址或服务UUID匹配:

FlutterBluePlus.scanResults.listen((results) {
  for (ScanResult result in results) {
    // 打印完整设备信息,方便排查
    print('发现设备: 名称=${result.device.name}, MAC=${result.device.id}, RSSI=${result.rssi}');
    
    // 匹配逻辑:名称或MAC地址或服务UUID
    bool isHC05 = result.device.name == 'HC-05' 
        || result.device.id.toString() == '你的HC-05 MAC地址' // 替换为实际MAC
        || result.advertisementData.serviceUuids.contains(Guid("00001101-0000-1000-8000-00805F9B34FB")); // HC-05 SPP服务UUID

    if (isHC05) {
      setState(() {
        _deviceToConnect = result.device;
      });
      _connectToDevice(result.device);
      FlutterBluePlus.stopScan(); // 找到设备后立即停止扫描
      break;
    }
  }
});

4. 优化扫描参数

调整扫描时长、添加服务UUID过滤,提高HC-05的识别率:

void _startScan() async {
  // 检查蓝牙是否已开启
  if (!(await FlutterBluePlus.isOn)) {
    setState(() {
      _status = '请先打开蓝牙';
    });
    return;
  }

  setState(() {
    _isScanning = true;
  });

  // 扫描HC-05的SPP服务UUID,缩小扫描范围
  FlutterBluePlus.startScan(
    timeout: Duration(seconds: 20),
    withServices: [Guid("00001101-0000-1000-8000-00805F9B34FB")]
  );

  // 后续监听逻辑...
}

5. 检查代码中的扫描停止逻辑

当前代码在找到设备后未主动停止扫描,可能导致状态更新异常。在匹配到HC-05后调用FlutterBluePlus.stopScan(),避免重复处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:24:54