This is an old revision of the document!
Principalii “beneficiari” ai sistemului de operare Contiki sunt nodurile senzoriale dintr-o retea de senzori wireless (WSN). Caracteristicile acestor noduri (cost redus, capabilitati reduse de procesare si memorie si rezerve limitate de energie) fac imposibila rularea unui sistem de operare avansat. Din aceasta cauza, folosirea unui sistem “low-level” cum este Contiki este mai mult decat adecvata.
Arhitectura unei retele de senzori wireless este data in figura de mai jos:
Dupa cum se poate observa, grosul retelei este format din zeci, poate chiar sute de noduri senzoriale care ruleaza toate mai mult sau mai putin acelasi program. De cele mai multe ori programul implica un proces care colecteaza date din mediu si le trimite catre un nod sink si un alt proces care executa eventualele comenzi venite de la coordonatorul retelei (nodul gateway).
De cele mai multe ori este necesara dezvoltarea unui algoritm distribuit care sa ruleze la nivelul intregii retele pentru a permite schimbul de mesaje intre noduri intr-o maniera multi-hop. Implementarea real-life a unui algoritm de acest gen este greoaie, in special din cauza numarului mare de noduri care trebuie reprogramate frecvent in faza de development.
Din acesta cauza, in fazele incipiente ale dezvoltarii se prefera folosirea unui simulator de retea. Contiki foloseste pentru acest scop doua simulatoare: Mspsim la nivel de nod senzorial si Cooja pentru simularea unei intregi retele de noduri.
MSPsim este un emulator pentru seria MSP430 de procesoare ultra-low power de la Texas Instruments. Acestea sunt folosite pe nodurile senzoriale Tmote Sky. Simulatorul accepta un format de intrare al datelor IntelHEX si ELF si are utilitati pentru monitorizarea stivei, setarea de breakpointuri si profiling.
COOJA este un simulator de retea scris in Java si este destinat simularii retelelor de senzori wireless care ruleaza Contiki. COOJA poate sa simuleze retele de senzori eterogene, unde fiecare nod poate fi diferit fata de restul, nu numai din perspectiva softului pe care il ruleaza dar si din punctul de vedere al hardware-ului. Un nod simulat de COOJA are trei proprietati de baza: memoria de date, tipul nodului si perifericele hardware. Simulatorul poate sa execute cod in doua moduri: fie cod nativ compilat pentru procesorul gazda, fie folosind emulatorul MSPsim. COOJA poate sa simuleze si noduri non-Contiki, implementate in Java, cu avantajul ca timpul de simulare este cu mult imbunatatit fata de variantele precedente.
In acest laborator veti invata sa folositi ambele simulatoare.
MSPsim poate fi rulat foarte simplu la compilarea codului. Comanda urmatoare trebuie sa va porneasca o instanta de MSPsim si sa va simuleze exemplul de hello-world:
cd examples/hello-world make TARGET=sky hello-world.mspsim
In una dintre ferestrele deschise (USART1 Port Output) veti vedea liniile de text printate de secventa de boot a Contiki. MSPsim include si LED-uri care pot fi aprinse si butoane care pot fi apasate, exact ca in cazul unei platforme reale. Incercati sa apasati pe butonul de reset si vedete ce se intampla.
Exercitiul 1: Extindeti programul hello-world.c pentru a face ledurile sa clipeasca (introduceti un timer) si pentru a printa un text pe interfata seriala la apasarea butonului “User” (introduceti un eveniment).
HINT: Uitati-va in ”core/dev/leds.h” si “core/dev/button-sensor.h” si nu uitati sa faceti printf
O aplicatie foarte folositoare este cea de shell. Aceasta va permite sa aveti un shell minimal peste conexiunea seriala sau chiar peste legatura radio.
Exercitiul 2: Rulati aplicatia de shell pentru Tmote Sky in MSPsim:
cd examples/sky-shell make TARGET=sky sky-shell.mspsim
Comanda help listeaza toate comenzile disponibile. Incercati-le si jucati-va cu ele.
Exercitiul 3: Folosind codul deja existent, implementati o noua comanda pentru shell care sa comande aprinderea sau stingerea LED-ului.
HINT: Folositi “apps/serial-shell/serial-shell.h” si “apps/shell/shell.h”