Prijímač pre RF pásmo na 433 MHz s Arduinom. Znie to ako jednoduchá úloha, ktorá sa čoskoro zmení na náročný boj s kompiláciou programu z dôvodu nekompatibility dostupných neudržiavaných knižníc. Každý, kto v minulosti používal typický zelený prijímač XY-MK-5V (MX-05V) schopný prijímať a dekódovať signály na 433,92 MHz použil Arduino, ktoré ho bolo schopné napájať na 5V. Zároveň v danom čase boli najpoužívanejšie knižnice VirtualWire od Liu Songa a RadioHead od Charlesa Hallarda pre tento účel. Každý by ich odporúčil použiť, no dnes už nefungujú, aspoň v originálnom "znení" nie. Častokrát sa prijímač využíval aj s vysielačom FS1000A.

Dnes už kompilácia s týmito knižnicami aj v ich posledných verziách neprejde s aktuálnym Arduino Core. Knižnica VirtualWire je najstaršia. Na Githube nemá žiadnu release verziu a posledný update knižnice je pred 7 rokmi v príkladoch, pričom súbory knižnice boli aktualizované naposledy pred 12-timi rokmi. Problém je s hlavičkovým súborom VirtualWire.h, aj C++ súborom VirtualWire.cpp, ktoré linkujú hlavičkové súbory vstavaných Arduino knižníc, ale dnes už dané knižnice sú zlúčené. Z toho dôvodu sa kompilácia nepodarí a program sa bude sťažovať na neexistujúci hlavičkový súbor.
VirtualWire.h - fatal error: wiring.h: No such file or directory
VirtualWire.cpp - fatal error: WProgram.h: No such file or directory
Potrebné zmeny:
Vo VirtualWire.h prepísať wiring.h na Arduino.h a rovnako tak vo VirtualWire.cpp prepísať WProgram.h na Arduino.h.
U druhej spomenutej knižnice - RadioHead, sú tiež problémy s kompiláciou programu. Kompilácia sa nepodarí z dôvodou viacnásobných deklarácii funkcií. Posledný release build z Githubu je starý 8 rokov. V danom čase by Arduino IDE vyhodnotilo takúto chybu iba ako warning, ak existovala jedna premenná viackrát v rámci programu. Bohužiaľ dnes je takýto warning už chybou, ktorá neumožňuje vykonať kompiláciu.
RHGenericDriver.h - redeclaration of 'volatile bool RHGenericDriver::_cad'
RHGenericDriver.h - previous declaration 'volatile bool RHGenericDriver::_cad'
RHGenericDriver.h - redeclaration of 'unsigned int RHGenericDriver::_cad_timeout'
RHGenericDriver.h - previous declaration 'unsigned int RHGenericDriver::_cad_timeout'

Riešením je odstrániť jeden z týchto dvojriadkov v hlavičkovom súbore RHGenericDriver.h, ktoré sú na konci súboru. Následne už kompilácia programu prejde. V tomto prípade bol problém so samotným kódom, nie s nekompatibilitou s Arduino Core knižnicami, ako tomu bolo u VirtualWire.
Obe spomenuté knižnice - VirtualWire, RadioHead sú určené pre point-to-point, alebo point-to-multipoint komunikáciu s moduláciou ASK. RadioHead je pokročilejšia knižnica a určená aj pre iné moduly, ale z pohľadu jednoduchých 433 MHz modulov je to takto. Prakticky obe knižnice cielia na tieto lacné 433 MHz moduly, ktoré viete kúpiť rádovo za 1,50€, alebo v Číne aj menej. Pri komunikácii vyžadujú definovanie zhodnej rýchlosti u vysielača a prijímača, čo znemožňuje použiť prijímač na detekciu "čokohoľvek" vo vzduchu, aby fungoval ako tzv. sniffer. Na druhú stranu, zhodnou bitovou rýchlosťou viete odfiltrovať iné vysielania v okolí aj s identickým hardvérom, ktorý by bol potenciálne detekovateľný.

