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