Flutter 低功耗蓝牙设备无法读取特征数据

问题描述 投票:0回答:1

如何使用 flutter_reactive_ble 包从蓝牙低功耗设备读取特征数据。

这是我当前遇到的错误

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: Exception: GenericFailure<CharacteristicValueUpdateError>(code: CharacteristicValueUpdateError.unknown, message: "GATT exception from MAC address FF:24:01:06:20:E4, with type BleGattOperation{description='CHARACTERISTIC_READ'}")

以下是当前正在运行的功能 首先我获取设备信息

  getDevice() {
    Uuid u1 = Uuid.parse('00001800-0000-1000-8000-00805f9b34fb');
    Uuid u2 = Uuid.parse('00001801-0000-1000-8000-00805f9b34fb');
    Uuid u3 = Uuid.parse('0000fff0-0000-1000-8000-00805f9b34fb');

    flutterReactiveBle.scanForDevices(withServices: [u1, u2, u3], scanMode: ScanMode.lowLatency).listen((device) {
      setState(() {
        name = device.name;
        id = device.id;
      });
    });
  }

获取设备功能正常,能够成功检索到设备信息。

然后我连接到设备

  connectToDevice() {
    Uuid ser = Uuid.parse('0000fff0-0000-1000-8000-00805f9b34fb');
    Uuid cha = Uuid.parse('00000001-0000-1000-8000-00805f9b34fb');

    flutterReactiveBle.connectToDevice(
      id: id,
      servicesWithCharacteristicsToDiscover: {ser: [cha]},
      connectionTimeout: const Duration(seconds: 10),
    ).listen((connectionState) {
      setState(() {
        able = connectionState.connectionState.name;
      });
    }); 
  }

连接设备功能也很好我能够成功连接到设备。

然后读取特征

  readFromDevice() async {
    Uuid ser = Uuid.parse('0000fff0-0000-1000-8000-00805f9b34fb');
    Uuid cha = Uuid.parse('0000fff1-0000-1000-8000-00805f9b34fb');
    
    final characteristic = QualifiedCharacteristic(serviceId: ser, characteristicId: cha, deviceId: id);

    final response = await flutterReactiveBle.readCharacteristic(characteristic).then((value) {
      print(value.toString());
    });
    
    print(response.toString());
    
  }

这是在尝试获取设备时间时抛出错误的函数 这是设备文档中的注释 特征UUID:0xFFF2(属性:写入,APP向Device发送命令) 特征UUID:0xFFF1(属性:Notify,设备向AP发送数据) 并读取仪表时间,上面写着 获取计米时间0x01 不知道如何阅读本文,任何帮助将不胜感激。

android flutter bluetooth bluetooth-lowenergy
1个回答
0
投票

特性 0xFFF1 不允许读取,因为它不具有“读取”属性:

特征UUID:0xFFF1(属性:Notify,设备向AP发送数据)

要获取您需要的信息,请订阅该特性的通知。 flutter_reactive_ble 文档包含以下代码片段:

final characteristic = QualifiedCharacteristic(serviceId: serviceUuid, characteristicId: characteristicUuid, deviceId: foundDeviceId);
   flutterReactiveBle.subscribeToCharacteristic(characteristic).listen((data) {
      // code to handle incoming data
    }, onError: (dynamic error) {
      // code to handle errors
    });

我的猜测是,除非您首先通过 0xFFF2 特征发送命令,否则您不会在那里收到任何内容。但正确的程序应该是您文档的一部分

© www.soinside.com 2019 - 2024. All rights reserved.