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

如何从Fireboltt智能手表获取心率数据至Flutter安卓应用

Fireboltt智能手表Flutter BLE数据匹配方案

问题说明

正在开发Flutter应用,目标是从Fireboltt品牌智能手表读取心率、血氧饱和度(SpO2)等健康数据,暂不确定手表搭载的系统类型(WearOS/Tizen/其他),目前基于flutter_ble实现蓝牙通信逻辑,已可通过蓝牙客户端扫描获取设备的服务与特征值列表,但无法匹配各特征值对应的数据类型。
当前扫描获取到的BLE服务示例数据如下:

BluetoothService{uuid: 0000180f-0000-1000-8000-00805f9b34fb, 
deviceId: F9:CE:08:3E:0B:31, 
isPrimary: true, 
characteristics: [BluetoothCharacteristic{
    uuid: 00002a19-0000-1000-8000-00805f9b34fb, 
    deviceId: F9:CE:08:3E:0B:31, 
    serviceUuid: 0000180f-0000-1000-8000-00805f9b34fb, 
    secondaryServiceUuid: null,
    properties: CharacteristicProperties{
        broadcast: false, 
        read: true, 
        writeWithoutResponse: false,
        write: false, 
        notify: true, 
        indicate: false, 
        authenticatedSignedWrites: false, 
        extendedProperties: false, 
        notifyEncryptionRequired: false, 
        indicateEncryptionRequired: false}, 
    descriptors: [BluetoothDescriptor{
        uuid: 00002902-0000-1000-8000-00805f9b34fb, 
        deviceId: F9:CE:08:3E:0B:31, 
        serviceUuid: 0000180f-0000-1000-8000-00805f9b34fb, 
        characteristicUuid: 00002a19-0000-1000-8000-00805f9b34fb, 
        value: []}],
    value: []], 
includedServices: []}

现有数据解析

你当前扫描到的这组是蓝牙SIG标准定义的通用属性,和健康数据无关:

  • 服务UUID 0000180f-0000-1000-8000-00805f9b34fb:电池服务
  • 下属特征UUID 00002a19-0000-1000-8000-00805f9b34fb:电池电量特征,读取/订阅通知拿到的单字节值就是电池剩余百分比,取值范围0-100
  • 特征下的描述符UUID 00002902-0000-1000-8000-00805f9b34fb:标准客户端特征配置描述符(CCCD),作用是开关对应特征的通知推送,属于BLE通用组件。

特征匹配实操方法

1 优先匹配标准BLE属性

所有格式为0000xxxx-0000-1000-8000-00805f9b34fb的UUID都是蓝牙SIG官方定义的标准属性,可直接按编号匹配含义,和你需求相关的常见标准健康属性如下:

  • 心率服务UUID:0000180d-0000-1000-8000-00805f9b34fb,下属心率测量特征UUID为00002a37-0000-1000-8000-00805f9b34fb,订阅通知后即可获取实时心率,解析规则为:第一个字节是标志位,若标志位第0位为0,心率值为第2个字节的Uint8类型数值;若为1,心率值为第2-3字节组成的Uint16类型数值。
  • 血氧服务UUID:00001822-0000-1000-8000-00805f9b34fb,下属SpO2测量特征UUID为00002a5f-0000-1000-8000-00805f9b34fb。

2 厂商自定义属性排查

Fireboltt多数中低端型号搭载自研RTOS系统,既不是WearOS也不是Tizen,部分健康数据会存放在厂商自定义的128位UUID(不符合上述标准UUID格式)服务中,按以下步骤匹配即可:

  • 先导出设备所有服务、特征的UUID、权限列表,把已经识别的标准属性全部排除
  • 对所有支持notify/indicate权限的特征,找到其下属的00002902描述符,写入[0x01, 0x00]开启通知,静止佩戴手表1-2分钟,观察回传数据规律:
    • 数值在60-180区间、每秒左右更新、运动时数值明显升高的单/双字节数据,即为心率数据
    • 数值稳定在90-100区间、变化幅度极小的,即为SpO2数据
  • 做对照校验:在手表端手动触发一次单次心率测量、一次单次血氧测量,观察测量完成时哪个特征主动推送数据,即可精准匹配目标特征。
  • 注意部分厂商会对自定义数据做简单处理,比如固定字节偏移、高低字节调换,只要拿到已知测量值(比如实际心率72)时的原始字节,多做几组对照就能找到换算规则,平价消费级手表基本不会做复杂加密。

3 常见问题处理

  • 同品牌不同型号的BLE协议可能完全不同,不要直接套用其他型号的UUID匹配规则,必须针对当前对接的具体型号做校验
  • 如果开启通知后特征无任何数据回传,先找支持write/writeWithoutResponse权限的特征,逐个发送简单的绑定/鉴权指令测试,部分手表需要完成简易鉴权才会推送健康数据。

内容的提问来源于stack exchange,提问作者Simran Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:18:21