我是flutter的新手,我正在开发一款从BLE信标读取数据的应用程序。我已经扫描了设备,并获得了{256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}格式的制造商数据
设备制造商告诉我设备数据如下:
KCBAdvDataManufacturerData = <..。。。。。。。。。。。。。。be 21 01 00 50 08 00 00 5e ..>
UUID - kCBAdvDataManufacturerData数据包包含传感器数据,如下所示:
字节索引8- 11 =压力32位值
字节索引12 - 15 =温度32位值
字节索引16 =电池电量百分比
我完全不知道在Dart中我如何才能实现它
{256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}至
字节索引8- 11 =压力32位值
字节索引12 - 15 =温度32位值
字节索引16 =电池电量百分比
然后以人类可以理解的形式,这里的温度是C,压强,PSI,电池是%。
发布于 2020-08-25 14:59:31
有一个字节列表,因此您可以使用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.14℃?)
电池= 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
94https://stackoverflow.com/questions/63572951
复制相似问题