【问题标题】:Flutter ble read weight scale characteristic valueFlutter ble读取体重秤特征值
【发布时间】: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


    【解决方案1】:

    权重服务 0x2A98 的documentation 向您展示了服务的不同字段和特征。

    特征值中包含一个标志字段(用于显示存在 可选字段和测量单位),重量字段,并取决于 Flags 字段的内容,可以包括 2 中定义的一个或多个可选字段。

    第 3.2 章描述了这些字段:

    1. 标志字段
    2. 权重字段
    3. 时间戳字段(可选)
    4. 用户 ID 字段(如果设置了标志,则包括)
    5. BMI 和高度场对(如果设置了标志,则包括)

    根据这些信息,我们可以假设您收到的 3 个字节是标志字段和权重字段。

    标志字段设置为 1 或十六进制的0x01,这意味着仅设置了第一位。根据文档,第一位描述了测量单位。值 1 表示测量单位设置为英制。

    您收到的第二个和第三个字节包含作为 uint16 的权重,分为两个字节。我们必须弄清楚值的字节顺序(字节序)。我们可以使用hex to integer converter

    您收到的两个值(48 和 22)可以用十六进制表示为 0x300x16。根据哪个值先出现,如果我们将它们合并在一起,我们会得到不同的值:

    0x3016 -> 12310
    0x1630 -> 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;
    }
    

    【讨论】:

    • 谢谢,这正是我想要的,感谢您花时间详细解释链接:)
    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2016-07-26
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多