This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lab11 [2016/01/19 19:20] dan.tudose created |
lab11 [2016/01/19 19:34] (current) dan.tudose [Contiki - Simulatoare de Retea] |
||
---|---|---|---|
Line 4: | Line 4: | ||
Arhitectura unei retele de senzori wireless este data in figura de mai jos: | Arhitectura unei retele de senzori wireless este data in figura de mai jos: | ||
- | {{:si:lab: | + | {{: |
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). | 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). | ||
Line 15: | Line 16: | ||
Simulatorul accepta un format de intrare al datelor IntelHEX si ELF si are utilitati pentru monitorizarea stivei, setarea de breakpointuri si profiling. | Simulatorul accepta un format de intrare al datelor IntelHEX si ELF si are utilitati pentru monitorizarea stivei, setarea de breakpointuri si profiling. | ||
- | {{:si: | + | {{:943a26c0ef177a34cea1b698d84ac301.media.900x675.png?800|}} |
**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. | **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, | 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, | ||
- | {{:si:lab: | + | {{ :: |
In acest laborator veti invata sa folositi ambele simulatoare. | In acest laborator veti invata sa folositi ambele simulatoare. | ||
Line 33: | Line 35: | ||
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. | 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. | ||
+ | |||
+ | ==== Exercitii ==== | ||
+ | |||
+ | **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 " | ||
+ | |||
+ | HINT: Uitati-va in ”core/ | ||
+ | |||
+ | 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: | ||
+ | < | ||
+ | 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 " | ||
+ | |||
+ | === Compilator === | ||
+ | |||
+ | * Compilatorul necesar este msp-gcc, puteți să îl downloadați de {{ http:// | ||
+ | |||
+ | ===== COOJA ===== | ||
+ | |||
+ | Pentru a folosi COOJA, trebuie sa respectati pasii urmatori: | ||
+ | |||
+ | 1. Instalati ant | ||
+ | <code bash> | ||
+ | |||
+ | 2. Rulati Cooja | ||
+ | < | ||
+ | ant run</ | ||
+ | |||
+ | 3. Creati o simulare noua: **File -> New Simulation**. Introduceti un nume la **Simulation Name** si apasati **Create** | ||
+ | |||
+ | 4. Creati un nou tip de nod: **Mote Types -> Create mote type -> Sky Mote Type**. Introduceti un **Description** (" | ||
+ | |||
+ | 5. Adaugati noduri in simulare: **Motes -> Add motes of type -> [" | ||
+ | |||
+ | Cele 5 noduri sunt create la coordonate aleatorii din plan. Puteti sa alegeti si o alta dispunere a nodurilor folosind optiunile de **Random Position, Linear, Ellipse,** sau **Manual Positioning**. | ||
+ | |||
+ | 6. Asigurati-va ca aveti **Plugins -> Log Listener and Plugins -> Simulation visualizer** activat. | ||
+ | |||
+ | 7. Apasati **Start** in panoul de control pentru a porni simularea. | ||
+ | |||
+ | Primul lucru pe care trebuie sa-l faceti este sa verificati daca nodurile comunica intre ele. COOJA foloseste un model defaul pentru propagarea semnalelor radio numit Unit Disk Graph Model (UDGM). Selectati din meniul vizualizatorului UDGM si il veti putea vedea in simulare. | ||
+ | |||
+ | Cercul verde reprezinta raza de transmisie a nodului central, adica nodul poate comunica cu orice alt nod aflat in interiorul cercului respectiv. | ||
+ | |||
+ | Cercul gri reprezinta zona de interferenta. Daca un nod este in aceasta zona, el nu poate primi pachete de la alte noduri, daca nodul selectat trimite date in acel timp. Cu alte cuvinte, zona respectiva este o zona de bruiaj in care transceiverul nodului face imposibila comunicatia corecta a altor noduri. | ||
+ | Daca vreti sa faceti doua noduri sa comunice, aveti doua optiuni: fie trageti de un nod pana cand ajunge in raza de comunicatie a celuluilalt nod, fie mariti raza de comunicatie din meniul ferestrei sau din meniul care apare la right-click pe nodul respectiv. | ||
+ | |||
+ | ==== Exercitii ==== | ||
+ | |||
+ | **Exercitiul 1:** | ||
+ | Acest exercitiu va va arata cum sa folositi structurile de broadcast in rime pentru a trimite un mesaj catre base-station. | ||
+ | Deschideti exemplul pe care l-ati compilat mai sus (rime/ | ||
+ | <code C> | ||
+ | Inlocuiti //Hello// cu mesajul vostru si modificati al doilea parametru pentru noua lungime a lui. Incercati sa nu folositi cuvinte de patru litere. Recompilati codul si simulati in COOJA. Observati ce se intampla. | ||
+ | |||
+ | **Exercitiul 2:** | ||
+ | Folosind unicast, trebuie sa trimiteti un mesaj de pe un nod catre un singur alt nod. Pentru aceasta folositi codul din **rime/ | ||
+ | |||