BLE温度特性转换

BLE temperature characteristic conversion

我在 Zephyr 上的 nrf51822 上有一个 BLE 应用 运行。应用程序正在从湿度和温度传感器读取数据并暴露环境传感特性。 主要暴露值是温度(uuid:2A6E)。

我在 linux 上通过 Bluez 读取此数据时遇到问题。使用 nrfConnect 应用程序一切正常 - 我连接到设备并可以看到温度读数 - 某处 在 20 到 26 度之间(分配给所述 uuid)。

通过 Bluez,我可以连接并读取特征句柄,但这些值对我来说没有任何意义。这是我的工作流程:

$ sudo gatttool -t random -b <ADDR> -I
$ [<ADDR>][LE]> connect
$ Attempting to connect to <ADDR>
$ Connection successful
$ [<ADDR>][LE]> char-desc
# there are a lot of other chars here, I list the one that interests me 
$ handle: 0x0017, uuid: 00002a6e-0000-1000-8000-00805f9b34fb
$ [<ADDR>][LE]> char-read-hnd 0x17
$ Characteristic value/descriptor: 2e 09

所以我得到了这个值,但我无法以我所知道的任何方式将其转换为有意义的东西。我熟悉这份文件: temperature xml 但我不知道这对我有什么帮助。不知何故 Nordic 的应用程序可以从中理解,我也想这样做。

温度测量遵循以下规则:

  • 它是little endian格式所以你首先需要把它改成0x092e

  • 将其转换为十进制,得到 (9x256+2x16+14) = 2350

  • 则该值的隐含十进制指数为 -2,这意味着您将该值除以 100

这意味着在这种情况下读取的值为 23.50 摄氏度