BLE температурные характеристики c конверсия - PullRequest
0 голосов
/ 04 мая 2020

У меня есть приложение BLE, работающее на nrf51822 на Zephyr. Приложение считывает данные с датчика влажности и температуры и выставляет характеристики окружающей среды c. Главное выставленное значение - температура (uuid: 2A6E).

У меня проблемы с чтением этих данных через Bluez на linux. С приложением nrfConnect все работает без проблем - я подключаюсь к устройству и вижу показания температуры - где-то между 20 и 26 градусами (назначенными указанному uuid).

Через Bluez Я могу подключиться и прочитать характеристики c, но значения не имеют для меня никакого смысла. Вот мой рабочий процесс:

$ 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, но я не могу понять, как это может мне помочь. Так или иначе, приложение Nordi c может иметь смысл, и я бы тоже хотел это сделать.

1 Ответ

1 голос
/ 04 мая 2020

Измерение температуры выполняется по следующим правилам:

  • в формате с прямым порядком байтов, поэтому сначала нужно переключить его на значение 0x092e

  • вы конвертируете это в десятичное число, и вы получите (9x256 + 2x16 + 14) = 2350

  • , тогда значение имеет подразумеваемый десятичный показатель степени -2, что означает, что вы берете значение и делите на 100

Это означает, что значение, считываемое в этом случае, составляет 23.50 по Цельсию

...