概述
用于健身应用的心率传感器
主要是两个关键的标准文件
心率profile定义
心率service定义
prifile是总的:描述要实现心率测量,需要定义两个角色(一个收,一个发)。每个角色要定义什么服务。角色之间是怎么建立连接的,还有安全要求。(这一部分通常有例程,关心的较少)
service是分的,讲了怎么表示心率数据。心率服务的数据包含的特征。(一般后面代码用到这一份标准多。)
所以下面的内容,也是会先profile一个章节,然后service一个章节。
我当期看的版本是2011-07-12
heart rate profile
- 角色:定义了心率传感器角色(测量心率)和收集器角色(从心率传感器收集信息)。
- 从上图可以看出,心率传感器角色(Heart Rate Sensor)实现了两个服务,收集器是访问这些服务。
- 一个设备可以实现多个心率传感器服务。
- 规定了中央设备实现Collector,且为GATT客户端
- 固定了外围设备实现Heart Rate Sensor,且为GATT服务端。
profile要求
心率传感器角色的profile要求:
这两个服务必须- 在广播包里必须加入Heart Rate Service UUID (0x180D)。
- 在广播数据和扫描响应数据包含本地名(Local Name)。(我猜应该是传感器编号或位置的名字。)
- 可选支持修改设备名的功能。
- 在广播数据包中增加厂家自定义字符串,这个好像是医疗器械的规定,具体没详细研究。
收集器的profile要求:
收集器需要具备如下能力
心率传感器是被动的角色,他只会采集数据。具体的获取数据和设置的过程,都是有收集器角色来发起。
-除了上面要求的需求外,还有下面的Sub-procedure需求也要根据情况来满足Sub-Procedure:为了确保兼容性和互操作性,BLE协议定义了一系列的GATT(Generic Attribute Profile)子程序,用于标准化这一过程。子过程可以理解为命令或功能
- Discover All Primary Services:可以使用两种方式,一个是“发现所有主要服务”,一个是“根据UUID发现服务”
- 特征也是一样,可以使用“发现所有特征”或“根据UUID发现特征”功能。
心率测量
- 收集器要能控制并接受心率通知。
- 收集器根据特征结构体里面的Flag字段,确定心率值的格式,是否存在能量字段,是否存在RR-Interval。
- 可能包含收集Energy Expended 和RR-Interval值
RR-Interval(RR间期)在心率监测和心电图(ECG)领域中,指的是连续两个R波峰之间的时间间隔。在心电图上,R波是心室收缩期间产生的一种特征波形,通常代表心脏搏动中最大的电活动。因此,RR间期是衡量心率的一个关键指标,它可以反映心跳的速率和规律性。
Energy Expended(消耗能量)在心率监测和健康跟踪设备领域中,通常指的是在特定活动期间或在某个时间段内消耗的卡路里数。这个概念被用于健身和健康追踪设备中,以帮助用户了解和记录他们在运动或日常活动中的能量消耗。
传感器位置定位
- 通常这个特征是静态的常量值,让收集器可以知道这个数值是从身体的哪个部位测量到的心率。
设备Control Point
- Control Point就是可以提供按钮,控制某个功能。
- 文档定义了一个Control Point。在有能量消耗功能时,需要提供能量消耗复位功能。
连接建立过程
- 收集器和心率传感器连接建立的过程。
这部分的内容,会按照两种角色(传感器角色和收集器角色)分开讲。不同的角色还分绑定设备、没有绑定设备、连接丢失重连等3个过程。
整体的过程:
- 心率传感器一旦被配置,其会根据是否有接触身体来开关机。
- 没有接触身体后,心率传感器会自动结束连接,并关机。
心率传感器的连接建立过程:
1. 心率传感器角色没有绑定设备时:
- 使用 GAP 通用可发现模式和可连接的非定向广告事件。
- 广播的连接参数也给了建议
- 如果创建了绑定,则心率传感器应将收集器的蓝牙设备地址写入心率传感器控制器的白名单,并将心率传感器控制器的广告过滤策略设置为“仅处理来自白名单设备的扫描和连接请求” 列表。
- 当心率传感器不再与皮肤接触或在几秒钟内(例如 10 到 20 秒)不再感知心率活动时,心率传感器应执行 GAP 终止连接程序
2. 绑定后的心率传感器
- 心率传感器应使用GAP通用可发现模式,并在建立连接时采用可连接的非定向广播事件。
- 在前10秒内,应使用仅包含已配对设备地址的白名单,以允许只有活跃的已配对收集器建立连接。之后,不应再使用白名单,以便与其他收集器建立连接。
3. 连接丢失后的重连
- 进入GAP可连接模式,重新与收集器连接
收集器的连接建立过程:
1. 收集器角色没有绑定设备时:
- 收集器应使用GAP通用发现过程来发现心率传感器。
- 推荐的扫描时间参数
2. 绑定后的收集器角色
根据其连接需求,收集器可以使用以下GAP连接程序之一: - 通用连接建立程序:当收集器需要一个或多个心率传感器的测量数据时,可以使用此程序。此程序允许收集器在扫描过程中发现心率传感器并与之连接,而不使用白名单。
- 直接连接建立程序:当收集器需要单个心率传感器的测量数据时,可以使用此程序。
- 自动连接建立程序:当收集器需要一个或多个心率传感器的测量数据时,可以使用此程序。此程序将自动连接到白名单中的心率传感器。
- 选择性连接建立程序:当收集器需要一个或多个心率传感器的测量数据时,可以使用此程序。此程序允许收集器在扫描过程中发现心率传感器并与之连接,同时使用白名单。
心率服务–heart rate service
- 心率服务公开心率和其他与用于健身应用的心率传感器相关的数据
心率服务主要是定义属性,因此需要强制实现如下这些Sub-Procedure
另外次标准定义了错误码,知道有这个值就行。
Heart rate服务的UUID:0x180D
服务需要具有的属性
Heart Rate Measurement属性
- 这个属性的长度可能是可变的。
- 属性第一字节是Flags。标记是否存在可选字段和支持的功能
- 属性第二字节为心率测量数值。
- 属性后续字节:RR-Interval字段是可变长度的,对于一个23字节的ATT_MTU,根据心率测量值格式以及是否包含能量消耗字段,它可以包含0个或多达8个或9个RR-Interval子字段。
Flag字段(一共8个bit)各个bit的含义:
- bit0:心率数值是8位还是16位
- bit1和bit2:是否支持接触检测,bit2表示是否支持,bit1表示接触状态。
- bit3:是否支持能量消耗检测
- bit4:是否支持RR间隔检测
- 其他bit:保留,恒为0.
各数值字段的含义
心率数值:如果要测量的心率小于255bpm,则使用8位就行,也能达到省电的目的。
能量消耗:单位是kilo Joules千焦耳。最大能表示65535千焦耳。
RR-interval:因为RR间隔是每个心脏跳动的时间间隔,且这个间隔可能不一样。因此每一次心率数据传输,都会包含多个RR-interval数值。那具体一次能最多传多少个RR-INTERVAL。受ATT-MTU和其他心率数据所占字节约束。在标准里有举例。可以详细研究下。
心率值传输间隔
- 在典型应用中,心率测量特性大约每秒被通知一次,包括心率测量值字段,以及如果支持的话,还包括RR-Interval字段。如果支持,能量消耗字段通常大约每10秒被包含在心率测量特性中传输一次。这些间隔可能会变化,由服务器决定,客户端无法配置。