首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Garmin BLE心率监视器--无法通过蓝牙获取HRM数据,我错过了什么?

Garmin BLE心率监视器--无法通过蓝牙获取HRM数据,我错过了什么?
EN

Stack Overflow用户
提问于 2020-03-09 19:31:27
回答 1查看 332关注 0票数 1

借助无品牌蓝牙/ANT+心率监视器,我可以使用gatttool轻松获取人力资源管理数据

代码语言:javascript
复制
<MAC address>> connect
Attempting to connect to <MAC address>
Connection successful
<MAC address>> primary
(...)
<MAC address>> char-desc 0x000c 0x0011
(...)
<MAC address>> char-write-req 0x000f 0100
Characteristic value was written successfully
Notification handle = 0x000e value: 16 34 e4 04 
Notification handle = 0x000e value: 16 34 a5 04 
Notification handle = 0x000e value: 16 33 ea 04 
Notification handle = 0x000e value: 16 33 de 04

有了这个,我发送到处理00002902-0000-1000-8000-00805f9b34fb0x000f,这是我需要发送请求(doc for 0x2902)的地方,并且我从另一个处理(doc for 0x2a37)得到响应。

我已经被我们发送的0100负载搞糊涂了。0x2902的规格说明我们应该发送16位,而0x01000b100000000。这会导致0b0000000100000000还是0b1000000000000000?为什么我们发送的是0x0100而不是0x8000 (即15 01 )?

无论如何,01010010001000都可以工作,但是任何更多的数字都将失败。既然4个十六进制字符是16位,它不应该已经失败了5位吗?无论如何,01工作(通知打开,指示关闭?),02不会导致更新(通知关闭,指示打开?),03工作(通知打开,指示打开?)。我的理解是正确的吗?

我现在带着我的Garmin心率监测器( Garmin HRM Dual)。我可以很好地通过蓝牙连接到它,我可以找到正确的HRM交互句柄(对应于UUID 0x2902的句柄),但当我像以前一样使用gatttool发送char-write-req到句柄时,它会提示值已写入,但什么也没有发生。我尝试了许多值,但什么都没有发生。

我是不是遗漏了什么?在调用HRM句柄之前,是否需要采取任何额外的步骤?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-11-30 15:32:55

您发送的0100在Little Endian中仅为0001。因为BlueZ在写值时使用小端,所以最后一个字节在前面。例如,如果要编写01 02 03,则必须将其编写为030201。这就是为什么01、010、0100和01000都可以工作的原因,因为在所有这些情况下,您都是在编写01。您关于启用02的指示也是正确的,03将启用通知和指示。

至于启用通知和读取HRM数据,请确保您在启用通知之前穿戴了HRM Dual。这样做的原因是,除非检测到实际的心率数据,否则HRM Dual将无法工作。你可以通过你的Android/iOS设备上的nRF连接应用程序连接并尝试读取人力资源管理数据来测试这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60599696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档