写在前面
目前我从网上找到的有关BLE心率协议的博文内容良莠不齐,很难让人根据文章内容来全面理解心率服务;此外SIG网站上有关心率服务的文档比较多,内容比较碎,需要读者从多个文档中将需要的内容拼接起来,因此写下这篇博文,相对全面地整理和总结BLE心率协议的相关内容,目的是让读者通过一篇博文就能够基于GATT写出一个心率服务的应用程序。
一、简介
Heart Rate Protocol(心率协议)是一种基于GATT的标准协议,心率收集设备可以通过心率协议从心率传感器收集设备。
在心率协议中,设备有两种角色:Collector和Sensor。Sensor可以测量心率并将数据发送给Collector;Collector可以从Sensor获取心率数据和其它数据。举例说明就是,通常在心率协议中,你的运动手环是Sensor,而你的手机是Collector。
如果要在Sensor设备上使用心率服务(Heart Rate Service),那设备还要同时支持Device Information Service,DIS中必须包含Manufacturer Name String这个characteristic。如果在Collector上使用心率服务,设备只需要支持Heart Rate Service即可。
二、服务配置
HRS
HRS包含以下characteristics:
Heart Rate Measurement
Heart Rate Measurement characteristic被用于发送心率测量数据。它由4个字段组成:
- Flag:顾名思义,是一个标志位,占8个bits。其中每个bit都有自己的含义。
- Heart Rate Value Format bit:这个bit用于声明发送的心率值的数据类型。虽然大部分人的心率都在255 BPM以下,但是心率服务具备支持更高心率值的能力;)。这个bit为0时,Heart Rate Value Format为uint8;为1时,Heart Rate Value Format为uint16;
- Sensor Contact Detected bit:这个bit用于表示传感器是否探测到了接触,即用来表示传感器的佩戴状态。0表示未佩戴,1表示已佩戴;
- Sensor Contact Supported bit:这个bit表示传感器是否支持接触探测功能,或者说是佩戴检测功能。0表示不支持,1表示支持;
- Energy Expended Present bit:这个bit用于表示是否支持能量消耗数据,也就是日常消耗的热量数据。0表示不支持,1表示支持;
- RR-Intervals Present bit:这个bit用于表示是否支持RR-Interval数据。RR-Interval是指心电数据中两个R峰之间的时间间隔。
- Heart Rate Measurement Value:心率测量值,单位为BPM;
- Energy Expended:单位为kilo Joules,千焦耳。由于这个字段的最大值为65535,因此当值超过65535时,应当上传65535给Collector,这样Collector就知道数值已溢出,会重置数据;
- RR-Interval:这个字段是个uint16数组,单位为1/1024秒。旧数据在前,新数据在后。
Body Sensor Location
顾名思义,这个characteristic表示传感器在身体上的佩戴位置,payload为8个bit,在一次连接中,这个characteristic的值应保持不变。
Heart Rate Control Point
这个characteristic用来重置上文提到的Energy Expended字段的值。Collector发送0x01时,可以重置。
三、UUID
- Heart Rate Service:0x180D
- Heart Rate Measurement Characteristic: 0x2A37
- Body Sensor Location:0x2A38
- Heart Rate Control Point:0x2A39
参考资料
Heart Rate Profile 1.0
Heart Rate Service 1.0
Assign Numbers
GATT Specification Supplement