Так как метеостанция относительно новая, и Google не дает результатов по поиску протокола данного датчика, подсоединяем приемник 433 MHz к осциллографу, осциллограф к компьютеру и начинаем исследовать протокол.
По осциллографу видно, что датчик раз в 50 секунд передает 12 одинаковых пакетов, разделенных более широкими синхроимпульсами, хорошо заметными на осциллограмме:
Период синхроимпульсов ~ 1700 uSec, период следования импульсов данных ~ 700 uSec.
Информация передается скважностью — короткий импульс означает 0, длинный 1.
В разных пакетах скважность меняется (но период импульсов данных постоянный ~ 700 uSec), поэтому для устойчивого декодирования полезно взять 8 первых бит пакета, взять среднюю длительность импульса, и считать, что если в пределах одного пакета импульс короче — это 0, длиннее — 1.
Пакеты данных разделяются 4 более широкими синхроимпульсами. Посылку замыкают 2 синхроимпульса, за которыми следует продолжительный период молчания. Про начало сказать трудно, потому что первые импульсы смазаны АРУ приемника.
Вооружаемся написанной на C# утилитой для анализа осциллограмм, данные с датчика отображаются на оригинальной метеостанции, и ищем закономерности для разных замеров температуры/влажности.
В результате получается следующее расположение данных в идентичных пакетах длиной 40 bit каждый:
В конце пакета, по видимому, передается контрольная сумма, но угадать алгоритм ее вычисления проблематично. Поэтому если принято 3 и более одинаковых пакета из 12, считаем, что принятая информация корректна. По количеству одинаковых пакетов также можно оценить качество приема сигнала — чем больше одинаковых пакетов в посылке, тем лучше.
После того, как с алгоритмом декодирования более-менее разобрались, реализуем его на отладочной плате STM32F429I Discovery. За этим следует период отладки в борьбе за качество приема сигнала.
Если сравнить последнюю фотографию с первой, то можно увидеть, что все получилось, мы действительно получили с датчика корректную температуру/влажность. Протокол обмена честно купленного сенсора больше не является загадкой, и сенсор может найти дополнительное применение в самодельных метеостанциях или системах логирования умного дома.
Исходники декодирования протокола сенсора выложены здесь, на деле все немного сложнее, чем описано в публикации.
Результат этой работы может быть полезен владельцам данного сенсора/метеостанции, которые хотят расширить стандартные возможности, например, поставив в соседнюю комнату метеостанцию собственной разработки, при этом не дублируя наружные датчики. Следует заметить, что сенсор — это наиболее трудоемкая для повторения часть, в основном, из-за герметичного корпуса — проще купить готовый, чем делать самому.
P.S. Датчик температуры/влажности является разработкой фирмы TFA Dostmann, поэтому исследование протокола ограничено рамками хобби и полностью исключает какое-либо коммерческое использование.
This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий