在这里,我试图从esp32驱动程序中读取一个特征,我得到了这些问题. "如果之前调用了ReadCharacteristic,则可能会发生PlatformException(READ_CHARACTIVE_ERROR,未知原因 上次读取完成,NULL,NULL)". 下面我附上了用于读取特征的代码.
Future<void> readData async{
BluetoothService? DataService =
BLEComm().getService(DeviceServiceUUIDs.Service);
if (null != DataService) {
await Future.delayed(Duration(milliseconds:50),() async{
BluetoothCharacteristic? DurationCharacteristic =
BLEComm().getCharacteristic(
DeviceServiceUUIDs.duration,
DataService);
List<int>? DurationResponse = await BLEComm()
.readCharacteristic(DurationCharacteristic);
String Duration = String.fromCharCodes(DurationResponse!);
var Duration_Data = double.parse(Duration);
});
在这里,我列出了我习惯于从上面的代码中读取特征的低级函数.
/// Get a specific service from the list of services.
BluetoothService? getService(String uuid) {
for (BluetoothService? service in _deviceServices) {
if (service?.uuid.toString() == uuid) {
return service;
}
}
return null;
}
/// Get Characteristic object from a service
BluetoothCharacteristic? getCharacteristic(
String uuid, BluetoothService bleService) {
var characteristics = bleService.characteristics;
for (BluetoothCharacteristic characteristic in characteristics) {
if (characteristic.uuid.toString() == uuid) {
return characteristic;
}
}
return null;
}
/// read value to a characteristic
/// Throws Exceptions on Non readable characteristic and general exceptions.
Future<List<int>?> readCharacteristic(
BluetoothCharacteristic? characteristic) async {
List<int>? value;
try {
if (null != characteristic && !characteristic.properties.read) {
throw ("characteristic ${characteristic.uuid.toString()} is not readable");
}
value = await characteristic?.read();
} catch (ex) {
throw Exception(ex);
}
return value;
}
}