对于一个项目,我目前正试图通过蓝牙le从传感器(Polar OH1)获取一些心脏相关数据(ppg)。 传感器制造商使用的服务没有很好的记录。现在,在读取服务的特征值时,我得到了大量字节数据:
'''\r\xb1\x1aQ\xb4x\xa3C\x83\xdcv\xd3Q\x12\xbdJ\x7f\x82\xbf\x06\x91s\x07\xb7\xb4\xd5\xa59\xf1\xf8\x8e\xabeF@2\xe0\x10\xcb{\xe5\xfd\x8dC\x10f\x8ca\xe6\x98\xb2\xf9I\xaa\xb7\xff\xe3\xab\x13'\x03J\xd4\xb5*/…'''
不幸的是,用utf-8、utf-16(le、be)或utf-32解码这些数据不起作用。 我怎样才能发现如何解码这个神秘的混乱?因为这是我第一次使用蓝牙Le,我真的被卡住了
我在Linux(Ubuntu)上使用Python3
致意
对于特征中的可编辑数据,一个特征中通常有多个字段。例如,官方心率测量特征可以是8个八位字节长,并且在一个特征中包含标志、HRM值、能量消耗和RR间隔字段
如果使用蓝牙标准进行心率测量,则特征UUID将为00002A37-0000-1000-8000-00805F9B34FB。官方UUID通常被缩短为16位值,因此对于这一点,它应该是0x2A37
您可以阅读16-bit UUID Numbers Document中的值。另一个有用的文档是GATT Specification Supplement,它指定了值在官方特征中的表示方式
如果制造商使用了自定义特性,这些文件几乎没有帮助。自定义特性由UUID值表示,UUID值不在0000xxxx-0000-1000-8000-00805F9B34FB范围内
要浏览数据,使用通用的蓝牙低能扫描和浏览工具(如nRF Connect)通常是有帮助的
在Python中,如果将二进制值拆分为一个列表,其中每个项表示一个八位字节,则二进制值通常更容易理解。例如:
另一件需要注意的事情是,在八位字节和整数之间转换时
int
类型具有方法from_bytes
和to_bytes
。例如,如果我们知道一个值的类型为sint16
,那么它是有符号的,并且取2个八位字节。另一件需要注意的事情是,BLE数据通常采用little endian格式尝试使用cp1250编码。我认为你的字节数据不兼容,你应该先整理一下
相关问题 更多 >
编程相关推荐