在 Flutter 中解码心率和步数等自定义 BLE 服务数据

问题描述 投票:0回答:1

我正在开发一个涉及蓝牙低功耗设备(小米智能手表)的 Flutter 项目,并且我正在使用 flutter_blue 包。我的目标是从此设备中检索与健康相关的数据,特别是心率和步数。但是,它不遵守标准蓝牙 GATT 配置文件,而是使用自定义服务和特征。我已成功连接到设备并访问其中一项自定义服务。根据特征之一,我收到以下字节数组:

[8, 0, 0, 0, 0, 0, 1, 7, 125, 99, 193, 62, 88, 43, 0, 81, 120, 75, 37, 76]

我正在努力解释这些数据。我的目标是从设备自定义服务提供的此字节数组或类似字节数组中识别并提取有意义的信息,例如心率和步数。 到目前为止,我已经尝试了以下方法但没有取得太大成功:

  • ASCII 转换
  • Base64 编码

我正在寻找有关如何解码和理解这些数据的指导或建议。即使在定制服务中,此类健康相关数据的 BLE 通信是否存在常见模式或结构?如何解决这个问题以提取有意义的健康数据,例如心率和步数?

flutter bluetooth-lowenergy
1个回答
0
投票

不幸的是,没有任何通用模式或结构可用于解码数据,最终完全取决于制造商如何在其自定义 BLE 服务/特性中格式化数据。如果您想解码这些数据,最好的办法是联系小米并询问他们。如果这没有产生任何结果,那么您必须自己进行逆向工程。我首先尝试将手表显示的内容与您通过 BLE 读取的数据进行匹配。例如,如果您的步数为 100,请在 BLE 数据中查找值 100(十六进制为 0x64)。然后再多走一步,得到步数为101,然后在数据中寻找0x65,以此类推。您需要对心率执行类似的操作,必须不断将手表上的读数与您收到的数据进行匹配。当然,这都是假设数据以明文形式发送且未加密。

已经尝试以最佳方式读取小米数据,所以也许下面的这些链接会有所帮助:-

© www.soinside.com 2019 - 2024. All rights reserved.