如何从 BLE 制造商数据 flutter 中获取所需的值

How to get desired values from BLE manufacturer data flutter

我是 Flutter 的新手,我正在开发一个从 BLE 信标读取数据的应用程序。我已经扫描了设备并获得了制造商数据 {256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}

设备制造商告诉我设备数据如下:

KCBAdvDataManufacturerData = <.. .. .. .. .. .. .. .. 为 21 01 00 50 08 00 00 5e ..>

UUID - kCBAdvDataManufacturerData 数据包包含如下所示的传感器数据:

Byte index 8 – 11 = Pressure 32bit value

Byte index 12 – 15 = Temperature 32bit value

字节索引 16 = 电池电量百分比

我完全不知道在 Dart 中如何实现它

{256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}

Byte index 8 – 11 = Pressure 32bit value

Byte index 12 – 15 = Temperature 32bit value

字节索引 16 = 电池电量百分比

然后 以人类可理解的形式 这里的温度以 C 为单位,PSI 为单位,电池以 % 为单位。

有一个字节列表,因此您可以使用 https://api.dart.dev/stable/2.9.1/dart-core/List/sublist.html

从该列表中获取子列表

该子列表可以从 4 个字节转换为压力和温度值的带符号整数:

Convert 4 byte into a signed integer

我不确定给您的索引值是否正确。我假设数据是 little endian 格式,所以我对数据的假设是:

压力 = [33,18,0,0] = 4641(您是否期望值约为 46.41psi?)

温度 = [154,10,0,0] = 2714(您是否期望值约为 27.14c?)

Battery = [94] = 94(您期望的值为 94% 吗?)

这可以像下面这样完成:

import 'dart:typed_data';

var manufacturerData = Uint8List.fromList([0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]);
var pressure = ByteData.sublistView(manufacturerData, 6, 10);
var temperature = ByteData.sublistView(manufacturerData, 10, 14);
var battery = ByteData.sublistView(manufacturerData, 14, 15);
main() {
  print(pressure.getUint32(0, Endian.little));
  print(temperature.getUint32(0, Endian.little));
  print(battery.getUint8(0));
}

给我输出:

4641
2714
94