【问题标题】:unable to read heart rate service over Bluetooth无法通过蓝牙读取心率服务
【发布时间】:2022-12-11 03:06:08
【问题描述】:

我想创建一个简单的 python 脚本,通过蓝牙从 Polar 传感器读取心率数据。我已经阅读了很多其他帖子,但找不到我能够成功执行的简单内容。

我有 Polar 可穿戴设备的设备 MAC 地址。我知道我想要读取的值的服务 UUID(HR 为 0x180D)。我不太关心我使用的是哪个图书馆或服务,但我似乎无法让它发挥作用。

我能够让我的脚本成功识别 Polar 传感器,但是,我不知道如何从中读取值。我已经为我的手机下载了一个蓝牙扫描仪应用程序,它能够成功连接并读取值,所以我知道这应该很容易做到,但不知道如何写这个。

任何帮助将不胜感激。

【问题讨论】:

  • 请提供足够的代码,以便其他人可以更好地理解或重现问题。
  • 您使用的是哪个平台?你在写什么代码?

标签: python bluetooth bluetooth-lowenergy sensors heartrate


【解决方案1】:

如果您查看Bluetooth assigned 16-bit UUIDs numbers,那么您认为0x180D 是心率服务是正确的

心率测量特性 0x2A37 将具有您正在寻找的值:

我没有用于测试此功能的设备,而且我不知道您正在为哪个平台编写代码。

因此,我使用了bleak 库,因为它是最跨平台的库。

该示例还订阅了来自设备的通知,而不是读取值。这是获取定期更新的值的更典型方法。

import asyncio
import bitstruct
import struct

from bleak import BleakClient


HR_MEAS = "00002A37-0000-1000-8000-00805F9B34FB"


async def run(address, debug=False):

    async with BleakClient(address) as client:
        connected = await client.is_connected()
        print("Connected: {0}".format(connected))

        def hr_val_handler(sender, data):
            """Simple notification handler for Heart Rate Measurement."""
            print("HR Measurement raw = {0}: {1}".format(sender, data))
            (hr_fmt,
             snsr_detect,
             snsr_cntct_spprtd,
             nrg_expnd,
             rr_int) = bitstruct.unpack("b1b1b1b1b1<", data)
            if hr_fmt:
                hr_val, = struct.unpack_from("<H", data, 1)
            else:
                hr_val, = struct.unpack_from("<B", data, 1)
            print(f"HR Value: {hr_val}")

        await client.start_notify(HR_MEAS, hr_val_handler)

        while await client.is_connected():
            await asyncio.sleep(1)


if __name__ == "__main__":
    address = ("xx:xx:xx:xx:xx:xx")  # Change to address of device
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run(address))

您可以阅读更多有关心率测量值构建于:

https://www.bluetooth.com/specifications/specs/gatt-specification-supplement-6/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多