Есть у меня необходимость отслеживать температуру в разных зонах и есть китайская метеостанция DYKIE RS 8718 с четырьмя беспроводными датчиками.
Задался я вопросом как можно принимать и декодировать сигналы с этих датчиков с помощью ардуино. Скорее из спортивного интереса я занялся этим вопросом, потому как заинтересовался попавшей мне в руки ардуинкой: стало интересно сделать какой-либо проект самому после стандартного обучающего курса по ардуино с миганием диодов, кнопкой, буззером и дисплеем. Есть у меня и более распространенная метеостанция Oregon, но декодирование ее сигналов уже давно расписано по всему интернету и скетчей написано немало, а на DYKIE я не нашел такой информации.
Я использовал логический анализатор Saleae Logic и обычный модуль-приемник 433 для ардуино. Запитав приемник и подключив к анализатору выявил следующее:
- беспроводной датчик передает посылку из 6-ти повторяющихся пакетов, разделенных относительно длинной паузой.
Разбираем один пакет из шести:
Импульсы все одинаковой длины - примерно по 600 мкс
а вот спады (паузы) - отличаются. Есть три длины спада:
самый продолжительный - разделяющий одинаковые пакеты, примерно 4 мс (4000 мкс)
короткий, примерно 900 мкс
и длинный - 1950 мкс
Делаем выводы - короткий спад - это "0", длинный спад - это "1", а самый продолжительный - разделитель пакетов, назовем его сигналом синхронизации.
Итак, мы получили пакет в двоичном коде, осталось понять в каких его частях и каким способом закодированы температура, влажность и номер канала. Это мы делаем записав анализатором несколько пакетов от датчика с разной температурой, влажностью и каналом.
Потратив на анализ некоторое время мы видим, что в отличии от Oregon`a никакого манчестерского или другого кодирования в этой китайской метеостанции нет, все просто: 9-11 биты - это номер канала датчика, с 12 по 23 - температура, умноженная на 10, а 28-35 биты - влажность. Последним идет сигнал-разделитель пакетов (сигнал синхронизации).
Я не стал разбираться что означают остальные биты в пакете, для моих целей это не нужно, но подозреваю, что биты 0-7 - это обновляемый при каждом включении датчика (при сбросе питания) ИД датчика, а в битах 8 или 24-28 - возможно есть состояние батареек.
Осталось написать скетч для ардуинки. Он у меня почти дописан, остались мелкие к нему хотелки типа сигнализации о выходе из заданного диапазона или продолжительном отсутствии сигнала от датчика, ну и экранчик я хочу прикрутить побольше, а то OLED 0.96 слишком мал для отображения всех моих хотелок даже очень мелким шрифтом. Но об этом как-нибудь в другой раз, если кому-то будет интересно.