Как извлечь десятичное значение температуры из шестнадцатеричного значения Bluetooth LE (SIG) - PullRequest
0 голосов
/ 22 февраля 2019

Я разрабатываю приложение xamarin android для подключения к Bluetooth-термометру с низким энергопотреблением.Я уже могу подключиться и прочитать его значение.Моя проблема в том, что он в шестнадцатеричном формате, и я не нашел способ извлечь его значение в десятичном (по Цельсию) формате.

Вот несколько примеров показаний:

  • Для 36.0по Цельсию я получил 06-68-01-00-FF-E2-07-03-0A-15-34-00-02
  • Для 36,2 по Цельсию я получил 06-6A-01-00-FF-E2-07-03-0A-14-14-00-02
  • Для 36,8 по Цельсию я получил 06-70-01-00-FF-E2-07-03-0A-14-1B-00-02
  • За 34,6 по Цельсию я получил 06-5A-01-00-FF-E2-07-03-0A-14-1F-00-02

Из того, что я понимаю,это должен быть столбец в 2º выше (шестнадцатеричные значения 68, 6A, 70, 5A).Значения в 10º и 11º «столбцах» швов должны быть связаны со временем измерения (чч-мм).

Как я могу извлечь значение?Есть ли общая формула, которую я могу использовать?Есть ли способ узнать, в каких единицах измерения я могу перевести в градусы Цельсия (если это еще не так)?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

«Моя проблема в том, что он в шестнадцатеричном формате».Я уверен, что вы получите байтовый массив, вы просто прочитаете или распечатаете его в шестнадцатеричном формате.

Чтобы получить что-то полезное, вы должны получить соответствующие данные из исходного байтового массива.

06-68-01-00-FF-E2-07-03-0A-15-34-00-02 составляет [6,104,1,0,255,226,7,3,10,21,52,0,2]

Первый байт (байт [0] = 6 является бит-флагом: 00000110.

бит 0 является наиболее правым = 0, что означает значение измерения температуры в единицах Цельсия. (Если 1Fahrenheit). Бит 1 = 1, означает, что поле «Отметка времени» присутствует, если 0 поле «Отметка времени» отсутствует, бит 2 = 1, означает, что поле «Тип температуры» присутствует, если поле «Тип температуры» отсутствует.

Все остальные битыне относятся к делу, они зарезервированы для будущего использования.

Bites [1] (104) и [2] (1) - это температура FLOAT в градусах Цельсия * 10. Чтобы получить временный множитель, байт [2]на 256 и добавьте байт [1], разделите общее число на 10. результат: 1 * 256 + 104 = 360. Температура 36,0

Укусы 3 и 4 здесь не имеют значения. Обычно они являются частью4-байтовая температура плавает.

Укусы [5] (226) и [6] (7) - это Год как INT16: 7 * 256 + 226 = 2018.

Байт [7] (3) - месяц,0 означает неизвестный, 1 = январь, здесь 3 = март.

Байт [8] (10) - день месяца, здесь 10.

Байт [10] (21) -Час (Количество часов после полуночи), здесь 21.

Байт [11] (52) - Минута, здесь 52.

Байт [12] (0) - Второй,здесь 0.

Байт [13] (2) - это тип температуры, здесь тело (общее).

1 подмышка
2 тело (общее)

3Ухо (обычно мочка уха)

4 пальца

5 желудочно-кишечного тракта

6 Рот

7 Прямая кишка

8 Пальцев

9 Барабанная перепонка (барабанная перепонка)

10 - 255 Зарезервировано для будущего использования

0 Зарезервировано для будущего использования

0 голосов
/ 22 февраля 2019

Спецификация для характеристики температуры может быть найдена здесь: https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.characteristic.temperature_measurement.xml

Таким образом, в основном значение температуры представляет собой число с плавающей запятой, охватывающее 4 байта.

...