ZigBee juhtmevaba side Robootika Kodulaboris

Autor: Raivo Sell

Käesolev õpiobjekt tutvustab ZigBee mooduli kasutamist Robootika Kodulaboriga.

ZigBee on odav, lihtne ja madala voolutarbega IEEE 802.15.4 standardil baseeruv spetsifikatsioon juhtmevabade võrkude rakendusteks. See on mõeldud kasutamiseks madala andmeedastuskiirusega lihtsatesse juhtmevaba ühendust nõudvatesse seadmetesse, näiteks igasugu infotablood, tööstuslik- ja koduautomaatika. ZigBee iseorganiseeruv võrk on üsna säästliku energiatarbega erinevalt Bluetooth rakendustest, moodulite ärkamise ajad on kiired ja ärkveloleku aeg on minimiseeritud. ZigBee töötab 2.4 GHz sagedusalas. Robootika Kodulaboris on ZigBee mooduliks Digi Xbee Series 1 moodul, mis on ühendatud Kommunikatsiooni plaadile. Andmevahetuseks mikrokontrolleriga kasutab XBee moodul UART jadaliidest.

ESF

Õpiobjekti nimi: ZigBee juhtmevaba side Robootika Kodulaboris

Õpiväljundid:

Pärast mooduli läbimist õpilane:

  • Kirjeldab ZigBee mooduli tööprintsiipi
  • Eristab erinevaid võrgu tüüpe
  • Kirjeldab ZigBee protokolli
  • Ühendab vajalikud moodulid õigesti

Kasutusjuhend:

  • Teoreetilise taustamaterjaliga tutvumine
  • Õppevideo vaatamine
  • Enesekontrolli küsimustele vastamine

Õpetatav osa: Lugeda teoreetilist ülevaadet enne riistvara reaalset ühendamist ja pingestamist. Vaadata õpivideosid korrektse riistvara käsitlemise tagamiseks. Õpitu kinnistamiseks tuleb praktilised näited reaalselt läbi teha.

Seoste loomine: Läbi õppevideo ja sõnalise selgituse järgimise.

Kinnistav osa: Iseseisev praktika reaalse riistvarakomplekti baasil.

TEOREETILINE OSA

ZigBee

ZigBee on odav, lihtne ja madala voolutarbega IEEE 802.15.4 standardil baseeruv spetsifikatsioon juhtmevabade võrkude WPAN (Wireless Personal Area Networks) rakendusteks. See on mõeldud kasutamiseks madala andmeedastuskiirusega lihtsatesse juhtmevaba ühendust nõudvatesse seadmetesse, näiteks igasugu infotablood, tööstuslik- ja koduautomaatika. ZigBee iseorganiseeruv võrk on üsna säästliku energiatarbega erinevalt Bluetooth rakendustest, moodulite ärkamise ajad on kiired ja ärkveloleku aeg on minimiseeritud. ZigBee töötab 2.4 GHz sagedusalas.

ZigBee võrgud

Juhtmevaba ZigBee ühendus võimaldab seadmetest koostada võrgustikke, mille liikmed saavad omavahel suhelda ja andmeid vahetada. Ülesehituselt eristatakse standardi järgi kolme võrgu topoloogiat:

  • Tähtühendus (Star)
  • Kobarühendus (Cluster)
  • Võrkühendus (Mesh)
Võrgu liikmed jagunevad samuti kolme kategooriasse:
  • Täisliikmed suudavad suhelda kõigi teiste samasuguste liikmetega, kes omakorda vahendavad suhtlust edasi kaugematele liikmetele. Liikme energiatarbimine on sõltuv sellest, kui paljude teiste liikmetega tuleb andmeid vahetada - pideva andmevahetuse ajal on võrgus kõik täieõiguslikud liikmed aktiivsed.
  • Lihtliikmed (näiteks andurid) saavad suhelda ainult ühe täisliikmega, kes vahendab neid ülejäänud võrgustikku.
  • Koordinaatorid. ZigBee võrgustikus on alati üks võrgustiku koordinaator, kes on teadlik kõigist võrgustiku täisliikmetest ja korraldab andmevahetust võrgus, kuid tal ei pea olema otseühendust kõigiga, sest täisliikmed vahendavad suhtlust.

