首页 > 解决方案 > BLE温度特性转换

问题描述

我在 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

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

标签: bluetoothbluetooth-lowenergybluezgatt

解决方案


温度测量遵循以下规则:

  • 它是小端格式,因此您首先需要将其切换为读取为 0x092e

  • 你把它转换成十进制,你得到 (9x256+2x16+14) = 2350

  • 那么该值的隐含十进制指数为 -2,这意味着您取该值并除以 100

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


推荐阅读