如何解决如何从BLE制造商数据波动中获得所需值
我是扑朔迷离的新手,并且正在开发一个从BLE信标读取数据的应用程序。我已经扫描了设备,并获得了type names = 'Ram' | 'Shyam' | 'Paul' | null;
let name: names = null;
设备制造商告诉我输入设备数据,例如:
KCBAdvDataManufacturerData = <.............. be ..>
UUID-kCBAdvDataManufacturerData数据包包含传感器数据,如下所示:
字节索引8 – 11 =压力32位值
字节索引12 – 15 =温度32位值
字节索引16 =电池电量百分比
我完全不知道在Dart中如何从中实现
{256:[0,16,1,57,33,18,154,10,94,0]}
到
字节索引8 – 11 =压力32位值
字节索引12 – 15 =温度32位值
字节索引16 =电池电量百分比
然后 以人类可理解的形式 这里的温度以PSI为单位的C压力,电池以%为单位。
解决方法
有一个字节列表,因此您可以使用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] = 4641(您期望值约为46.41psi吗?)
温度= [154,10,0] = 2714(您期望值约为27.14c吗?)
电池= [94] = 94(您期望值94%吗?)
这可以通过以下方式完成:
import 'dart:typed_data';
var manufacturerData = Uint8List.fromList([0,16,1,57,33,154,94,0]);
var pressure = ByteData.sublistView(manufacturerData,6,10);
var temperature = ByteData.sublistView(manufacturerData,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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。