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

如何获取Polar H10传感器心率数据请求所需的正确UUID

Polar H10心率(PPI)数据读取解决方案

核心混淆点澄清

你之前混淆了两个完全不同的概念:

  • 蓝牙联盟规定的通用心率服务UUID 0000180D-0000-1000-8000-00805f9b34fb 是合法可用的,不需要转换为字节数组作为请求参数
  • 你参考的加速度/ECG示例走的是Polar私有PMD(Polar Measurement Data)通道,才需要往PMD_CONTROL特征写入特定格式的字节数组启动数据流,标准心率数据不需要走这个通道

推荐实现方案(新手友好,无需处理私有协议)

直接使用标准BLE心率服务即可同时获取心率值和PPI(RR间隔)数据,步骤如下:

  1. 定义相关UUID常量
# 标准心率服务UUID
HR_SERVICE_UUID = "0000180d-0000-1000-8000-00805f9b34fb"
# 心率测量特征UUID
HR_MEASUREMENT_CHAR_UUID = "00002a37-0000-1000-8000-00805f9b34fb"
  1. 编写数据解析回调函数
def hr_data_callback(sender, data):
    # 解析心率值:第0字节第0位标记心率格式 0=8位 1=16位,单位均为bpm
    flag = data[0]
    bpm = data[1] if (flag & 0x01) == 0 else int.from_bytes(data[1:3], byteorder='little')
    # 解析RR间隔(即PPI,单位1/1024秒):第0字节第4位标记是否带RR间隔
    rr_list = []
    if (flag & 0x10) != 0:
        offset = 2 if (flag & 0x01) == 0 else 3
        for i in range(offset, len(data), 2):
            rr_raw = int.from_bytes(data[i:i+2], byteorder='little')
            rr_list.append(round(rr_raw / 1024, 4))
    print(f"当前心率:{bpm} BPM,PPI间隔:{rr_list} s")
  1. 替换原有启动流的代码
    删除原有PMD控制写入、ECG流启动的代码,直接启动心率特征通知即可:
await client.start_notify(HR_MEASUREMENT_CHAR_UUID, hr_data_callback)

可选方案:走PMD通道获取心率

如果你需要同时采集心率和ECG、加速度等PMD数据做时间同步,可使用PMD通道的心率请求字节数组:

HR_PMD_REQUEST = bytearray([0x02, 0x01, 0x00, 0x01, 0x82, 0x00, 0x01, 0x01, 0x0E, 0x00])

将原有代码中的ECG_WRITE替换为上述字节数组,写入PMD_CONTROL特征后监听PMD_DATA特征通知,再按照你提供的PMD心率数据格式解析即可。

UUID使用补充说明

你找到的16位UUID官方文档是正确的,通用蓝牙服务/特征的16位UUID补全规则为 0000XXXX-0000-1000-8000-00805f9b34fb,将XXXX替换为文档中的16位十六进制值即可直接作为字符串使用,无需转换为字节数组。

内容的提问来源于stack exchange,提问作者Manolo Viso Romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:54:04