Разбор протокола беспроводного термометра Buro H999

В линейке погодных станций Buro (H209G, H127G и др.) используется внешний датчик температуры и влажности H999. На «хабре» есть исследование протокола передачи данных. Ниже — пересказ статьи.

Автор использовал осциллограф для исследования сигнала с выхода сверхрегенеративного приёмника на 433,92 МГц. Нажав кнопку TEST на термометре, было отчётливо видно, как бегут импульсы передачи. Ну а так как частота там небольшая, выход приёмника был подключён к входу звуковой карты через резистивный делитель. После обработки записанного звукового файла компаратором получилась следующая картинка:Как и у других погодных станций модуляция осуществляется изменением скважности. Начинается передача с блока синхросигналов, потом идёт ещё один синхросигнал, а потом идут данные, после которых идёт завершающий синхросигнал. Два ноля после синхросигнала, по-видимому, являются идентификатором начала данных – во всяком случае, я ни разу не заметил их изменения. Данные с начальным и конечным синхросигналом дублируются шесть раз. Обмен данными ведётся нибблами.

Декодировать сигнал автор стал следующим образом: начинать приём по первому синхросигналу и двум нулям, а завершать по последнему синхросигналу. Чтобы такой сигнал декодировать, достаточно посчитать длительности между перепадами сигнала.

После декодирования получился следующий поток данных (два начальных ноля отброшены):

//без кнопки, канал 1
1100 1100 0000 1110 1000 0110 1100 0001 0000 1001 Влажность:28% Температура:25.4
//без кнопки, канал 2
1100 1100 0001 1110 1000 0110 1101 0001 0000 0110 Влажность:29% Температура:25.4

Итого, пакет выглядит так:I0-I7 – идентификатор термометра. При каждом новом включении термометра идентификатор меняется.

C0-C1 — канал (всего их возможно 3). Каналы нумеруются с нуля.

H0-H7 — влажность. Влажность в процентах считывается как есть, а вот температура (T0-T11) почему-то задана в необычном для метеостанций формате. Cтанция передаёт температуру в десятых долях градусов Фаренгейта, поэтому осмысленный перевод в градусы Цельсия будет 0.1*(T-320)*5/9-500=0.1*(T-1220)/1.8.

Бит K соответствует нажатию на кнопку TEST.

Последним нибблом является CRC. Скорей всего CRC — просто арифметическая сумма всех байтов в посылке.

PS. По статье была довольно оживленная дискуссия, в ходе которой было много умных и полезных высказываний — рекомендую обратиться к первоисточнику

Разбор протокола беспроводного термометра Buro H999: 1 комментарий

Добавить комментарий