You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Flutter App解析蓝牙BLE数据:解读收缩压数值

BLE血压测量特征数据解析及收缩压127.0 mmHg的验证过程

首先明确,你收到的特征UUID 00002a35-0000-1000-8000-00805f9b34fb 是蓝牙健康设备规范中的血压测量特征,需遵循标准数据结构解析。

一、原始数据拆分

你提供的十六进制数据为:DE-F6-F4-16-F3-FF-07-E4-07-01-14-08-2B-00-B2-F2-01-80-00,共19字节,按规范拆分如下:

  • 标志位(Flags):第1字节 0xDE(二进制 11011110),用于指示后续字段状态:
    • Bit0=0 → 血压单位为mmHg
    • Bit1=1 → 包含时间戳字段
    • Bit2=1 → 包含脉搏率字段
    • Bit3=1 → 包含用户ID字段
    • Bit4=1 → 包含测量状态字段
    • Bits5-7=110 → 血压类型为设备自定义保留值
  • 收缩压:第2-3字节 0xF6、0xF4(2字节SFLOAT格式)
  • 舒张压:第4-5字节 0x16、0xF3(2字节SFLOAT格式)
  • 平均压:第6-7字节 0xFF、0x07(2字节SFLOAT格式)
  • 时间戳:第8-14字节 0xE4-07-01-14-08-2B-00(7字节)
  • 脉搏率:第15-16字节 0xB2、0xF2(2字节SFLOAT格式)
  • 用户ID:第17字节 0x01(1字节)
  • 测量状态:第18-19字节 0x80、0x00(2字节)

二、收缩压127.0 mmHg的计算逻辑

收缩压采用IEEE-11073标准的16位SFLOAT格式,计算规则如下:

  1. SFLOAT由**4位补码指数(E)和12位补码尾数(M)**组成,数值公式为:数值 = M × 10^E
  2. BLE数据默认采用小端字节序(低字节在前,高字节在后),因此需将收缩压的两个字节 0xF6(低字节)、0xF4(高字节)组合为16位值 0xF4F6

对 0xF4F6 拆分计算:

  • 二进制为 1111 0100 1111 0110
  • 高4位 1111 是补码表示的指数E,对应十进制 -1
  • 低12位 010011110110 是补码表示的尾数M,对应十进制 1270
  • 代入公式:1270 × 10^(-1) = 127.0,即收缩压为127.0 mmHg

三、验证计算正确性

反向推导即可证明结果:

  1. 已知目标值127.0 mmHg,按SFLOAT规则拆解:127.0 = 1270 × 10^-1,因此M=1270,E=-1
  2. E=-1的4位补码为 1111,M=1270的12位二进制为 010011110110
  3. 组合为16位值:1111 0100 1111 0110 → 十六进制 0xF4F6
  4. 按小端字节序拆分,得到低字节 0xF6、高字节 0xF4,与原始数据中第2-3字节完全匹配,验证成立

内容的提问来源于stack exchange,提问作者al ice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 19:55:54