Sú tu ešte ďalšie rozdiely, napríklad VirtualWire využíva aj Manchester kódovanie pri vysielaní, čo predchádza chybovosti a s pevne danou bitovou rýchlosťou je známe, ako dlho trvá každý bit pri vysielaní. RadioHead používa zase synchronizáciu cez preambulu a header, na cca podobnom princípe funguje ako LoRa PPP komunikácia, kedy sa pri preambule lepšie prijímač naladí na vysielač, keď už pôjde payload, čo tiež predchádza chybovosti.
Ak by sme chceli ešte urobiť spomenutý sniffer a napríklad otestovať 433 MHz vysielanie z diaľkového ovládača od garážovej brány, môžeme použiť knižnicu RF433Any od Sébastiena Milleta. Tá je vytvorená pre dekódovanie OOK signálov (ale aj ASK), čo bežne využívajú diaľkové ovládače. Knižnica má síce posledný oficiálny release na Githube pred 4-mi rokmi, avšak verzia v main branchi bola aktualizovaná pred rokom. Okrem AVR architektúr sú podporované už aj ESP32, či ESP8266.

Krátke 3 samostatné stlačenia tlačidla (zakaždým iný payload)
Ako môžeme vidieť na UART výstupe, načítali sme 65 bitov pri každom krátkom stlačení ovládača. Zakaždým sme dostali iný payload. Ako môžeme vidieť, posledné 4 bajty (B3 1C 6F F7) sa nemenia a ide o tzv. housing kód, ktoré definujú konkrétny ovládač. Ľavá strana bajtovej reprezentácie na UART výstupe sa mení. Ide o tzv. plávajúci kód, ktorý sa mení na základe počítadla. Ak sa ovládač drží, príjma sa následne aj kratšia 17-bitová sekvencia, ktorá signalizuje, že tlačidlo je stále držané a následne v ďalšom cykle opätovne vyšle plnu správu 65 bitov.

Sústavné držanie tlačidla (stále rovnaký payload, + kratšia bitová reprezentácia)
Počas neprerušeného držania tlačidla sa odosiela tá istá správa ako pri prvom stlačení tlačidla, po ktorom následovalo držanie. Ak sa držanie preruší a znova sa stlačí tlačidlo, bitová sekvencia sa zmení. Správa ako taká má zrejme 64, resp. 16 bitov (násobky bajtov), avšak program zachytáva aj start, resp. sync bit, preto nesedí postupnosť ako mocnina 2.

RF433Any je knižnica iba pre prijímače, neobsahuje žiadne príklady pre vysielače a ani preto nemá funkcie v knižničných súboroch. Neviete to preto použiť na komunikáciu, len pre detekciu signálu, ktorý je "vo vzduchu". Rovnako tak, ak by 433 MHz vysielač v tomto prípade využíval inú ako OOK / ASK moduláciu, nedokážete ho takýmto spôsobom zachytiť. Typicky nezachytitíte FSK vysielače, ktoré sú najčastejšie v diaľkovom ovládaní kľúčov od áut. Je to fajn riešenie na overenie vlastného ovládača od garážovej brány, že funguje.
Ešte tip na záver:
Spomenutý RF prijímač XY-MK-5V (MX-05V) má v strede skrutku na plochý skrutkovač (asi priemer 2 mm), ktorá slúži na jemné doladenie strednej frekvencie. Ladí sa ňou keramický kondenzátor, čím sa posúva rezonančná frekvencia prijímača. Prakticky je to viditeľné najmä na dosahu. Ak musíte prísť s vysielačom až úplne blízko antény a vtedy ho detekuje, je potrebné doladiť strednú frekvenciu.
Buď smerom nahor, alebo nadol. To uvidíte na základe toho, či prijímač prijíma dáta. Môžete si do programu doplniť aj LED diódu, ktorá bliká, keď indikuje prichádzajúci paket a zároveň, že "niečo zachytáva". Ďalším vodítkom môže byť, že prijímate rôzne dĺžky paketov, ktoré sa zakaždým menia. To nie vôbec pri bežných vysielačoch bežné a preto je to problém na prijímači, ktorý to nedobre chytá a isté bitové postupnosti nedekóduje, lebo iba čiastočne zachytáva signál.
Knižnica RF433Any má aj ďalšie príklady, ktoré umožňujú analyzovať tvar signálu a to v dĺžke vysokých a nízkych pulzov. Rovnako tak aj počiatočnú sekvenciu pre možnosť dekódovania signálu a dokáže vyjadriť aj separátor (pauzu) medzi dvoma paketmi.