ZigBee kasutab standardset ülem-alam (master-slave) konfiguratsiooni, mis sobib staatiliste võrkude jaoks, kus seadmed vahetavad väikesemahulisi andmepakette. Võrgustikus võib olla kuni 256 seadet.

Tähtühendus

Tähtühendus sobib lihtsama võrgu puhul, kus on üks keskne seade, mis kogub andmeid teistelt erinevatelt võrgu liikmetelt. Näitena võib tuua suvemaja, kuhu on paigaldatud erinevaid andureid ja täitureid, mille vahekaugus kesksest seadmest jääb ühe seadme tööraadiuse piiresse. Iga võrgu seade võib olla ühendatud ühe konkreetse anduriga või täituriga. Näiteks on maja erinevates punktides temeratuuriandurid, niiskusandurid, liikumisandurid, jne. Iga anduri juures on ZigBee seade, mis saadab anduri andmed juhtmavabalt koordinaator tüüpi ZigBee seadmele, mis paikneb peakontrolleri juures.

Klasterühendus

Klasterühendust võib vaadelda, kui omavahel kokku ühendatud tähtühenduses võrke. Näitena võib tuua suurema maja, kus igas ruumis on väiksem tähtühendusvõrk, mis on omavahel koordinaatoritega ühenduses. Keskne seade on terve maja peale, mis korraldab võrgu andmevahetust. Lihtliikmete andmed edastatakse kesksele koordinaatorile läbi teiste liikmete, tagades nii andmeedastuse pikematelt distantsidelt, kui ainult ühe seadme tööraadius.

Võrkühendus

Võrkühenduses saab iga täisliige lisaks koordinaatorile suhelda ka teiste võrgu liikemtega. Näiteks võib ette kujutada tarka tehast, kus iga tööpink on varustatud juhtmevaba mooduliga, mis võimaldab edastada ja võtta vastu infot teistelt samasugustelt tööpinkidelt ning samuti keskselt koordinaatorilt. Koordinaator omab ülevaadet kogu süsteemis toimivast andmevahetusest ja edastab selle operaatorile. Samas saab üks tööpink edastada info teisele tööpingile, näiteks detaili valmimisest, kes valmistab seejärel ette detaili järgmise tööoperatsiooni. Selline tark tehas võib paindlikult oma tööjärjekorda muuta või koostada selle täpselt vastavalt hetkevajadusele ja ressurssidele.

Kasutamine

Robootika Kodulaboris on ZigBee seadmena kasutusel XBee moodul firmalt Digi. XBee moodul võimaldab lisaks lihtsale andmevahetusele ühendada mooduliga otse erinevaid seadmeid. XBee moodul toetab digitaal sisend/väljundeid ja analoog sisendeid. Iga moodul omab personaalset aadressi - MY Address, mis koosneb DH ja DL parameetritest ning samuti omab iga võrk oma aadressi - PAN ID (Personal Area Network identifier). XBee seadme võib eelkonfigureerida mingi kindla võrgu liikmeks või üritada avastada võrke töö ajal ja soovitud võrguga seejärel liituda. Kui XBee DL=0xFFFF, määratakse moodul broadcast reziimi (point to multi-point), mis tähendab, et moodul hakkab saatma infot kõigile samal kanalil olevatele seadmetele.

Robootika Kodulabori Kommunikatsioonimooduli plaadil on aluspesa ZigBee mooduli „Xbee“ paigaldamiseks. Suhtlus selle mooduliga toimub üle UART liidese. Lihtsaim XBee moodulite kasutusviis on tekitada juhtmavaba side kahe mooduli vahel ehk P2P (Point to Point) ühendus. Nii saab kahe kontrolleri vahel lihtsalt vahetada andmeid, ilma et neid peaks füüsiliselt kaablitega ühendama. Näiteks võib üks moodul olla robotil ja teine ühendatud kontrolleriga, mis simuleerib roboti juhtpulti.

