Rádio moduly 433 MHz pomocou knižnice RadioHead

Zápisník experimentátora

Dnes plynule nadviažeme na predchádzajúci článok. S rádiovými modulmi budeme pracovať pomocou knižnice RadioHead. Opäť využijeme dvojicu vysielač a príjímač, ktorá spolu komunikuje na frekvencii 433 MHz. Dnešný kód sa bude správať rovnako, ale podľa mojich skúseností nie je možné kombinovať VirtualWire a RadioHead. Do budúcnosti sa budem venovať už len RadioHead, lebo to doporučuje aj samotný autor a mám pocit, že je táto nová knižnica vyladenejšia.

Nákup súčiastok

Na fotografiách je použité Arduino Pro Mini a Arduino Mega. To vás nelimituje, môžete použiť v podstate ľubovoľné Arduino.

  • Arduino Pro Mini (link) - Toto Arduino som použil ako prijímač.
  • Arduino Mega (link) - Toto Arduino som použil ako vysielač.
  • Mini Breadboard (link) - Rádiové moduly som zastrčil do tohoto skúšobného pola.
  • Rádiové moduly (link) - Rádiové moduly pre 433 MHz sa obvykle predávajú po dvojiciach. Mávajú síce rôzne označenie, ale zdá sa, že sú prakticky identické. Mavajú tieto názvy: XD-RF-5V, MX-JS-05V, XD-FST, MX-FS-03v, XY-MK-5V, FS1000A. Rádiové moduly sa predávajú bez antény. To má veľký vplyv na dosah vysielania. Ak chcete vysielať aj na viac metrov, musíte k obom modulom pripevniť anténu.

Dĺžka antény

Tu sa na internete údaje trochu rozchádzajú, ale obvykle je to 17,5 cm (alternatívne 15 cm). Táto dĺžka nemusí byť v amatérskych podmienkach dodržaná úplne presne. V podstate každý kúsok drôtu, ktorý tam pripevníte výrazne zlepší vlastnosti vysielača.

RadioHead

Túto knižnicu nenájdete v správcovi knižníc a musíte si ju nainštalovať zo ZIP súboru. Domovská stránka knižnice je http://www.airspayce.com/mikem/arduino/RadioHead/index.html. Nainštalujte si ju do adresára [meno užívateľa]\documents\arduino\libraries\radiohead. Knižnica je určená na ovládanie viacerých modulov. Preto si treba zapamätať, že pre tieto moduly 433 MHz treba z nej použivať triedu RH_ASK.

Program

Tieto dva jednoduché programy spolu komunikujú. Prvý odosiela postupne sa zvyšujúce čísla, aby bolo možné ľahko skontrolovať výpadky spojenia a druhý program tieto čísla prijíma a zobrazuje ich na sériový port. Vo výpise vidíte, koľko znakov sa prijalo a aký je rozdiel voči predchádzajúcej správe. Ak je rozdiel 1, potom nedošlo ku žiadnemu výpadku. Ak je číslo väčšie, tak toľko správ medzitým vypadlo. Potom je jednoduché manipulovať s oboma Arduinami a sledovať, ako sa to správa.

V knižnici RadioHead je vidno posun k c++. Všetko je naprogramované ako triedy a voláte ich funkcie. Vzhľadom na to, že knižnica RadioHead je určená pre veľké množstvo rádiových modulov, treba si zapamätať, že pre najlacnejšie moduly sa používa hlavičkový súbor RH_ASK.H.

Odosielanie

Dátový pin je pripojený na pin 12 v Arduine. Ak vám to nevyhovuje, môžete ho zmeniť parametrom v konštruktore objektu driver.

#include <RH_ASK.h>

RH_ASK driver;
char buffer[10];
int idx = 0;

void setup()
{
  Serial.begin(9600);   // Debugging only
  if (!driver.init())
    Serial.println("init failed");
}

void loop()
{
  sprintf(buffer, "%d", idx);
  idx++;

  driver.send((uint8_t *)buffer, strlen(buffer));
  driver.waitPacketSent();
  delay(200);
}

Prijímanie

Dátový pin je pripojený na pin 11 v Arduine. Ak vám to nevyhovuje, môžete ho zmeniť parametrom v konštruktore objektu driver.

#include <RH_ASK.h>

RH_ASK driver;
int last_idx = 0;

void setup()
{
  Serial.begin(9600); // Debugging only
  if (!driver.init())
    Serial.println("init failed");
}

void loop()
{
  uint8_t buf[RH_ASK_MAX_MESSAGE_LEN];
  uint8_t buflen = sizeof(buf);

  if (driver.recv(buf, &buflen)) // Non-blocking
  {
    // Message with a good checksum received, dump it.
    buf[buflen]=0;
    Serial.print("Received(");
    Serial.print(buflen);
    Serial.print(",");
    int idx=atoi(buf);
    Serial.print(idx>last_idx ? "+" : "-");
    Serial.print(idx-last_idx);
    last_idx=idx;
    Serial.print("}: ");
    driver.printBuffer(buf, buf, buflen);
  }
}

Zdrojový kód

Zdrojový kód sa nachádza na serveri GitHub.


14.05.2017


Menu