V dnešním dílu seriálu článků o desce TinyLab se podíváme, jak konfigurovat a používat bezdrátové moduly XBee. I když je seriál věnovaný desce TinyLab, je popsaný postup použitelný i bez této desky.
Co je to XBee?
XBee je rodina různých bezdrátových zařízení, které poznáme podle typického tvaru desky. Jednotlivé modely se od sebe liší komunikační frekvencí, dosahem i podporovanými protokoly. Spojuje je ale snaha o jednoduchou bezdrátovou komunikaci zařízení s malým výkonem. TinyLab ve verzi Exclusive obsahuje dva XBee moduly S2C, takže je s jejich pomocí možné zprovoznit si například most mezi dvěma zařízeními. V našem případě si propojíme počítač a TinyLab.
Moduly XBee S2C používají komunikační protokol ZigBee (to pro nás není podstatné, ale hodí se vědět pro případný další průzkum). Díky tomu jsou moduly schopné vytvářet i poměrně rozsáhlé sítě propojených zařízení při zachování snadné konfigurace. Díky tomu je možná i komunikace mezi zařízeními, které na sebe přímo nevidí, ale leží mezi nimi prostředník, který může komunikaci zprostředkovat.
Poznámka: Dále si představíme konfiguraci, která se sice jeví jako dvoubodová, ale ve skutečnosti není problém připojit další zařízení. Postup přidání dalších zařízení bude použitelný téměř beze změn.
Mody zařízení
Zařízení XBee mohou vystupovat ve třech různých modech, které se liší v tom, jakou činnost zařízení při komunikaci v rámci sítě vykonává.
Koordinátor (Coordinator)
Zařízení v modu Koordinátor (na obrázku bíle) může být v síti pouze jedno. Koordinátor zajišťuje inicializaci sítě, vybírá zvolený komunikační kanál a ID sítě. Také se stará o adresování v síti a umožňuje ostatním zařízením připojit se do sítě. Obsahuje také buffer, ve kterém jsou uloženy zprávy pro spící zařízení v síti. Toto zařízení musí být spuštěné neustále a není možné jej uspat.
Router
Zařízení typu Router (zeleně) už může být v síti neomezeně (ale také žádné). Může se připojit do existujících sítí a také vystupovat jako prostředník při komunikaci ostatních zařízení s Koordinátorem (podporuje příjem a zasílání směrovacích zpráv). I router umí uchovávat zprávy pro případná spící koncová zařízení a musí být neustále spuštěný (nemůže přejít do režimu spánku).
Koncové zařízení (End-device)
Koncová zařízení slouží k příjmu a odesílání zpráv v síti. Nemohou vystupovat jako prostředník a mohou vstupovat do režimu spánku. Musí být vždy připojeny k routeru, nebo koordinátoru.
Konfigurace zařízení
Aby spolu moduly XBee mohly komunikovat, musíme nejdříve vše správně nastavit. Toto nastavení je sice možné provést přes sériovou linku pomocí AT příkazů, ale snadnější bude využít program XCTU od výrobce modulů. Po instalaci program spustíme. V kitu TinyLab najdeme sériový převodník pro XBee a modul do něj zasuneme (zkontrolujte orientaci modulu podle obrázku níže). Poté převodník přes USB připojíme k PC.
Vyhledání zařízení
Po spuštění programu XCTU klikneme na ikonu s lupou v levém horním rohu. Zobrazí se nabídka, ve které vyberte sériový port s připojeným převodníkem. Je to ten port, který v nabídce mizí a objevuje se společně s odpojováním a připojováním převodníku k USB (je nutné znovu kliknout na ikonu s lupou, aby se nabídka aktualizovala).
Nyní musíme nastavit, jakým způsobem se má na zvolené sériové lince prohledávat – jakou rychlostí s modulem komunikujeme apod. Nastavení zvolte podle obrázku níže.
Po stisknutí tlačítka „Finish“ je zahájeno prohledávání, které by mělo skončit nalezením připojeného modulu.
Vybrané zařízení by se nyní mělo objevit v levém sloupci hlavní obrazovky XCTU.
Moduly od výrobce nemají nahraný firmware. Proto se v poli Function zobrazuje „Not found in XCTU“. Nyní musíme do modulu nahrát firmware.
Nahrání firmware do XBee
Začneme tím, že klikneme na modul v levém sloupci programu. Zobrazí se hláška, jestli chceme stáhnout firmware z internetu.
V dalším kroku vybereme možnost „Install legacy firmware package“.
Po odsouhlasení se spustí stahování, které může trvat i několik minut.
Po stažení se zobrazí seznam staženého firmware. Okno zavřeme kliknutím na „OK“.
Když nyní v levém sloupci vybereme připojený modul, po krátkém načítacím dialogu se zobrazí jeho aktuální nastavení. Zmáčkneme tlačítko pro upgrade firmware.
V nabídce vybereme firmware dle obrázku níže (popřípadě novější, pokud je dostupný).
Po odsouhlasení by se měla objevit hláška o úspěšném nahrání software.
Nastavení modulů
Postup popsaný výše musíme provést pro oba moduly. Dále musíme jeden modul nakonfigurovat jako Konfigurátor a druhý jako Router. Po výběru modulu se v pravém sloupci zobrazí formulář, ve kterém musíme vyplnit správné hodnoty. Ty vyplňte podle následujících obrázků a poté pomocí ikony tužky s nápisem „write“ zapište změny do modulu.
Význam důležitých položek
- PAN ID = adresa sítě
- může být v rozsahu HEX: 0-FFFF
- všechna zařízení v síti zde mají stejnou hodnotu
- coordinator enable
- uvádí zařízení do modu Coordinator
- destination address low = cílová adresa
- pokud je modul v modu koordinátor, nastavíme její hodnotu na FFFF = režim broadcast
- pro router ji nastavíme na 0, což je výchozí adresa koordinátoru
Poznámka: V síťových technologiích je často nejvyšší adresa z rozsahu adres vyhrazena pro tzv. broadcast. Pokud odešleme data na broadcastovou adresu, jsou tato data odeslána do všech zařízení, která jsou připojena v síti. Přesně to v případě koordinátoru potřebujeme.
Po uložení nastavení už jsou oba moduly připravené pro vzájemnou komunikaci. Jeden z modulů zasuneme do slotu na desce TinyLab (vpravo uprostřed – viz úvodní fotka) a druhý necháme připojený k PC pomocí USB převodníku.
Ovládání Arduina na dálku
Nyní si napíšeme jednoduchý program, který bude vypínat a zapínat LED podle toho, co mu pošleme po sériové lince – když dostane znak ‚h‘, tak ji rozsvítí, pro ‚l‘ ji zhasne. Začneme tím, že přepneme přepínače na TinyLab do správné polohy. Přepínače u pinů 0 a 1 propojí sériovou linku Arduina s modulem XBee. Přepínač u pinu 13 zase připojí nejlevější LED k pinu 13. Pokud si chcete připomenout jak pracovat s LED, pojednává o tom tento článek.
Do Arduina nahrajeme následující program:
byte led = 13; void setup() { Serial1.begin(9600); Serial.begin(9600); pinMode(led, OUTPUT); } void loop() { if(Serial1.available()){ char c = Serial1.read(); if(c == 'H' || c == 'h') digitalWrite(led, HIGH); else if(c == 'L' || c == 'l') digitalWrite(led, LOW); Serial.println(c); } }
Arduino Leonardo, které tvoří jádro desky TinyLab, má dvě sériové linky. Ta označená Serial slouží ke komunikaci s PC, Serial1 je fyzicky vyvedená na piny 0 a 1 a je k ní připojen modul TinyLab.
Program dělá to, že pokud je dostupný nějaký znak po sériové lince, tak ho načte a podle jeho hodnoty rozsvěcuje či zhasíná LED na pinu 13. Navíc přijatý znak pošle do PC, takže si v sériovém monitoru můžeme zkontrolovat, jestli nám z XBee chodí nějaké znaky.
Nyní v programu XCTU klikneme na připojený modul a v pravém horním rohu na ikonu Konzole. Do levého bílého pole pak můžeme psát zprávy, které jsou okamžitě přenášeny do druhého modulu.
Na straně počítače nemusí být jen „hloupá“ textová konzole, ale třeba nějaká aplikace s grafickým rozhraním a tlačítkem pro ovládání LED. Taková se dá napsat třeba v prostředí Processing.
A to je pro dnešek vše. Napadne vás ještě nějaký projekt, který by se dal s moduly XBee postavit? Třeba bezdrátový teploměr, ovládání brány, …