3

我正在尝试通过蓝牙读取心率监视器传输的数据,但我真的不知道如何读取心率监视器返回的字节。

可能每个供应商都有自己将数据包装成字节的方式。但是如何将这些字节转换为某种可读格式,以便分析其中的变化?
像 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 
4

3 回答 3

5

希望您的心率监测器遵循此处定义的数据规范:

Bluetooth.org 上的心率测量

据我所知,以下是如何应用该文档中的信息:

  1. 获取第一个十六进制字节 55,并将其转换为二进制:01010101。
  2. 由于蓝牙数据是小端序的,因此将该序列的右端视为第 0 位,将左端视为第 7 位。
  3. 现在您可以查看蓝牙消息的标志字段的文档。标志字段的第 0 位告诉您心率数据是 8 位还是 16 位。在您的情况下,位 0 是 1,因此您有 16 位数据。
  4. 查看第一个示例中接下来的两个十六进制字节:04 00。
  5. 将其转换为十进制。现在这部分我不确定。如果我将 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 question包括进行这些转换的代码,它对我有用。我只是想在实施之前尝试了解文档。

于 2014-03-23T03:20:57.973 回答
1

除非您可以找到有关心率监测器传输规格的文档,否则您将需要分析数据并破译格式。一种方法是在从心率监测器发送的数据中创建受控变化(例如在休息的人和慢跑的人之间交换),然后寻找数据中的差异和模式。

至少,我希望数据包含时间和心率值,但肯定会有其他字段,例如标头、数据包标识符和长度以及校验和值。

于 2012-05-02T21:57:56.653 回答
0

我没有查看您的数据,但是对于我从 ANT 解码的一些监视器,ANT+ 数据流包括节拍之间的毫秒时间以及最后三个节拍的 HR。从一致的 HR 获取数据的建议是最好的起点。然后请记住,您看到的数字可能是从多达三到四拍四舍五入的。

于 2019-06-02T15:58:59.870 回答