如何从Fireboltt蓝牙智能手表获取步数数据
Fireboltt蓝牙智能手表步数、体温数据接入实现方案
你已经跑通心率、电池、血氧的读取,说明BLE连接链路、基础通知订阅逻辑没有问题,故障点集中在厂商自定义特征匹配、同步触发逻辑、私有协议解析三个方向,按下面的步骤走基本都能解决:
- 先抓官方APP通信包定位正确的特征值,不要硬套网上公开的通用UUID
Fireboltt的步数、体温属于厂商自定义服务,没有用蓝牙SIG公布的标准特征UUID,不同固件版本的UUID还会有偏移,瞎试效率极低:- 断开自有APP和手表的连接,确保手表仅和官方Fireboltt APP配对连接
- 用安卓端nRF Connect、iOS端LightBlue的BLE抓包功能过滤对应手表的流量,分别手动操作:在手表端切到步数页、在官方APP手动触发一次全量步数同步;再手动触发一次手表体温测量、等官方APP刷新出体温数值
- 把两个操作时段内,出现写入操作、同步返回通知的特征值记录下来,就是步数、体温对应的读写/通知特征。
注意:Fireboltt全系列的步数都不是像心率那样定时主动上报,必须先向对应写特征发同步触发指令,手表才会回传步数数据包,只开通知不发触发指令永远拿不到数据。
- 对齐私有协议的指令、解析规则
读不到数据、数据异常90%是套了通用BLE解析逻辑,没适配Fireboltt的私有帧结构:- 触发指令直接抄抓包里的原字节,别自己按通用协议拼。Fireboltt的指令基本都是固定帧头+功能码+校验位的结构,比如常见的步数同步触发帧是
0xAA 0x05 0x01 0x01 0xAF,体温测量触发帧带测量时长参数,原封不动把抓来的字节写入对应特征就行,自己算校验位很容易算错。 - 返回的数据包不要直接全量转数值,按帧结构拆:一般前2字节是固定帧头,第3字节是功能码(区分当前包是步数还是体温数据),中间段是有效数据,最后1字节是和校验。步数一般是数据段前3-4字节按小端序拼接的整数值,单位为步;体温是对应位置字节转整数后除以10,单位为摄氏度,部分型号会同时返回体表温、核心温两个值,注意别读错位。
快速校准方法:抓包前手动走50-100步,对比官方APP显示的步数数值反推对应字节位置,比找零散的第三方文档准得多。
- 触发指令直接抄抓包里的原字节,别自己按通用协议拼。Fireboltt的指令基本都是固定帧头+功能码+校验位的结构,比如常见的步数同步触发帧是
- 处理兼容类异常
- 订阅通知的时候先确认特征属性带
PROPERTY_NOTIFY,别忘了往特征对应的客户端配置描述符(CCC)写入0x0001打开通知开关,不然手表不会往通道推数据。 - 部分老款Fireboltt型号没有单独的体温特征,体温数据是塞在你已经打通的血氧/心率综合健康数据包里的,一般在血氧字段后偏移2字节的位置,不用单独找新的服务特征。
- 订阅通知的时候先确认特征属性带
快速排障技巧:直接在nRF Connect里手动给找到的疑似步数特征发送抓包拿到的触发指令,如果能收到连续返回的字节数组,说明特征找对了,剩下的只是字节解析问题;如果发完没任何返回,要么是特征找错了,要么是指令校验不对,直接换特征、抄抓包原指令就行。
内容的提问来源于stack exchange,提问作者Simran Sharma
相关产品推荐
相关产品推荐

