小米手环2历史活动数据解析及命令执行相关疑问
小米手环2历史活动数据获取与解析问题
我结合你给出的操作步骤和日志,来分析下你遇到的问题:
你的操作流程
- 认证成功后,向特征
0004发送命令:\x01\x01\xe2\x07\x05\x03\x11\x2f\x00\x08,其中前两个字节\x01\x01为ACTIVITY_DATA命令,其余8字节是日期时间参数 - 开启特征
0004和0005的通知功能 - 向特征
0004发送\x02(即COMMAND_FETCH_DATA命令)
收到的通知日志
[Log] 39500C00FF500D00FF500D00FF501100FF [Log] 3A501100FF600E00FF600D00FF500600FF [Log] 3B500700FF5A1400FF5A1400FF5A1400FF [Log] 3C5A1400FF501300FF5A1400FF501200FF [Log] 3D500C00FF500600FF501000FF500C00FF [Log] 3E501200FF501600FF500800FF501500FF [Log] 3F500A00FF500900FF5A1400FF501200FF [Log] 02501700FF501700FF [Log] 100201
问题解答
1. 发送的命令是否正确?
从小米手环2的BLE协议细节来看,你的命令流程是对的:
ACTIVITY_DATA命令(0x01 0x01)的格式确实是命令码 + 起始时间戳(4字节) + 结束时间戳(4字节),你发送的8字节参数符合这个结构。需要注意的是小米手环用的是小端字节序,你可以核对下这部分参数是否对应你要查询的时间段。COMMAND_FETCH_DATA命令(0x02)的发送时机没问题——在设置查询范围、开启通知后发送,触发设备返回数据。
2. 数据解析与命令有效性判断
你说文档标注数据应为11字节,但收到的是17字节,这是因为手环的活动数据是分片传输的:
- 每条日志开头的
39、3A、3B...3F是分片序号,用来标识数据块的顺序; - 分片里的
50 xx xx FF是一组活动数据:50是数据类型标记(对应步数/活动量),xx xx是小端字节序的数值,FF是数据组的分隔符; - 最后一条
100201是传输完成的确认帧:02对应你发送的COMMAND_FETCH_DATA命令,01代表请求成功,这直接说明你的命令是有效的,设备已经完整返回了请求的历史数据。
正确的解析步骤:
- 把所有分片数据(除了最后确认帧)拼接起来,去掉分片序号和分隔符
FF; - 每3字节(
50 xx xx)为一组,将xx xx转成小端字节序的十进制数,就是对应时间段的步数/活动数值; - 最后一条
02501700FF501700FF是最后一个数据分片,之后的100201表示数据传输结束。
如果命令错误,设备通常会返回类似10 02 00的错误帧(00代表失败),你收到的100201明确是成功响应,所以你的命令流程完全正确。
内容的提问来源于stack exchange,提问作者Amalina Aziz
相关产品推荐
相关产品推荐

