upc eetac_1

Projecte P17. UART. Zigbee


XBee: Xarxa de sensors sense fils en malla

En aquest projecte la idea és experimentar a mode d'introducció amb sensors enllaçats via radio. S'usaran els mòduls XBee que es comunicaran mitjançant el port sèrie amb la Raspberry Pi, amb l'Arduino o bé directament amb el PC per al comandament del sistema i processament de senyals.

Pels diferents escenaris proposats necessitarem fins a 4 mòduls XBee S2 com els descrits aquí.  Ara bé, com sempre, anirem pas a pas, intentant començar pels passos més senzills tal com es recomana a la majoria de bibliografia de refèrencia.

Presentació dels tutorials (pptx) (pdf)

 

1. Instal·lació del programari XCTU de configuració dels mòduls XBee

Conceptes bàsics sobre les xarxes sense fils

Xarxes Zigbee. Instal·lem en un PC Windows el programari XCTU de control i configuració dels mòduls XBee. Es descarrega gratuïtament des d'aquesta web. Aquest és un bon tutorial per començar a practicar amb la configuració dels mòduls XBee.

Un mòdul XBee típic és el de la Fig. 1. Té capacitat per treballar en xarxa sense fils amb diverses topologies i a més, permet la interfície de sensors i actuadors.

Xbee S2Chttps://sites.google.com/site/xbeetutorial/_/rsrc/1315198423396/example/arduino-test-program-for-xbee/Xbee_schema_elettrico_s.jpg

Fig. 1. Cablejat del mòdul S2C i funcionament en PC, o en terminal PuTTY de la Raspberry Pi.

 

Per configurar aquests dispositius i organitzar la xarxa sense fils cal usar el programa XCTU.

XCTU

Fig. 2. Programari XCTU.

També usarem el programa PuTTY ja instal·lat anteriorment a la pràctica P4, o bé el Tera Term, per accedir més fàcilment a la configuració dels mòduls XBee des de la pròpia Raspberry o qualsevol altre PC o sistema operatiu.

Coordinator

Fig. 3. Sessió de terminal sèrie per accedir a la configuració del mòdul XBee. La llista de comandes AT més usual.

 

 

 

2. Sensors amb Arduino

Per començar hem de situar-nos en els conceptes bàsics sobre els sensors i actuadors electrònics.

Convé recordar que és senzill de muntar sensors amb la targeta microcontroladora Arduino. A més, ofereix la capacitat de processament i visualització de les dades. Per exemple, com veieu a la Fig. 4, un sensor digital  d'humitat relativa i temperatura amb interfície 1-wire. Sensor DHT11. Esquema del Fritzing. Exemple de programari. Fotografia del muntatge. Cal instal·lar les biblioteques DHT a l'entorn de desenvolupament per tal de compilar correctament el codi.

WSN_1

Fig. 4.  Exemple de sensor d'humitat relativa i temperatura condicionat amb Arduino.

 

3. Sensors amb Raspberry Pi

Aquest ha estat l'objectiu dels projectes que van del P9 al P16 d'aquesta sèrie dedicada al descobriment de la Raspberry.

Per exemple, aquest muntatge del projecte P13 mostra com realitzar la interfície entre un LCD I2C i una Raspberry Pi. Dibuixeu el circuit amb l'aplicatiu Fritzing cercant els components bàsics: Raspberry Pi,  convertidor de nivells de voltatge i dispositiu LCD. El programa està fet en Python. Des d'una finestra terminal Linux, amb el comandament "i2cdetect -y 1" observarem quina adreça I2C ocupa el dispositiu LCD.

RPi-LCD

Fig. 5. Fotografia del muntatge. El visualitzador LCD (5 V) està connectat mitjançant un adaptador de tensió de 3.3 V (Raspberry Pi) a 5 V. 

 

4. Connectem un sensor basat en Arduino a una XBee

Es tracta de la detecció d'un simple interruptor del qual se'n transmet la informació a través d'un mòdul XBee encaminador o dispositiu terminal cap al coordinador. Representeu el circuit electrònic i muntatge. El programa.

Tera Term

Fig. 6. Recepció de missatges ASCII des del mòdul sensor.

 

5. Connectem un sensor basat en Raspberry Pi a una XBee

 

Un enllaç per començar: Get started with XBee Python library

 

6. Xarxa punt a punt entre dos mòduls XBee. Comunicació AT.