Enne moodulite kasutamist peavad olema vähemalt järgmised parameetrid korrektselt seadistatud:
  • ID - PAN ID: Peab olema sama mõlemal moodulil
  • DL - Destination Address Low: Koordinaatoril FFFF (broadcast reziim), Täisliikmel 0
  • BD - Baud Rate: Mõlemal moodulil sama (nt. 57000)

Antud konfiguratsiooni nimetatakse AT Command Mode või Transparent Mode XBee funktsioonide sees lülitatakse moodul ümber AT käsustiku peale saates talle “+++“ käsu ja edasine seadistamine toimub vastavate AT käskude saatmisega. Kui ühendus on teise mooduliga loodud, siis minnakse tagasi andmeühenduse peale. On olemas veel API(Application Programming Interface) reziim, mis võimaldab vastavate XBee käskudega muuta XBee parameetreid, minemata käsureziimi ning pärida pakettide kohaletoimetamise kinnitused iga edastatud paketi kohta.

NÄITEKOOD

Näiteprogramm otsib esmalt ümbruskonnast teisi ZigBee seadmeid ja vastav abifunktsioon kuvab nende aadresside nimekirja ekraanil. Globaalsel 0000FFFF aadressil on eriomadus, sinna saates saavad andmed kätte kõik võrgus kättesaadavad moodulid. Näites luuakse ühendus ühe soovitud mooduliga, misjärel saab nuppe vajutades vastastikku muuta moodulite LED-ide olekut.

#include <homelab/usart.h>
#include <homelab/module/lcd_gfx.h>
#include <homelab/delay.h>
#include <homelab/pin.h>
 
//Lisame ZigBee mooduli toe
#include <homelab/module/zigbee.h>
 
// USART liidese määramine
usart port = USART(1);
 
// LEDid ja nupud määrata
pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) };
pin buttons[3] = { PIN(C, 0), PIN(C, 1), PIN(C, 2) };
 
// ZigBee moodulite max arv võrgus + broadcast aadress + 1
#define ZIGBEE_MAX_NODES 4
 
int8_t wait_button(uint16_t ms);
 
// Teiste leitavate zigbee moodulite aadresside massiiv
zigbee_node_t nodelist[ZIGBEE_MAX_NODES];
 
 
int main(void)
{
    uint8_t adr = 0;	//ühendatava mooduli jrk. nimekirjas
 
    // seadista LEDide ja nuppude I/O pordid
    for (int i=0; i<3; i++)
    {
        pin_setup_output(leds[i]);
        pin_setup_input(buttons[i]);
    }
 
    // USART liidese seadistamine ZigBee side jaoks
    usart_init_async(port,
                     USART_DATABITS_8,
                     USART_STOPBITS_ONE,
                     USART_PARITY_NONE,
                     USART_BAUDRATE_ASYNC(9600));
 
    // LCD ekraani algseadistamine
    lcd_gfx_init();
 
    // Ekraani puhastamine
    lcd_gfx_clear();
 
    // Taustavalgustuse tööle lülitamine
    lcd_gfx_backlight(true);
 
    //Oota kuni teisi ZigBee mooduleid otsitakse läbiümbrusest
    lcd_gfx_clear();
    lcd_gfx_goto_char_xy(0, 0);
    lcd_gfx_write_string("  ZigBee demo");
 
    lcd_gfx_goto_char_xy(0, 1);
    lcd_gfx_write_string("Otsin...");
 
    // Otsib ümbrusest teisiZigBee mooduleid
    // täidab nodelist massiivi leitud moodulite infoga.
    zigbee_find_nodes(port, nodelist, ZIGBEE_MAX_NODES);
 
    //lcd_gfx_clear();
    lcd_gfx_goto_char_xy(0, 1);
    lcd_gfx_write_string("Leitud:  ");
 
    // Kuvab ekraanil leitud moodulite nimekirja
    // (mis reale kirjutab, kust võtab adr, mitu tk max)
    zigbee_lcd_show_nodes(2, nodelist, ZIGBEE_MAX_NODES);	
    hw_delay_ms(3000);
    lcd_gfx_clear();
 
    // Kuvab ekraanil ühendamise teate
    lcd_gfx_goto_char_xy(0, 0);
    lcd_gfx_write_string("Yhendan...");
    lcd_gfx_goto_char_xy(0, 1);
    //kuvab ainult aadressi tagumise osa (8 tähemärki)
    lcd_gfx_write_string((nodelist + adr)->address64l);
 
    // Seadista ZigBee saatma infot valitud ZigBee nodele,
    // antud juhul esimesele [0]
    // (mis porti kasutab, kust võtab adr)
    zigbee_set_destination(port, &nodelist[adr]);
 
    // Joonistab ekraanile infot
    lcd_gfx_goto_char_xy(0, 0);
    lcd_gfx_write_string("  ZigBee demo");
 
    lcd_gfx_goto_char_xy(0, 1);
    lcd_gfx_write_string("Nupp1: LED1");
 
    lcd_gfx_goto_char_xy(0, 2);
    lcd_gfx_write_string("Nupp2: LED2");
 
    // Hoia meeles eelmist nuppu selleks, et vältida olukorda,
    // kus nuppu all hoides tuleb sada nupuvajutusi järjest.
    // Algatuseks olgu see -1 ehk ükski nupp pole all.
    int8_t previousButton = -1;
 
    // Lõputu tsükkel moodulite andmetevahetuse näitamiseks
    while (true)
    {
        int8_t button;	//muutuja nupuvajutuse registreerimiseks
 
        // Oota nuppu 1 millisekund
        button = wait_button(1);
 
        // Kui eelmises tsüklis oli nupp üleval ja nüüd on all
        if (previousButton == -1 && button != -1)
        {
            // teisenda nupu indeks liites A täht
	    // ja saada teisele moodulile
            // A täht on esimene nupp, B täht teine nupp jne
            usart_send_char(port, 'A' + button);
        }
 
        // Loe USART'st
        if (usart_has_data(port))
        {
            // loe bait, teisenda leds massiivi indeksiks
	    //ja muuda väljundit.
            pin_toggle(leds[usart_read_char(port) - 'A']);
        }
 
        // Jäta meelde mis nupp oli hetkel alla vajutatud
        previousButton = button;
    }
}
 
