关于ble服务中 Characteristics Battery Level Status (0x2BED) 的使用

1.需求汇总

新项目客户要求对电量状态进行上报,需要包括三项、电量百分比(0-100%)、充电状态(充电中/未充电)、低电量警告。

但是平时常用的只有电池服务中的电流百分比特征 Battery Level (0x2A19),没办法用它来上报另外两项,只能去翻翻蓝牙规范有没有能用的其他服务。

2.服务说明

在蓝牙核心规范(现版本为6.2)中没找到相关项,里面只提到了Battery Level,在扩展文档中倒是找到了可以使用的特征Battery Level Status (0x2BED)

下面对这个特征结合规范文档进行说明

结合 Bluetooth Assigned Numbers可以查到Battery Level Status的UUID为0x2BED

image

 

在gatt规范补充中可以查到他的具体数据位定义

image

 接下来分析一下除了 Addition Status(备用,用来以后扩展)之外的几个数据段

Flags:

image

 前三个自己用来表示使用哪几个数据段

  Bit 0:标识符存在

  Bit 1: 电量百分比存在,和0x2A19特征相同,故使用这个特征即可以不使用0x2A19

  Bit 2: 扩展数据段存在

剩下几个字节暂时没用到

Identifier Present:

  标识符,多电池时使用,可以给每个特征中添加标识符来区分是哪块电池

Power State field:

image

   Bit 0 : 电池是否存在 ,0不存在、1存在

   Bit 1 ~Bit 2: 有线充电是否连接 ,0未连接、1连接、2未知

   Bit 3 ~Bit 4: 无线充电是否连接 ,0未连接、1连接、2未知 

   Bit 5 ~Bit 6:充电状态,0未知、1正在充电、2放电活跃、3放电不活跃

   Bit 7 ~Bit 8:  电量等级,0未知、1良好、2低电量、3严重低电量

   Bit 9 ~Bit 11: 充电阶段/模式,0未知或未充电、1恒流充电(快速充电)、2恒压充电(充满电)、3涓流充电(快充满时低电量充电)、4浮空

  Bit 12 ~Bit 14:充电故障原因,0电池故障、1充电器故障、2其他

   Bit15 : 保留

3.数据格式汇总

综上,我们要使用时只需要配置flags为 0x02(只使用电量百分比)

充电时Power State数据为1 01 00 01 00 001 000 0(二进制) = 0xA210

充满时Power State数据为1 01 00 01 00 010 000 0(二进制) = 0xA220

停止充电Power State数据为 1 00 00 10 00 000 000 0(二进制)= 0x8200

而是否低功耗可以通过改变其中的 Bit7和Bit8

Battery Level Present 为电量百分比的16进制数据

这便是通过 Battery Level Status (0x2BED)来实现电量百分比(0-100%)、充电状态(充电中/未充电)、低电量警告三个数据的上报,当然里面不止包括这些信息还有其他数据。

虽然此项目主机也为自定义的蓝牙主机设备,通过自定义服务来实现也是可行的,但是还是使用现有的标准协议更为妥当。

参考文档:

https://www.bluetooth.com/specifications/specs/bas-1-1/  蓝牙电池服务规范

https://www.bluetooth.com/specifications/specs/gatt-specification-supplement/  gatt规范补充

https://www.bluetooth.com/wp-content/uploads/Files/Specification/Assigned_Numbers.pdf  UUID分配文档 Bluetooth Assigned Numbers

 

什么,文档格式不规范?随便写写而已能看就行 :>

太久没写文档了,有时间把代码实现和测试流程也补上

posted on 2026-01-28 18:05  foorun  阅读(1)  评论(0)    收藏  举报