Projecte d'un timbre sense fil en la versió més senzilla. Un Arduino estarà al cas de l'estat d'un polsador. Tot seguit transmetrà mitjançant un XBee l'estat d'aquest polsador al coordinador/encaminador que actuarà de receptor, per exemple un altre Arduino que acciona un timbre.

  1. Mòdul emissor: el polsador. WSN_2. Dibuixeu el circuit electrònic i compileu aquest programa per l'Arduino.

polsador rebut

Fig. 7. Elaboració de missatges ASCII des del mòdul sensor construït amb Arduino. La recepció es realitza amb la connexió Tera Term del PC o des d'un terminal PuTTY de la Raspberry Pi . 

 

  1. Mòdul receptor: el timbre.  WSN_3. Dibuixeu el circuit en Fritzing per exemple, i correu aquest programa.

Timbre

Fig. 8. Un segon Arduino actua de receptor de missatges ASCII i acciona el timbre acústic.

A partir d'aquest muntatge bàsic es poden inferir projectes més elaborats, com ara el control remot d'un motor per una porta o persiana, o la connexió d'un teclat hexadecimal que amagui un codi d'accés de 4 símbols binàris.

 

7. Sensors amb XBee. Comunicació amb paquets API

Es tracta del primer exemple en el qual configurarem els mòduls XBee per treballar en API (Application Programming Interface). Aquest és el mode normal de funcionament en què es treballa amb paquets de dades entre mòduls ràdio. 

Per exemple, un sensor de temperatura connectat directament a l'XBee. Aquest es configura per mostrejar cada 5 s l'entrada analògica on hi ha  el sensor. La conversió A/D de la tensió s'envia en mode API a un receptor XBee connectat a un Arduino o una Raspberry Pi per tal de processar el senyal, calcular la temperatura i visualitzar-la.

Node sensor-transmissor XBee (Encaminador o dispositiu terminal)

1. Sensor analògic de temperatura LM35 i el seu condicionament per al convertidor A/D del mòdul XBee. Vegeu les notes de la Fig. 9 per esbrinar com es realitza la conversió.

notes

Fig. 9. Corbes de calibratge i condicionament. I l'equació que finalment ha de calcular l'Arduino per obtenir la temperatura mesurada pel sensor LM35. El voltatge de fons d'escala del convertidor A/D és 1,2 V. El convertidor és de 10 bit. 

El circuit del sensor està representat a la Fig. 10.

Xbee transmitter

Fig.10.  Transmissor Xbee que usa el seu convertidor A/D.

 2. Configuració del mòdul sensor XBee en mode API. Cal programar una entrada com analògica connectada al convertidor A/D. Prendrem l'entrada AD3. Vegeu com fer-ho a la Fig. 11. 

configuració

Fig. 11.  Paràmetres per  configurar el mòdul sensor XBee amb el programari XCTU.

 

Node receptor XBee (Coordinador)

Provarem diverses formes de comprovar que les dades es reben correctament.

3A. XCTU o port sèrie COM del PC: Coordinador XBee amb interfície FTDI - USB per comprovar la comunicació.

Comprovarem que el mòdul sensor efectivament és capaç de transmetre paquets de dades per la xarxa sense fils ZigBee mesurant la temperatura del sensor a la freqüència de mostreig  especificada. Vegeu la Fig. 11. Observarem les dades de la tensió convertida a una paraula digital de 10 bits en el propi terminal sèrie del PC (Putty, Tera Term) o bé en el canal de comunicació sèrie del programari XCTU.

paquets

 

Fig. 11. Exemple de paquets de dades digitals rebudes pel port sèrie del PC a la cònsola XCTU. Compte perquè amb la nova versió del XCTU, per aquesta mateixa configuració dóna el codi 0x90 en lloc del 0x92 per descriure el tipus de paquet.

3B. Receptor/coordinador XBee comunicant amb Arduino i processament de senyals.

En segon lloc, per aquesta aplicació usarem encara una altra shield (per al bus RS485) a la qual simplement connectarem el mòdul radio amb TX i RX. Vegeu la Fig. 12.  Dibuixeu el circuit amb Fritzing i useu aquest programa Arduino copiat del llibre de Charles Bell.

Necessàriament, per manejar ràpidament aquestes funcions d'alt nivell hem instal·lat (i modificat) la biblioteca XBee-Arduino disponible originalment a GitHub.

Més endavant, a partir de l'anàlisi de l'estructura i operacions realitzades pel programa, ja podem pensar en fer modificacions i estudiar a fons les possibilitats que ens dona la biblioteca de funcions. L'interès d'aquesta pràctica rau en l'anàlisi del paquet de dades en mode API que transmet el sensor Xbee (WSN_1) cap al node coordinador (WSN_4).

