Rf433 - поймать и декодировать несложный сигнал

Всем привет! Я в теме уже почти 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

Библиотека “всеядная”: GitHub - sebmillet/RF433any

Всем спасибо! Как обычно, сам разобрался и с собой поговорил ))

https://github.com/crankyoldgit/IRremoteESP8266 можно использовать IRremote даже, не смотря на то что библиотека для ик пультов вроде как…

эта читает только некоторые

Итак, продолжаем разговор про декодирование. Прога 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”

digitalWrite(LED_BUILTIN,LOW);

delay(500);

digitalWrite(LED_BUILTIN,HIGH);

delay(10000);

}’’’

#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”

digitalWrite(LED_BUILTIN,LOW);

delay(500);

digitalWrite(LED_BUILTIN,HIGH);

delay(10000);

}

так?

На вот грамотей держи мягкий знак - Ь. И перед знаками препинания пробелы не ставятся.

По делу то есть что сказать?

в общем rc-switch судя по всему не умеет отправлять сигналы длиннее 32 бит..

Методом подбора выяснено, что rc-switch может корректно работать с данными до 32 бит.

GitHub - ThFischer/rc-switch-64bit: Arduino lib to operate 433/315Mhz devices like power outlet sockets. - эта биба может до 64

по итогу STM32 шлёт два пакета по 40 бит именно той инфы какую и оригинальный передатчик. Только приёмнику фиолетово :smile:

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

Логический анализатор поможет, если справится с частотой.