Popis bezdrôtového štandardu ZigBee a modulov XBee
Router:
musí sa najskôr pripojiť do siete aby mohol posielať, prijímať alebo preposielať dáta
po pripojení povoľuje routerom a koncovým zariadeniam pripojiť sa do siete
po pripojení môže preposielať dáta
nemôže byť v režime spánku
môže dočasne ukladať dáta pre koncové zariadenia
Koncové zariadenie:
musí sa najskôr pripojiť do siete aby mohol posielať alebo prijímať dáta
nemôže povoliť ostatným zariadeniam pripojiť sa do siete
dáta ostatným zariadeniam môže len cez router alebo koordinátor
môže byť v režime spánku a tak ušetriť svoju energiu
Obr. č. 2.2 – Druhy topológie siete
Špecifikácia modulu XBee PRO 2:
Napájacie napätie: 3.0 – 3.4 V
Prúdový odber:
o Pri vysielaní – 295mA pri 3,3 V
o Pri prijme – 45mA pri 3,3 V
o Pri nečinnosti (Prijímač vypnutý) – 15mA
o Pri spánku – 3,5uA
Dosah:
o 90 m v budove
o 3200 m vo voľnom priestranstve
Vysielací výkon: 50mW
Citlivosť prijímača: -102 dBm
Rýchlosť sériového rozhrania (softwarovo nastaviteľné): 1200 bps – 1 Mbps
Frekvenčné pásmo: 2,4 GHz
Obr. 3.1. Bloková schéma bezdôtového prenosu dát pomocou XBee modulov
Každý dátový bajt posielaný cez UART pozostáva zo štartovacieho bitu (log. 0), 8 dátových bitov a stop bitu (log. 1). Na obrázku č. 3.2 možno vidieť vyslanie decimálneho čísla 31.
Obr. 3.2. Prenos dát po asychrónnej sériovej linke
Rýchlosť, paritu a počet stop bitov možno nastaviť pomocou AT príkazov v XBee module.
Vysielanie dát:
Dáta posielame cez UART na pin DIN. Prijaté dáta sa ukladajú do vyrovnávacej pamäti (Serial Receive Buffer) pokiaľ nebudú spracované. Ak je to možné, dáta sú preposielané ihneď vysielaču.
Možné problémy:
– Ak prijímač prijíma súvislí tok dát, dáta vo vyrovnávacej pamäti nebudú odoslané pokiaľ tento tok neustane
– Ak modul vysiela packet dát, modul musí vyhľadať cieľovú adresu a nájsť cestu k nej. Po odoslaní dát modul môže opätovne vyslať dáta, ak neprišlo potvrdenie že dáta boli doručené v poriadku. Tento problém môže spôsobiť oneskorenie odoslania nachádzajúcich sa vo vyrovnávacej pamäti.
Aby sme týmto problémom zabránili (hlavne pri posielaní veľkého množstva dát), musíme kontrolovať stav bitu CTS (Clear to Send). Keď vyrovnávacej pamäti chýba 17 bajtov k jej naplneniu bit CTS sa nastaví do log. 1, čo dáva pokyn zariadeniu aby zastavil posielanie dát. Tento signál sa deaktivuje (nastaví do log. 0), pokiaľ voľne miesto vyrovnávacej pamäti presiahne 34 bajtov.
Prijímanie dát:
Dáta prijaté cez prijímač putujú do vyrovnávacej pamäti (Serial Transmit Buffer). Dáta sú následne posielané na výstupný pin DOUT ihneď po ich prijatí, pokiaľ nie je nastavený bit RTS (Ready to Send). Pokiaľ je bit RTS nastavený (log. 1), modul uchováva dáta vo vyrovnávacej pamäti a čaká na nastavenie bitu do log. 0.
Možné problémy pri ktorých môže dôjsť k strate dát:
– Ak sa dáta prijímajú vyššou rýchlosťou ako je rýchlosť odosielania dát cez UART
– Ak zariadenie zastavilo prenos dát pomocou RTS.
– Pri obidvoch problémov vzniká hromadenie dát vo vyrovnávacej pamäti. Pri jej pretečení dôjde k ich strate.
– Po prijatí dát posiela modul potvrdzujúcu správu o úspešnom prijatí dát.
Obr. 3.3. Vnútorná bloková schéma modulu (vysielanie a prijímanie dát)
Transparentný mód:
V tomto režime primárne funguje zariadenie ako bezdrôtová sériová linka.
Dáta sú posielané na pin modulu DIN a následne sú vyslané na iný modul, kde sa dáta odošlú na pin DOUT.
Na nastavenie modulu slúži command mód. Pred vstupom do command módu odošle XBee modul všetky dáta z prijímacej vyrovnávacej pamäti.
Aby sme mohli vstúpiť do Command módu musíme vykonať nasledovný postup:
– Vyčkáme ochranný interval (závisí od nastavenia GT – Guard time). Počas tohto času nesmieme vyslať žiadne dáta do modulu
– Pošleme tri ASCII znaky „+++“ (možno zmeniť nastavením CC – Command sequence Charakter)
– Opäť vyčkáme ochranný interval (GT).
Pri úspešnom vstupe do command módu nám modul pošle cez UART odpoveď „OK
“. Následne môžeme posielať modulu príkazy na vyčítanie alebo zmenu jeho nastavení.
Príkazy majú nasledovný tvar: predpona AT, príkaz, medzera, parameter príkazu a znak
Tvar AT príkazu možno vidieť na Obr. č.3.4.
Po každom command príkaze počkáme na potvrdenie príkazu prijatím „OK
“. V prípade že príkaz nebude prijatý správne, príde odpoveď „ERROR
.“
Keď posielame príkaz na zistenie stavu určitého parametru, ako odpoveď nám príde hodnota tohto parametra.
Command mód zariadenia trvá len určitý čas. Tento čas je definovaný nastavením hodnoty CT (Command Mode Timeout). Pokiaľ chceme ukončiť command mód ešte pred týmto časom vyšleme príkaz „ATCN
“.
API mód:
API rozranie je alternatívou k transparentému rozhraniu, rozširuje možnosti zariadenia pri interakcii so sieťou. Dáta vstupujúce a vystupujúce z modulu sú vysielané v rámcoch, ktoré obsahujú udalosti ktoré sa dejú vnútri modulu. Rámec odoslaný do modulu musí obsahovať dátový rámec (prenášané dáta) a príkazový rámec (príkazy slúžiace k nastaveniu parametrov modulu).
Rámec prijatý z modulu obsahuje dátový rámec, príkazový rámec (odpoveď na príkazy) a oznámenie udalosti (čo sa deje v module).
Výhody API rozhrania:
– Možnosť posielať dáta bez predchádzajúcej konfigurácie adries, všetko je súčasťou API paketu
– Je známy odosielateľ paketu, pretože jeho adresa je uvedená v prijatom packete
– Možno odoslať packet naraz všetkým zariadeniam
– Možnosť nastavenia vzdialeného zariadenia
– Obsahuje kontrolný súčet, čo zlepšuje ochranu proti vzniku chýb
Rozhranie API ponúka dva možnosti prenosu. Normálny prenos a prenos s escape znakmi.
Nasledujúce znaky by sa nemali na sériovej linky vyskytnúť:
– 0x7E – oddeľovací znak nového packetu
– 0x7D – escape znak
– 0x11 – XON – znak pre softvérovú kontrolu dátového toku pri sériovej komunikácií
– 0x13 – XOFF – rovnako ako predchádzajúci znak
Nežiaduce bajty filtrujeme tak, že pred neho vložíme escape znak (0x7D) a k bitu pričítame hodnotu 0x20. Režim je indikovaný zároveň cez parameter „AP“. Základná je hodnota 0 je pre transparentný mód, 1 pre API rozhranie a 2 pre API rozhranie s escape znakmi.
Štruktúra API packetu teda vyzerá nasledovne:
Bajt | Popis |
0 | Oddelovač packetu – má hodnotu 0x7E |
1-2 | Veľkosť API štruktúry packetu vrátane API identifikátora |
3 | API identifikátor |
4-N | Dátová časť packetu |
N+1 | Kontrolný súčet |
Prvý bajt je štartovací znak 0x7E, ktorým treba začať každý API dátový rámec.
V poradí 2. a 3. bajt udáva veľkosť API štruktúry, teda počet bajtov.
API identifikátor určuje aký API príkaz bude obsiahnutý v dátovej časti packetu.
Zoznam podporovaných API príkazov možno vidieť v tabuľke.
API identifikátor | Hodnota |
Modem status | 0x8A |
AT command | 0x08 |
AT Command – Queue Parameter Value | 0x09 |
ZigBee transmit Request | 0x10 |
Explicit Addressing ZigBee Command Request | 0x17 |
Create Source Route | 0x21 |
AT command Response | 0x88 |
Modem Status | 0x8A |
ZigBee Transmit Status | 0x8B |
ZigBee Receive Packet (AO=0) | 0x90 |
ZigBee Explicit RX indicator (AO=1) | 0x91 |
ZigBee IO Data Sample Rx indicator | 0x92 |
XBee Sensor Read Indicator (AO=0) | 0x94 |
Node Identification Indicator (AO=0) | 0x95 |
Remote Command Response | 0x97 |
Over-the-Air Firmware Update Status | 0xA0 |
Route Record Indicator | 0xA1 |
Many-to-One Route Request Indicator | 0xA3 |
Každý API packet sa musí ukončiť kontrolným súčtom. Má veľkosť 1 bajt. Výpočet sa počíta od 1. bajtu s API identifikátorom až po posledný bajt dátovej časti packetu. Kontrolný súčet možno vypočítať nasledovným vzťahom:
PAVEL BADIN,2011, SYSTÉM BEZDRÁTOVÉHO PŘENOSU DAT ZE SNÍMAČE Z OTOČNÉ MEŘICÍ STOLICE, Bakalárska práca, ČVUT
Viktor Černý,2009,Správa prvků bezdrátové sítě, Diplomová práca, ČVUT
Prepáčte, ale pred zanechaním komentára sa musíte prihlásiť.
Uh, Xbee… skonstruoval som siet, pozostavajucu z 120-tich Xbee zariadeni, v piatich sietach, fyzicky sa prekryvajucich, ako nahradu existujuceho RS485 spojenia s jednoduchym round-robin prenosom od jedneho mastera k viacerym slave-om a musim uznat, ze to bola a doteraz je najvacsia nocna mora, aku som vo svojom profesnom zivote zazil – vdaka modulom Xbee.
Xbee moduly su fajn ked ide o zriedkavy prenos dat medzi dvomi, tromi.. trebars piatimi zariadeniami na kratku vzdialenost; ak sa implementuje dobry komunikacny protokol s korekciou chybajucich dat.
No ak chce clovek simultanny prenos na jednom kanale ale s viacerymi subkanalmi (ID), obcas dokonca aj simultanny prenos na viacerych kanaloch, pripadne je v ceste signalu (hoci aj mala) pohybujuca sa prekazka (napr. prechadzajuci clovek), nedajboze rusenie alebo bohvieco ine… zacina masaker, vypadky spojenia.
Pretoze je cela inteligencia (nech sa za tymto slovom ukryva cokolvek) ukryta v moduloch, ani besna svina netusi, co robi problemy.
Cize tie Xbee moduly vyzeraju dobre, na stole to funguje, ale akonahle sa siet modulov zvacsi a prenesie sa do realneho prostredia, zacne skutocna sranda. Inak to chodi dobre 🙂