analogue analogue_2

Fig. 12.  Receptor XBee connectat al port sèrie de l'Arduino i exemple de representació en la finestra del monitor sèrie de la temperatura calculada per l'Arduino a partir de l'extracció de les dades rebudes en cada paquet transmès aplicant la funció de calibratge.

 

3C. Receptor/coordinador XBee comunicant amb Raspberry Pi i processament de senyals.

Per treballar amb la Xbee que es connectarà com un port sèrie, cal preparar la Raspberry Pi.

- Habilitar el port sèrie a partir del paràmetre en en fitxer /boot/config.txt. Així en tornar a arrancar, s'instal·la el port '/dev/ttyS0' que connectarem a la Xbee.

Copia de seguretat del fitxer de configuració, per si hi ha problemes:

sudo cp /boot/config.txt /boot/config.txt.old            

Edició per activar la UART col·locant l'últim paràmetre del fitxer a '1' --> enable_uart=1

sudo nano /boot/config.txt

Feu cntl X, i 'S' per escriure el fitxer.  Comproveu que ha quedat ben gravat llistant el fitxer:

cat /boot/config.txt

Reinicialitzem la Raspberry Pi per comprovar que disposem del port '/dev/ttyS0'

ls -la /dev

Veureu que si heu no heu treballar encara amb la 3, per defecte us donarà la Python 2.7.6. Per tant, hen de seguir aquests comandament per tenir les alternatives i poder seleccionar el Python 3. Hem de procurar que la versió per defecte del Python sigui el Python 3 (per exmeple 3.7 a gener 2020). Es poden fer córrer aplicacions en ambdós versions del Phyton, la 2 i la 3, però les biblioteques per la Xbee són només per la versió 3.

python --version

sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 1

update-alternatives --list python

De manera que a partir d'ara podreu triar la versió (a gener 2020 dóna la versió 3.7.3):

update-alternatives --config python

 

Per treballar amb els mòduls Xbee en Python i en la Raspberry Pi cal descarregar i usar la biblioteca de funcions. En aquest index PyPi en trobareu. N'hi ha diverses que funcionen de forma similar. Per exemple la Xbee i la Digi-Xbee en els repositoris trobareu també exemples d'aplicació.

 En aquest projecte hem usat la més sencilla Xbee que instal·larem amb el comandament pip (python package manager) des d'una finestra de comandes:

sudo pip install xbee

Que, con veieu a la documentació, també inclou la biblioteca PySerial com una dependència:

sudo pip install pyserial

 

Finalment doncs, amb les biblioteques de funcions preparades, ja podem muntar el circuit i carregar un exemple de programa en Python que llegeixi els paquets de dades provinents del transmissor, processi la informació i representi la temperatura en les unitats correctes. Com es mostra a la Fig. 13, en aquest cas, com que una shield Raspberry Pi disposa de la base especial XBee, ens estalviem el cablejat i la protoboard

sensor Xbee

Fig. 13.  Exemple de muntatge on l'XBee es connecta directament en mode sèrie TX-RX als terminals específics de la Raspberry Pi.

A partir del paquet de dades rebudes filtrem el parell de bytes que representen el voltatge mesurat i tot seguit implementem la funció que representa la corba de caligratge del sensor per representar-ne la temperatura. 


Es pot proposar una modificació senzilla: el node sensor XBee tranmitirà dades en prémer un polsador i aturarà la transmissió en premer una altre vegada. Així mateix, el receptor haurà de detectar que no hi ha transmissió i quedar-se en mode aturat en espera (standby o idle).

8. Conclusions i continuació

 

Aquesta ha estat una introducció a les comunicacions radio entre mòduls sensors. I a partir d'aquí hom pot pensar en desenvolupar aplicacions cada vegada més complexes, començant per instal·lar en els mòduls diferents protocols de comunicació per observar-ne les diferències. Com es muntaria  una xarxa redundant mesh, de manera que si un dels XBee falla la comunicació es deriva per un altre camí fins arribar a destinació?  Quin és el consum dels nodes sensors? Com col·lcar-los una fracció del temps en mode "sleep" per estalviar enerrgia? Etc.

Altres referències similars

 

- [1] XBee per Arduino i Raspberry Pi usant llenguatge C i la biblioteca ArduPi

- Warren J-D, Adams, J., Molle, H., Arduino robotics, pp. 316.

 

Altres materials d'interès

- Biblioteca de funcions XBee - Arduino

- Exemple de tutorial per arrencar a treballar amb XBee i Arduino.