// Ootab nupu vajutust ms millisekundit.
//Kui tuleb nupu vajutus, tagastab vastava nupu järjekorra numbri
int8_t wait_button(uint16_t ms)
{
    // Vaikimisi -1 tähendab, et ükski nupp pole vajutatud.
    int8_t button_nr = -1;
    uint16_t counter = 0;
    do
    {
        // vaata kas mõni nupp on all
        for (uint8_t i=0; i<3; i++)
        {
            if (!pin_get_value(buttons[i]))
            {
                button_nr = i;
                break;
            }
        }
 
        // oota 1 millisekund
        hw_delay_ms(1);
 
        // suurenda millisekundi loendurit
        counter++;
    } while (button_nr == -1 && (counter < ms));
 
    return button_nr;
}

ENESEKONTROLL

Vastates alljärgnevatele küsimustele, saad proovida oma teadmisi antud teema kohta

Millist andmevahetusprotokolli kasutab ZigBee suhtlemaks mikrokontrolleriga?
Vali õige vastus

SPI
UART
USB
Ethernet

Milliseid lisafunktsioone omab XBee moodul?
Vali õiged vastused

USB andmeside
Analoog sisendid
Digitaal sisendid
Digitaal väljundid
Analoog väljundid

Sisestage käsk, mis viib XBee seadme AT käsureziimi?


Milline ZigBee võrgu topoloogia sobib lihtsaks andmevahetuseks 3 seadme vahel?
Vali õige vastus

Tähtühendus
Klasterühendus
Võrkühendus

Millises sagedusalas töötab ZigBee moodul XBee?
Vali õiged vastused

2,4 GHz
1,4 GHz
38 kHz
2,4 MHz

LISAMATERJAL

  1. Robootika Kodulabor - Kommunikatsioonimoodul
  2. Robootika Kodulabor - ZigBee juhtmevaba side
  3. Digi International - XBee/XBee-PRO RF Modules - andmeleht
  4. ftp://ftp1.digi.com/support/documentation/90000982_B.pdf

Teoreetilise osa ja näitekoodi algtekstide autor: Raivo Sell ja Eero Väljaots