Реверс-инжиниринг протокола датчика метеостанции TFA Spring

в 6:39, , рубрики: stm32, TFA, метеостанция, программирование микроконтроллеров, реверс-инжиниринг

Не так давно TFA выпустила довольно симпатичную метеостанцию TFA Spring с сенсором температуры-влажности 30.3206.02. При желании использовать сенсор в собственных разработках, например, в самодельных часах/метеостанции, может помочь эта статья.

image

Так как метеостанция относительно новая, и Google не дает результатов по поиску протокола данного датчика, подсоединяем приемник 433 MHz к осциллографу, осциллограф к компьютеру и начинаем исследовать протокол.

По осциллографу видно, что датчик раз в 50 секунд передает 12 одинаковых пакетов, разделенных более широкими синхроимпульсами, хорошо заметными на осциллограмме:

image

image

Период синхроимпульсов ~ 1700 uSec, период следования импульсов данных ~ 700 uSec.
Информация передается скважностью — короткий импульс означает 0, длинный 1.

image

В разных пакетах скважность меняется (но период импульсов данных постоянный ~ 700 uSec), поэтому для устойчивого декодирования полезно взять 8 первых бит пакета, взять среднюю длительность импульса, и считать, что если в пределах одного пакета импульс короче — это 0, длиннее — 1.

Пакеты данных разделяются 4 более широкими синхроимпульсами. Посылку замыкают 2 синхроимпульса, за которыми следует продолжительный период молчания. Про начало сказать трудно, потому что первые импульсы смазаны АРУ приемника.

Вооружаемся написанной на C# утилитой для анализа осциллограмм, данные с датчика отображаются на оригинальной метеостанции, и ищем закономерности для разных замеров температуры/влажности.

В результате получается следующее расположение данных в идентичных пакетах длиной 40 bit каждый:

image

В конце пакета, по видимому, передается контрольная сумма, но угадать алгоритм ее вычисления проблематично. Поэтому если принято 3 и более одинаковых пакета из 12, считаем, что принятая информация корректна. По количеству одинаковых пакетов также можно оценить качество приема сигнала — чем больше одинаковых пакетов в посылке, тем лучше.

После того, как с алгоритмом декодирования более-менее разобрались, реализуем его на отладочной плате STM32F429I Discovery. За этим следует период отладки в борьбе за качество приема сигнала.

image

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

Исходники декодирования протокола сенсора выложены здесь, на деле все немного сложнее, чем описано в публикации.

Результат этой работы может быть полезен владельцам данного сенсора/метеостанции, которые хотят расширить стандартные возможности, например, поставив в соседнюю комнату метеостанцию собственной разработки, при этом не дублируя наружные датчики. Следует заметить, что сенсор — это наиболее трудоемкая для повторения часть, в основном, из-за герметичного корпуса — проще купить готовый, чем делать самому.

P.S. Датчик температуры/влажности является разработкой фирмы TFA Dostmann, поэтому исследование протокола ограничено рамками хобби и полностью исключает какое-либо коммерческое использование.

Автор: emax73

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js