Всем привет! Я в теме уже почти 2 месяца, осваиваю программирование методом проб и ошибок. Собираю контроллер отопления. Сделать датчик с низким потреблением и шифрование сигнала пока для меня сложно. Проще взять готовые решения для комнатных метеостанций на rf433.
Набрал для опытов кучу модулей, mx-rm-5v fs1000, syn115 syn460r и так далее. На частоте 433.920 в рацию слышу помимо мощных постоянных сигналов от интеллектуальных электросчётчиков сигналы например беспроводного терморегулятора nashone, свой пульт от ворот, автомобильные сигнализации. Хотелось бы увидеть структуру сигнала вот этого терморегулятора. Данные о температуре он не передаёт, только сигнал на включение или отключение реле. Внутри у него передатчик RX470C, на приёмнике WL102. Процессор залит компаундом, на приёмнике интегралка FMD.
Так вот, перепробовал массу скетчей из разных библиотек, от RC-Switch до гайверовских. Никаких данных в сериал порте не пишется. Один скетч где-то мотанул на иностранных сайтах, там тупо в сериал транслировалось всё что было в эфире, там писался бесконечный набор из трёх и четырёхзначных чисел через запятую. Потом изменил скетч и оригинал уже не могу найти.
На ардуино Нано цепляю выход приёмника на 2 пин (RX) и вижу мерцание светодиода PC12. Реагирует на нажатие передачи радлиостанции и на отправку сигнала терморегулятором. Но как увидеть в сериал порте не могу понять… Менял приёмники, одинаково. Что с антеннами что без антенн ведут себя одинаково - мерцание светодиодом и пусто в сериал порте. Разве что при питании 3,3 послабее.
Заливал скетч осциллографа, подавал на вход выход с приёмника, на экране чёткая синусоида. Может быть мне двигаться в этом направлении? Или есть путь проще?
Пошло дело )) свои устройства я делаю на STM32 bluepill, там ноги конечно не как на Nano. Для меня стало откровением, что (0) пин в коде это PD2, пятая нога на плате или третья на шильде. В общем, собрал передатчик на STM32 и приёмник на Nano. С нужной ногой всё заработало. Залил скетч ресивера от рс-свитч, в сериал порт начали поступать коды от двух пультов (люстра и пультик для автономного подогревателя), 24 и 4 бит такого плана:
Received 12864465 / 24bit Protocol: 1
Received 4 / 4bit Protocol: 1
От других устройств тоже слышу в рацию сигналы, но ардуинка их не читает.
Есть мысль напрямую с интересующего меня источника сигнала взять и подать на осциллограф, чтобы увидеть структуру сигнала.
А может есть какие то библиотеки с пониманием разных протоколов??
Ниже сигналы, которые приходят с пульта. Очевидно, что нужные коды прописываются в приёмнике и с ними сравниваются полученные. Отправка идёт тремя-четырьмя пакетами. Видно, что есть битые:
Включение:
Received 40 bits (x1): ac e7 72 00 fa
Received 39 bits (x1): 2c e7 72 00 fa - битый
Received 32 bits (x1): 59 ce e4 01 - битый
Received 40 bits (x2): ac e7 72 00 fa
Выключение:
Received 39 bits (x2): 2c e7 72 00 fa - битый
Received 32 bits (x1): 59 ce e4 01 - битый
Received 40 bits (x2): ac e7 72 00 fa
Нагрев:
Received 40 bits (x2): ac e7 72 01 f9
Received 33 bits (x1): 01 59 ce e4 03
Received 40 bits (x1): ac e7 72 01 f9
Напомнить, что нагрев:
Received 40 bits (x2): ac e7 72 01 f9
Received 33 bits (x1): 01 59 ce e4 03
Received 40 bits (x1): ac e7 72 01 f9
Received 40 bits (x2): ac e7 72 01 f9
Received 33 bits (x1): 01 59 ce e4 03
Received 40 bits (x1): ac e7 72 01 f9
Received 40 bits (x2): ac e7 72 01 f9
Received 33 bits (x1): 01 59 ce e4 03
Received 40 bits (x1): ac e7 72 01 f9
Ожидание (отключить нагрев):
Received 40 bits (x1): ac e7 72 00 fa
Received 39 bits (x1): 2c e7 72 00 fa - битый
Received 32 bits (x1): 59 ce e4 01 - битый
Received 40 bits (x2): ac e7 72 00 fa
Напомнить, что отключить нагрев:
Received 40 bits (x1): ac e7 72 00 fa
Received 39 bits (x1): 2c e7 72 00 fa - битый
Received 32 bits (x1): 59 ce e4 01 - битый
Received 40 bits (x2): ac e7 72 00 fa
Received 40 bits (x1): ac e7 72 00 fa
Received 39 bits (x1): 2c e7 72 00 fa
Received 32 bits (x1): 59 ce e4 01 - битый
Received 40 bits (x2): ac e7 72 00 fa
Received 40 bits (x2): ac e7 72 00 fa
Received 33 bits (x1): 01 59 ce e4 01
Received 40 bits (x1): ac e7 72 00 fa
Итак, продолжаем разговор про декодирование. Прога terminal умеет показывать сигнал в бинарном виде, в HEX и ASCII. Теперь вопрос что именно можно указать в скетче для выполнения тех или иных условий…
расшарил оригинальный код, на включение устройства их два и на выключение их два. Принимаются в монитор порта в HEX, в окно программы Terminal можно видеть даже в бинарном виде. Написал скетч для отправки через передатчик, вроде всё перепроверил на сто рядов. Вместо первых 01 в HEX приходит почему то 00
скорость менял сто раз и 1200 и много выше. Не могу понять в чём дело… Приёмник передатчик на одном столе. Оригинальный передатчик тоже
‘‘‘#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
void setup() {
Serial.begin(9600);
// юзаю STM32F103C8T6, нога другая
mySwitch.enableTransmit(PB12);
// Optional set pulse length.
mySwitch.setPulseLength(350);
mySwitch.setProtocol(1);
// Optional set number of transmission repetitions.
mySwitch.setRepeatTransmit(10);
pinMode(LED_BUILTIN,OUTPUT);
}
void loop() {
mySwitch.send(“1010110011100111011100100000000011111010”); //это “ac e7 72 00 fa” в 40 бит, а приходит “00 e7 72 00 fa“
mySwitch.send(“0000000101011001110011101110010000000001”); //это “01 59 ce e4 01“, а приходит “00 59 ce e4 01”