如何使用 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 不知道如何阅读本文,任何帮助将不胜感激。
特性 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 特征发送命令,否则您不会在那里收到任何内容。但正确的程序应该是您文档的一部分