NiceRF 433MHz je set komunikačních modulů pro Arduino. Tento set obsahuje celkem čtyři předměty: vysílač STX882, přijímač SRX887 a dvě spirálové antény. Jak již z názvu vyplývá, tak komunikace mezi vysílačem a přijímačem probíhá na frekvenci 433 MHz.
Vysílač STX887 dokáže pracovat s napájecím napětím 3-6 Voltů, přičemž proudový odběr při vysílání může dosáhnout hodnoty až 34 miliampér. V režimu spánku je odběr velice nízký – 10 nanoampér či méně.
Přijímač SRX887 má podobný rozsah napájení, kdy můžeme použít napětí 3,3 až 5,5 Voltů. Proudový odběr se při příjmu pohybuje okolo 4 miliampér, ve spánku pak méně než 1 mikroampér.
Pro úspěšné propojení modulu vysílače STX882 a Arduino desky je nutné zapojit celkem 3 vodiče. Propojíme DATA s pinem D10, VCC s 5V Arduina a GND se zemí Arduina. Pro datový pin DATA můžeme použít také jiný volný datový pin, ale je nutné tuto volbu provést také na začátku programu.
Pro úspěšné propojení modulu přijímače SRX887 a Arduino desky je nutné zapojit celkem 4 vodiče. Propojíme VCC s 5V Arduina, CS se zemí Arduina, DATA s pinem D2 a GND se zemí Arduina. Pro datový pin DATA můžeme použít také jiný volný pin, ale musí podporovat funkci přerušení (Interrupt), kdy u desky Arduino UNO či Nano jsou to piny D2 a D3 (přerušovací pin 0 a 1). A pokud byste chtěli využít také uspávání přijímače, tak ho můžete dosáhnout pomocí ovládání pinu CS – pokud je připojen na zem, tak modul pracuje, pokud připojíte VCC, tak se modul uspí.
Pozn. U některých dostupných modulů je nutné použít obrácenou logiku pro pin CS - pro komunikaci je tedy nutné ho připojit na VCC a pro uspání na GND. Pokud tedy máte problém v komunikaci s prvním popsaným způsobem, zkuste připojit CS pin na VCC.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu RCSwitch, návod, jak na to, je uveden zde.
Ukázkový kód pro vysílač obsahuje na svém začátku připojení potřebné knihovny a vytvoření objektu vysílače z knihovny.
V podprogramu setup nejprve zahájíme vysílání na pinu D10. Pokud byste měli problém s vysíláním s výchozím protokolem 1, tak můžete pomocí příkazu v prvním komentáři nastavit jiný protokol. A v druhém komentáři se nachází možnost ovlivnit počet opakování zaslání zprávy – pro větší úspěšnost se ve výchozím nastavení posílá 10 zpráv.
V nekonečné smyčce loop se v prvním kroku uloží aktuální čas od spuštění Arduina do proměnné, přičemž pro získání času v sekundách je získaná hodnota vydělena tisícem (převod z milisekund na sekundy). V druhém kroku se tato hodnota pošle pomocí funkce z knihovny, přičemž nastavíme délku proměnné na 32 bitů, což je reálná hodnota použité proměnné unsigned long. Na konci programu se nachází už jen pauza po dobu tří sekund před novým během smyčky.
// NiceRF 433MHz Vysílač STX882 // připojení potřebné knihovny #include <RCSwitch.h> // vytvoření objektu vysílače z knihovny RCSwitch vysilac = RCSwitch(); void setup() { // zahájení vysílání na pinu D10 vysilac.enableTransmit(10); // možnost změnit protokol na č.2 // vysilac.setProtocol(2); // volba počtu opakování zaslání zprávy // vysilac.setRepeatTransmit(5); } void loop() { // načtení času od spuštění Arduina do proměnné v sekundách unsigned long cas = millis() / 1000; // poslání aktuálního času s délkou 32 bitů vysilac.send(cas, 32); // pauza před novým během smyčky delay(3000); }
Ukázkový kód pro přijímač také obsahuje na svém začátku připojení potřebné knihovny a vytvoření objektu přijímače z knihovny.
V podprogramu setup nejprve zahájíme komunikaci po sériové lince a poté si nastavíme přijímací pin na hodnotu 0, což odpovídá nultému přerušovacímu pinu desky UNO, tedy D2.
Na začátku nekonečné smyčky loop kontrolujeme, jestli jsme nedetekovali příchozí komunikaci. Pokud se tak stane, tak si načteme do kontrolní proměnné velikost zprávy, kterou v následujícím kroku zkontrolujeme. Pokud zjistíme, že je velikost nulová, tak vypíšeme pouze chybovou hlášku. V opačném případě vypíšeme na sériovou linku všechny dostupné údaje, tedy přijatou zprávu, její velikost a použitý protokol. Jako poslední příkaz je použit reset modulu, abychom mohli přijímat nové zprávy.
// NiceRF 433MHz Přijímač SRX887 // připojení potřebné knihovny #include <RCSwitch.h> // vytvoření objektu přijímače z knihovny RCSwitch prijimac = RCSwitch(); void setup() { // zahájení komunikace po sériové lince Serial.begin(9600); // nastavení přijacího pinu na interrupt pin 0 = pin D2 pro UNO, Nano prijimac.enableReceive(0); } void loop() { // detekce přichozí komunikace if (prijimac.available()) { // načtení velikosti přijaté zprávy do proměnné int velikost = prijimac.getReceivedValue(); // kontrola velikosti zprávy if (velikost == 0) { // neznámé kódování nebo chyba v komunikaci Serial.print("Neznama zprava!"); } // v případě úspěšné přijaté zprávy vypíšeme všechny údaje else { Serial.print("Prijata zprava: "); Serial.print(prijimac.getReceivedValue()); Serial.print(" / "); Serial.print(prijimac.getReceivedBitlength()); Serial.print("bitu "); Serial.print("Protokol: "); Serial.println(prijimac.getReceivedProtocol()); } // reset modulu pro přijetí nových zpráv prijimac.resetAvailable(); } }
Po nahrání ukázkového kódu vysílače STX882 a přijímače SRX887 do Arduino desek získáme například tento výsledek. Jak si můžete všimnout, tak z 10 zaslaných zpráv se podaří přijmout pouze některé, ale to může být v mém případě problém jiných vysílačů na stejné frekvenci.
Prijata zprava: 3 / 32bitu Protokol: 1 Prijata zprava: 3 / 32bitu Protokol: 1 Prijata zprava: 7 / 32bitu Protokol: 1 Prijata zprava: 7 / 32bitu Protokol: 1 Prijata zprava: 7 / 32bitu Protokol: 1 Prijata zprava: 10 / 32bitu Protokol: 1 Prijata zprava: 14 / 32bitu Protokol: 1 Prijata zprava: 17 / 32bitu Protokol: 1 Prijata zprava: 21 / 32bitu Protokol: 1 Prijata zprava: 21 / 32bitu Protokol: 1
Set NiceRF 433MHz je zajímavou možností, jak si s Arduinem vyzkoušet bezdrátovou komunikaci na frekvenci 433 MHz. Tento set obsahuje vysílač STX882 a přijímač SRX887, které spolu komunikují jednosměrně, tedy pouze přijímač může přijímat signál od vysílače, ale ne opačným směrem. Proto jsou tyto moduly určené hlavně pro projekty, které pracují s bezdrátový senzory, spínači a podobně. Můžete s nimi tedy například zasílat teplotu z venkovního čidla, informaci o stisku či rozpojení tlačítka pro dálkové ovládání či bezpečnostní systém. A díky použité frekvenci mají tyto senzory také velmi nízkou spotřebu, která může být výhodou pro bateriové napájení.
Seznam použitých komponent:
https://dratek.cz/arduino/1511-original-arduino-uno-rev3-1485165418.html
https://dratek.cz/arduino/1069-arduino-zakladni-deska-nano-v-30-driver-ch340-1500635974.html
https://dratek.cz/arduino/3172-nicerf-433mhz-vysilac-prijimac-antena-set-3ks.html