【发布时间】:2021-07-03 05:23:39
【问题描述】:
我是 Flutter 新手,我正在尝试连接到 A&D ble 体重秤并获取体重数据,从服务 00002a9d-0000-1000-8000-00805f9b34fb 我得到值 [1, 48, 22]我正在使用flutter_blue库,重量值为56.8磅,如何将其转换为数组值到实际重量值。TIA
【问题讨论】:
标签: flutter dart bluetooth-lowenergy
我是 Flutter 新手,我正在尝试连接到 A&D ble 体重秤并获取体重数据,从服务 00002a9d-0000-1000-8000-00805f9b34fb 我得到值 [1, 48, 22]我正在使用flutter_blue库,重量值为56.8磅,如何将其转换为数组值到实际重量值。TIA
【问题讨论】:
标签: flutter dart bluetooth-lowenergy
权重服务 0x2A98 的documentation 向您展示了服务的不同字段和特征。
特征值中包含一个标志字段(用于显示存在 可选字段和测量单位),重量字段,并取决于 Flags 字段的内容,可以包括 2 中定义的一个或多个可选字段。
第 3.2 章描述了这些字段:
根据这些信息,我们可以假设您收到的 3 个字节是标志字段和权重字段。
标志字段设置为 1 或十六进制的0x01,这意味着仅设置了第一位。根据文档,第一位描述了测量单位。值 1 表示测量单位设置为英制。
您收到的第二个和第三个字节包含作为 uint16 的权重,分为两个字节。我们必须弄清楚值的字节顺序(字节序)。我们可以使用hex to integer converter:
您收到的两个值(48 和 22)可以用十六进制表示为 0x30 和 0x16。根据哪个值先出现,如果我们将它们合并在一起,我们会得到不同的值:
0x3016 -> 123100x1630 -> 5680
由于您测量的重量为 56.8 磅,我们现在知道订单 0x1630 代表小数点后两位数的正确值。
您可以像这样从列表中提取正确的值:
void main() {
List<int> received = [1,48,22];
// Get the weight value from the list starting at index 1
print(getWeight(received, 1));
}
double getWeight(List<int> data, index) {
return (( 0xff & data[index + 1] ) << 8 | ( 0xff & data[index] ) << 0 ) / 100;
}
【讨论】: