Как получить правильное значение температуры из байтового массива - PullRequest
3 голосов
/ 02 апреля 2019

Я пытаюсь создать приложение BLE, в котором я хочу узнать значение температуры с устройства.Я использую устройство Temp Sitter.

У меня есть этот UUID = 0000ffe1-0000-1000-8000-00805f9b34fb.Отсюда я получаю массив байтов.

        // For all other profiles, writes the data formatted in HEX.
        final byte[] data = characteristic.getValue();

        if (data != null && data.length > 0) {
            final StringBuilder stringBuilder = new 
                                               StringBuilder(data.length);
            for(byte byteChar : data)
                stringBuilder.append(String.format("%02X ", byteChar));
            intent.putExtra(EXTRA_DATA, new String(data) + "\n" + 
            stringBuilder.toString());
        }

Вот некоторые шестнадцатеричные результаты: AA 06 11 00 3E 0D 00 62 --- AA 06 11 00 43 0D 00 67 --- AA 06 11 0049 0D 00 6D

Может ли кто-нибудь помочь мне, как прочитать точное значение этого массива?

1 Ответ

1 голос
/ 03 апреля 2019

После обратного инжиниринга приложения IRULU / Guangdong Biolight Meditech Temp Sitter оно выглядит так, как если бы сообщение имело следующий формат:

            0      1      2      3      4      5      6      7
        +------+------+------+------+------+------+------+------+
        |Marker|Length|Type  |Subtyp|Low   |High  |Unused|Chksum|
        +------+------+------+------+------+------+------+------+

Example    AA     06     11     00     3E     0D     00     62 

Поля:

  • Маркер : Всегда 0xAA.Маркер используется для разграничения сообщений.Формат сообщения, кажется, предназначен для отправки потока сообщений.0xAA будет означать начало нового сообщения.
  • Длина : длина полезной нагрузки в байтах.Это длина без маркера и без контрольной суммы.
  • Тип : Тип сообщения.0x11 - это сообщения о температуре.Есть также сообщение tpe 0x12, которое кажется интересным (хотя я не понимаю его цели).Приложение игнорирует другие типы сообщений.
  • Подтип : Подтип сообщения.Подтип 0 - это измерения температуры.Подтипы 1 и 2 выглядят как high и low предупреждений / индикаторов.
  • Low : младший байт значения температуры.
  • High : старший байт значения температуры.
  • Unused : кажется, что этот байт не задан и установлен в 0.
  • Контрольная сумма : контрольная сумма полезной нагрузки.Он просто вычисляется путем добавления всех байтов полезной нагрузки (начиная с длина и заканчивая неиспользуемым полем).

Значение температуры сохраняется в0,01 градуса (вероятно, градус Цельсия).Таким образом, чтобы извлечь его, вы вычисляете:

double temperature = ((message[5] & 0xff) * 256 + (message[4] & 0xff)) * 0.01;

В приведенном выше примере результат будет 33,90 ° C.

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