Primer: 3 burn_node_id - malikolibri/contiki-iris-examples GitHub Wiki
Pokretanjem login debug konzole dobija se ispis sličan:
Rime started with address 192.117
MAC c0:75:00:00:00:00:00:00
CSMA CX-MAC, channel check rate 8 Hz, radio channel 26
Contiki 2.7 started. Node id 0
Iz gornjeg isečka se može zaključiti da se čvor identifikuje na mreži uz pomoć Rime adrese, MAC adrese. U kasnijim primerima, kada se bude koristio IPv6 komunikacioni stek, biće prikazana još i IPv6 adresa. Međutim, sve adrese na jednom čvoru potiču iz istog izvora (vidi se da je c0 zapravo heksadecimalni zapis za 192 i 75 za 117). Taj izvor je DS2401 ROM memorija koja nosi fabrički upisan, jedinstveni serijski broj koji se može isčitati 1-wire komunikacijom. Time je praktično osigurana jedinstvenost IP adrese u okviru senzorske mreže. DS2401 serijski broj se takođe koristi za dobijanje pseudo random broja.
Osim pomenutih adresa, postoji još jedan identifikator koji je tu kako bi i ljudskom oku omogućio jasno razjašnjavanje čvorova - Node id. Kao što se vidi iz gore priloženog, Node id je obično 0, ako prethodno nije podešen. Node id se čuva u EEPROM memoriji mikrokontrolera, a ContikiOS ima funkcije kojima se manipuliše Node id-om.
burn_node_id.c:
#include "contiki.h"
#include "stdio.h"
#include "sys/node-id.h"
/*---------------------------------------------------------------------------*/
PROCESS(setID, "Upis node_id");
AUTOSTART_PROCESSES(&setID);
/*---------------------------------------------------------------------------*/
PROCESS_THREAD(setID, ev, data) {
PROCESS_BEGIN();
watchdog_stop();
static struct etimer et;
#ifdef NODEID
int new_node_id = NODEID;
printf("Node id za upus: %d \n", new_node_id);
node_id_burn(new_node_id);
printf("Promena node ID-a...\n");
node_id_restore();
printf("Node ID je setovan na: %i \n", node_id);
#else
while(1){
node_id_restore();
printf("Node ID je setovan na: %i \n", node_id);
etimer_set(&et, CLOCK_SECOND*2);
PROCESS_WAIT_EVENT_UNTIL(ev == PROCESS_EVENT_TIMER);
}
#endif
PROCESS_END();
}
Pošto je zgodno koristiti istu aplikaciju za upisivanje Node-id na više čvorova, korišćene su preprocesorske direktive i Makefile koji omogućuje zadavanje NODEID pri pozivanju make komande. Ukoliko NODEID nije zadat aplikacija će biti zarobljena u while petlji gde će se vršiti ispis več postojećeg Node id-a.
Makefile:
CONTIKI = ../..
ifdef NODEID
CFLAGS += -DNODEID=${NODEID}
endif
include $(CONTIKI)/Makefile.include
Primer upisa Node id čija je vrednost 3:
make TARGET="iris" burn_node_id.u NODEID=3