我正在尝试读取心率监测器通过蓝牙传输的数据,但我真的不知道如何读取心率监测器返回的字节。
每个供应商可能都有自己的将数据包装成字节的方式。但是,如何将这些字节转换为某种可读的格式,以便我可以分析其中的变化呢?
如 ASCII 值或一些十六进制值。
我尝试了MyTrack应用程序的代码,但这对我不起作用。
MyTrack 解析心率数据
我正在尝试读取Android中的字节,到目前为止,我正在获取这些数据,但不知道哪个字段代表什么。
55 04 00 38 00 15 af
14 b0 00 38 00 13 b1
55 04 00 38 00 13 b1
55 04 00 38 00 12 b2
希望您的心率监测器遵循此处定义的数据规范:
Bluetooth.org 时的心率测量
据我所知,以下是应用该文档中的信息的方法:
- 取您的第一个十六进制字节 55,并将其转换为二进制:01010101。
- 由于蓝牙数据是小端序,因此将该序列的右端视为位 0,将左端视为位 7。
- 现在,您可以查看蓝牙消息的"标志"字段的文档。标志字段的位 0 告诉您心率数据是 8 位还是 16 位。在您的情况下,位 0 为 1,因此您有 16 位数据。
- 查看第一个示例中接下来的两个十六进制字节:04 00。
- 将其转换为十进制。现在这部分我不确定。如果我将 04 00 转换为十进制,我会得到 1024,所以我一定做错了什么。也许巧合的是,如果我反转这些数字并将 00 40 转换为十进制,我得到 64,对于坐在电脑前的人来说,这可能是一个心率值(我现在是 62(。也许有人可以评论如何解释这部分。
就我而言,使用Wahoo Blue HR,数据返回如下:
14 46 59 03 58 03
将 14 转换为二进制 (00010100( 并查看位 0 (0( 告诉我心率是 8 位,所以我只需要第二个十六进制字节 (46(。将其转换为十进制给我 70。
不幸的是,我不知道如何解释你的第二个样本。第一个十六进制字节 14 表示 8 位值,但这将使心率值 B0 或 176 - 对于坐在电脑前的人来说可能不是一个值。我也不期望单个设备在传输 8 位和 16 位值之间切换,但我想这是可能的。
这个SO问题包括用于进行这些转换的代码,它对我有用。我只是想在实现之前尝试理解文档。
除非您能找到有关心率监测器传输规格的一些文档,否则您将需要分析数据并破译格式。一种方法是在从心率监测器发送的数据中创建受控变化(例如在休息的人和慢跑的人之间交换(,然后查找数据中的差异和模式。
至少,我希望数据由时间和心率值组成,但肯定还有其他字段,例如标头、数据包标识符和长度以及校验和值。
我没有看过你的数据,但是对于我从 ANT 解码的一些显示器,ANT+ 数据流包括节拍之间的毫秒时间以及最后三个节拍的心率。 建议从一致的人力资源部门获取数据是最好的起点。 然后请记住,您看到显示的数字可能是从多达三拍或四拍四舍五入的。