Sei sulla pagina 1di 37

Sensor TAG: istruzioni per l’uso

Approfondiamo la conoscenza
dei concetti di base che ci
serviranno per utilizzare la
tecnologia Sensor TAG.
Prima Puntata.

di PIERO BOCCADORO

SENSOR TAG:
istruzioni per l’uso
S impleLink Sensor Tag è una soluzione
integrata di alto livello tecnologico che Texas
Lo standard 802.15.4 e i Beacon
1
Per comprendere come avviene la comunicazione
Instruments ha messo sul mercato “strizzando tra dispositivi Bluetooth Low Energy è
l’occhio” all’Internet delle Cose (Internet of necessario analizzare il livello fisico e MAC
Thing, o IoT) e dando agli sviluppatori la della comunicazione, così come da specifica
possibilità di sperimentare il loro primo progetto IEEE 802.15.4 e suo emendamento. A partire
di comunicazione wireless, automazione dal protocollo Zigbee, che si appoggia a queste
industriale o domotica, partendo da una scheda linee guida per i livelli più bassi dello stack
estremamente performante. protocollare ISO/OSI, vediamo il funzionamento
In questo tutorial offriremo una panoramica delle reti WPAN (Wireless Personal Area
completa di tutto quello che l’Internet delle cose Network), iniziando dalle frequenze di interesse:
significa e che lo sviluppo di firmware del caso stiamo parlando della banda ISM (Industrial,
comporta, ivi compresi gli strumenti utili per Scientific and Medical) e in particolare ci
sviluppare sia sulla soluzione TI, sia su tutte le riferiamo a valori di 2,4 GHz adottati su scala
altre cui faremo riferimento. mondiale, 868 MHz per l’Europa e 915 MHz
Ma prima è necessario muovere alcuni passi nella per gli USA. La nascita dello standard IEEE
giusta direzione, perciò prima di tutto proviamo 802.15.4, come del resto di tutti gli standard di
a capire che cos’è l’Internet delle cose, su che comunicazione, ma anche di tutti i protocolli a
cosa si basa e come si passa dalla filosofia di livello operativo (quindi, per esempio, sanitario)
interconnessione al dispositivo fisico connesso. è il risultato di un percorso di evoluzione che
Per capirlo è necessario fare un passo indietro ed porta alla definizione di necessità comuni e dei
imparare insieme alcuni concetti di base. criteri accettati e da rispettare al fine di ottenere

Elettronica In ~ Maggio 2016 115


Sensor TAG: istruzioni per l’uso
determinati obiettivi. In questo caso ci stiamo potranno essere più piccoli, consumare di
riferendo ad esigenze relative alla messa in meno e quindi non richiedere prestazioni
opera di reti di telecomunicazioni senza fili, elevate. Naturalmente, per poter gestire una
in grado di gestire sensori ed attuatori che rete e farla funzionare correttamente, sarà
comunichino a distanze a corto raggio (siamo indispensabile che ci sia almeno un FFD,
nell’ordine della decina di metri), riducendo che svolga il ruolo di PAN Coordinator e
da un lato i costi di realizzazione del sistema che sia in grado di organizzare il traffico di
e dall’altro la complessità dello stesso, senza rete. La gestione di quest’ultimo può essere
impattare sul consumo energetico. anche molto complicata dal fatto che in
La necessità di uno standard è, inoltre, ambito wireless un cambio di polarizzazione
una risposta globale alla domanda di o l’allineamento che varia, possono creare
omologazione di sistemi proprietari che fenomeni di interferenza oppure di
altrimenti imporrebbero soluzioni non attenuazione, locali, che rischiano di inficiare
condivise e costi potenzialmente inaccessibili. il funzionamento della rete, soprattutto per
Senza contare, poi, che la possibilità di comunicazioni a corto raggio.
aggiornare i sistemi, sia nell’hardware Quindi se i ruoli possono essere differenziati,
sia nel software, per le mutevoli esigenze le prestazioni possono variare e le specifiche
che nel tempo potrebbero manifestarsi, di funzionamento impongono strumenti
risulterebbe altrimenti impossibile o molto differenti; anche l’applicazione degli stessi
difficoltoso, il che si palesa come problema all’interno di una topologia piuttosto che
soprattutto quando si tratta di investimenti un’altra in qualche modo suggeriscono una
piuttosto ingenti. Un esempio di tutto questo destinazione d’uso e pertanto un caso reale
è l’USB, il risultato di un lavoro di ricerca di applicazione della topologia a stella può
e di valutazione di tutte le interfacce di essere l’automazione dell’ambiente domestico,
comunicazione e connessione presenti sul quindi proprio la Domotica. È possibile
mercato (soprattutto in ambito industriale) anche che questo schema venga applicato
al fine di ottenere un livello fisico di nell’ambito dei videogiochi, piuttosto che
interconnessione tra dispositivi compatibile delle periferiche per Personal Computer.
con tutte le soluzioni e che garantisca velocità Diverso è il caso dell’ambito industriale, per
ed efficienza. esempio per catene di montaggio o magazzini
Sebbene in questo caso ci riferiamo a soluzioni intelligenti, in cui è possibile pensare a
wireless, è importante sottolineare che le più livelli di coordinamento con più PAN
medesime esigenze sorgono anche nella Coordinator.
realizzazione di reti cablate.
Stack e MAC
I dispositivi Ed ora, dal momento che abbiamo accennato
Vediamo adesso dispositivi, perché è al fatto che vi sono delle caratteristiche
importante specificare che all’interno di fondamentali per la comunicazione, è
questa tecnologia essi possono essere divisi in arrivato il momento di parlarne diffusamente.
due tipologie, rivestendo tre ruoli distinti. Le Iniziamo con la trasmissione vera e propria
tipologie sono FFD, che sta per Full Function e vediamo come vengono inviati i singoli
Device ed RFD, dove la R sta per Reduce. bit: parlando del data-rate, che per queste
Dal punto di vista operativo, queste differenze comunicazioni ha valori variabili tra 20 e 250
si manifestano nel loro ruolo all’interno della kbps, passando per 40 e 100. Naturalmente in
rete, dal momento che gli FFD possono essere questo caso non si fa confusione tra bit-rate e
coordinator e i secondi (dato che vengono baud-rate ma si intende la trasmissione del bit
semplificati anche nell’ambito dell’utilizzo come dell’elemento fondamentale.
delle risorse) “semplici” device. Queste Ci si riferisce anche a diversi tipi di topologia;
differenze si verificano soprattutto nella quelle a stella, per esempio, prevedono un
tipologia di dispositivo, per esempio semplici coordinatore al centro dell’intera rete ed i vari
interruttori o sensori, che non avranno la dispositivi a distanza di 1 “hop”, ovvero di un
necessità di elaborare grandi moli di dati e salto cioè con un solo grado di separazione.

116 Maggio 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Esistono, però, altre topologie all’interno Le frequenze su cui opera (da ricordare che
delle quali ciascun dispositivo opera come sono unlicensed band, ovvero libere) sono:
“pari” rispetto agli altri e pertanto ciascuno tre canali tra 868 e 868,6 MHz (Europa),
ha sempre a distanza unitaria almeno un 30 canali nel range 902÷928 MHz (Nord
altro dispositivo, senza che ciò comporti America), 2.400÷2.483,5 MHz (worldwide) e
alcun cambio in termini di ruoli nelle 3.100÷10.600Mhz (UWB introdotta dalla draft
comunicazioni, perché ciascuno di essi opera 2007 e variabile da paese a paese).
nello stesso modo di tutti gli altri. Esistono Come per quello fisico, il livello MAC fornisce
poi altre possibilità, come ad esempio l’albero due servizi: MAC Data service e MAC
binario, ovvero una struttura che prevede management service. Questi si interfacciano
che ciascun nodo abbia collegati a sé altri due con l’unità di gestione del livello MAC ed
nodi differenti. access point denominato MLME-SAP (MAC
Si distinguono anche per indirizzo, perché sublayer management entity service access
il metodo di indirizzamento può prevedere point). Compito del MAC data service è
parametri di lunghezza differenziata; per l’abilitazione della trasmissione e ricezione
questo motivo esisteranno indirizzi espressi in delle unità dati del livello MAC, ovvero
forma breve, a 16 bit, oppure a 64. dei MPDUs (MAC protocol data units),
L’altro parametro fondamentale è la attraverso il PHY data service. Altre funzioni
possibilità che uno slot temporale, allocato rivestite da questo livello sono:
per la trasmissione oppure per la ricezione, • la gestione dei beacon;
sia “garantito”, ovvero sia in qualche modo • l’accesso al canale;
opzionato in maniera preferenziale ed allocato • la gestione dei GTS (guaranteed time slot);
non dinamicamente. • la validazione dei frame;
Come per tanti altri protocolli, anche nel caso • gli acknowledged frame delivery;
delle LR-WPAN, abbiamo un’architettura • le associazioni e dissociazioni dei
divisa in blocchi denominati livelli (layer). dispositivi;
Ognuno di questi è responsabile di una • la gestione di applicativi di sicurezza.
parte dello standard e offre servizi ai livelli
superiori. Lo standard IEEE 802.15.4 tratta Alcune funzioni generali delle LR-WPAN
unicamente i due livelli inferiori dello stack risultano piuttosto importanti per chiarire il
ISO/OSI (che conta un totale di sette livelli) funzionamento per cui è utile prendere subito
ovvero livello fisico e MAC. confidenza con nozioni quali: superframe
Il livello fisico (PHY) fornisce due servizi: structure, modello di trasferimento dei dati,
PHY Data Service e PHY Management struttura del frame, robustezza, consumo
Service Interfacing. energetico, sicurezza e precision ranging.
Questi si interfacciano con l’unità di gestione Tra questi, analizziamo, superframe
del livello fisico, denominata Physical Layer structure, una modalità di accesso al canale in
Management Entity (PLME). I pacchetti dati a regime di beacon abilitati. Non è obbligatorio
tale livello consistono in unità dati del livello utilizzare la struttura superframe, e può
fisico, PHY Protocol Data Units (PDDUs) essere disabilitata.
ed è compito del servizio PHY Data Service Il superframe non è altro che una divisione
abilitare la trasmissione e ricezione sul canale del tempo in 16 slot di uguali dimensioni
radio. Altre funzioni rivestite da questo livello ed è fortemente legata ai beacon poiché essi
sono: sono spediti periodicamente durante il primo
• attivazione e disattivazione delle slot di ogni superframe e la loro funzione
trasmittenti; è quella di sincronizzare i dispositivi
• energy detection (ED); connessi, identificare il PAN coordinator
• link quality indication (LQI); e descrivere la struttura del superframe.
• selezione del canale; Nell’intervallo fra due beacon avviene la fase
• clear channel assessment (CCA); Contention Access Period (CAP) durante la
• invio e la ricezione dei pacchetti su quale i dispositivi che vogliono comunicare
medium fisico. si contendono il canale tramite meccanismi

Elettronica In ~ Maggio 2016 117


Sensor TAG: istruzioni per l’uso
CSMA-CA. Ogni fase di negoziazione ha un trasmissione del livello precedente,
tempo definito e deve comunque terminare un processo che è noto con il nome di
entro il tempo previsto di invio del beacon “incapsulamento”. Vi sono, infatti, un header
successivo. Il superframe può avere porzioni ed un footer aggiunti, rispettivamente, come
attive e inattive: questo è importante per il nome suggerisce, all’inizio ed alla fine del
ottimizzare il consumo energetico. Durante frame il cui scopo è quello di identificare un
la porzione inattiva il coordinator può non metodo di riconoscimento del dato in fase di
interagire con la rete e attivare, quindi, una decodifica. Si distingue, nella specifica, una
modalità a consumo ridotto. Compito del serie di tipologie di struttura (Fig. 1):
coordinator è anche valutare se esistono • Beacon frame;
applicazioni che necessitano di bassi tempi • Data frame;
di latenza o di una specifica bandwidth. In • Acknowledgment frame;
questi casi può riservare delle porzioni di • MAC command frame.
superframe, fino a un massimo di 7 slot,
ed allocarli a GTS (guaranteed time slots) Altro punto cardine della questione è il
creando un periodo contention free (CFP). Il consumo energetico: l’ottimizzazione parte
contention free period, se esiste, segue sempre dal presupposto che tutti i dispositivi sono
il contention access period. prevalentemente alimentati a batteria,
per garantire facilità di installazione ed
Natura dei dati eventualmente consentire l’assistenza
A questo punto è necessario fare riferimento evitando potenziali disservizi della rete
alle modalità di trasferimento dei dati: elettrica che renderebbero il sistema meno
dal momento che esiste un coordinator ed affidabile. Dal momento che la necessità è
una serie di dispositivi ad esso connessi, garantire il funzionamento più prolungato
le modalità di comunicazione riguardano possibile, i dispositivi che si occupano della
la possibilità che il trasferimento dei trasmissione dovranno consumare quanto
dati avvenga da un dispositivo verso il meno possibile. Per ottenere questo risultato
coordinator, tra dispositivi oppure da non solo vengono inviati dati di “piccola”
coordinatore a dispositivo. dimensione, ma si opta anche per gestire
È importante ricordare che la topologia il tutto in maniera tale che l’accensione
all’interno della quale i sensori ed i dispositivi dell’impianto radio avvenga soltanto in caso
sono collocati determina anche il metodo e di trasmissione (o ricezione).
l’importanza della brevità delle connessioni, Rilevante è anche il duty-cycle, che in
oltre alla politica di gestione del segnalamento questo caso corrisponde al rapporto tra il
e della comunicazione dei dati. tempo di attività e il tempo complessivo di
Ma come sono organizzati effettivamente svolgimento del task da parte del sistema. In
i dati? Ebbene, quando si parla di questo una trasmissione, quindi, possiamo pensare
aspetto ci si riferisce alla struttura del al duty-cycle come il rapporto tra il tempo
frame, studiata in maniera tale da ridurre di trasmissione ed il tempo complessivo di
la complessità sempre, però, garantendo la transito dell’informazione dal punto di arrivo
robustezza su un canale che è comunque al punto di destinazione.
sempre soggetto ad interferenze. Esiste un’altra possibilità nel definire il duty-
Ciascun livello dello stack protocollare cycle: possiamo pensarlo come il tempo di
aggiunge dati rispetto al risultato della ON dell’impianto radio rispetto alla durata
della trasmissione. Da quanto detto si intuisce
Fig. 1
che la definizione non è univoca ma non per
questo risulta essere meno utile.

È tutto chiaro? Vediamolo...


Tutto quello di cui abbiamo parlato fino a
questo momento inquadra i requisiti generali
del sistema, con particolare riferimento a

118 Maggio 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

ciò che accade a livello fisico, dove sono


fondamentali le seguenti attività:
• attivare e disattivare il trasmettitore;
• energy detection (ED);
• link quality indicator (LQI);
• clear channel assessment (CCA) per carrier
sense multiple access collision avoidance
(CSMA-CA);
• selezionare la frequenza del canale;
• trasmettere e ricevere dati.
Fig. 2
Lo standard specifica quattro frequenze
operative ed altrettanti canali fisici (PHY): informazioni che servono per effettuare
• 868/915 MHz direct sequence spread trasmissioni prima di tutto di segnalamento
spectrum (DSSS) PHY, che utilizza la della presenza e poi di negoziazione del
modulazione binary phase-shift keying trasferimento di messaggi e questo viene
(BPSK); fatto in maniera multicast dal nodo al router
• 868/915 MHz DSSS PHY, che utilizza la ed in maniera unicast in senso opposto. La
modulazione offset quadrature phaseshift differenza è facilmente spiegabile, visto che
keying (O-QPSK); il nodo cerca i suoi simili nella topologia
• 868/915 MHz parallel sequence spread ma anche un coordinator e finchè non lo
spectrum (PSSS) PHY, che utilizza le trova prosegue. Quando questo passaggio
modulazioni BPSK e amplitude shift keying è andato a buon fine si passa ai messaggi
(ASK); successivi, che naturalmente rappresentano
• 2.450 MHz DSSS PHY, che utilizza la una comunicazione unicast in entrambe
modulazione O-QPSK. le direzioni. Tale meccanismo tutela la
possibilità che le reti siano composte da
Per rendere tutto più chiaro riportiamo in migliaia di sensori, magari operanti in
Fig. 2 un’immagine esplicativa di una delle condizioni ostili.
modulazioni: la BPSK; tale grafico sarà
importante per comprendere l’alternanza Le “mani” sul codice
dei simboli in funzione della fase del Ora che abbiamo inquadrato compiutamente
segnale, che in questo caso resta uguale tutta la problematica, lo standard e gli
a meno della componente angolare. I aspetti fondamentali e caratteristici di
canali di comunicazione sono identificati a queste comunicazioni, passiamo all’analisi
partire dall’intera banda di comunicazione di ciò che abbiamo per le mani, ovvero il
disponibile, calcolando l’estensione del SensorTag Simple Link. Sappiamo, infatti,
singolo canale anche in funzione della come deve funzionare ed abbiamo già visto
portante, e questo restituisce un numero totale nel dettaglio le sue specifiche tecniche;
di 27 canali disponibili su frequenze distinte. quindi ora possiamo passare all’analisi e alla
Questa considerazione è fondamentale caratterizzazione, nonché alla verifica del
soprattutto quando si decide di lavorare corretto funzionamento.
con dispositivi che devono effettuare salti di In Fig. 4 trovate la definizione dei parametri
frequenza (Channel Hopping) specie quando all’interno di una struttura il cui scopo
sono periodici, e decodifica coerente. è definire come sono organizzate le
L’ultimo aspetto dello standard, che resta da informazioni all’interno dei pacchetti che
analizzare, è lo scambio dei dati, ovvero il vengono comunicati sulla rete. Si tratta di
meccanismo di negoziazione del trasferimento una serie di variabili di diversa dimensione
in funzione della segnalazione del fatto che e di puntatori che classificano pacchetti ed
il nodo sia effettivamente disponibile ed in informazioni a partire dalla loro funzione,
“visibilità” del router: dalla Fig. 3 risulta arrivando alla destinazione d’uso. Questo
chiaro che il nodo ed il router si scambiano perchè, per esempio, il “creator” è da un

Elettronica In ~ Maggio 2016 119


Sensor TAG: istruzioni per l’uso
un numero di byte differente, ma soprattutto
all’interno dell’indirizzo non tutti i campi
hanno la stessa importanza. Su 8 byte in
esadecimale, infatti, i primi due sono relativi
al PAN-ID e saranno uguali per tutti mentre i
successivi saranno necessariamente differenti.
Quando si assegna un indirizzo e poi si
gestiscono gli slot di comunicazione e si
assegnano i canali e si negozia lo schedule
(sia quando ci si basa sui Beacon, sia
quando la gestione è centralizzata ed
affidata al DAGRoot), l’indirizzo può essere
Fig. 3 fondamentale. I canali comunicativi possono
lato un identificativo per il tracciamento del essere aperti tra mote successivi, soltanto in
pacchetto dati all’interno della rete, ma anche alcuni punti della topologia, oppure possono
il metodo col quale possiamo decidere se un essere dedicati. I canali, tra le altre cose,
pacchetto ricevuto va utilizzato oppure no. possono anche essere condivisi, il che vuol
Infatti all’interno di una rete composta da più dire che sullo stesso viaggeranno dati in
nodi il cui scopo è quello di inviare dati ad entrambe le direzioni TX ed RX (Fig. 6).
alcuni mote (parti elementari) e non ad altri, Dal momento che lo stack protocollare
la lettura dei parametri “creator” e “owner”
Fig. 5
può essere la condizione discriminante
per definire l’accesso al dato. La lettura
del pacchetto e del parametro “length”
è fondamentale, per esempio, durante
il processo di incapsulamento, perché il
pacchetto va allocato dinamicamente e quindi
prima di tutto va letta la lunghezza del dato
ricevuto e poi allocata nuova memoria e così
ad ogni passo successivo.
Altrettanto è possibile fare, per esempio, con
un parametro come il “destination_port”
che, per esempio, può indicare che la prevede una serie di variabili per la
comunicazione avvenga su UDP (Fig. 5). gestione delle connessioni in entrambe le
La formulazione dell’indirizzo dipende anche direzioni, è evidente che vanno definite delle
dal tipo di dato utilizzato. In particolare, è variabili globali che poi, nel funzionamento
Fig. 4 possibile che gli indirizzi siano costituiti da ordinario, dovranno essere, a vari livelli
dell’implementazione dello stack, utilizzate.
Non soltanto, perché sarà indispensabile,
per gli stessi motivi, definire le variabili
globali delle applicazioni ogni volta che ne
scriveremo una. Ecco perché qui vengono
riportate le variabili globali per la gestione
dello stack protocollare a livello High, ma
sono anche definite le variabili che fanno
capo al layer di trasporto. Concordemente,
per una serie di esempi che servono a
testare la funzionalità dei sensori a bordo
della scheda, sono identificate le variabili
di riferimento per l’utilizzo dei vari LED
presenti oppure l’implementazione dei livelli
di sicurezza previsti dallo standard quando

120 Maggio 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso
Fig. 6

Fig. 7
spesso vengono applicate manipolazione
dei bit meno significativi per rendere la
trasmissione del dato resistente e robusta
rispetto alle componente di rumore. Questi
artifici passano sotto il nome di “dithering”
ovvero una commutazione pressoché
casuale che non altera la parte significativa
del dato ma aiuta a nascondere o rendere
meno significative le componenti di disturbo
inevitabilmente presenti sul segnale.
Nella Fig. 8 sono riportate una serie di
condizioni di errore relative a diverse
situazioni, da quello di sincronizzazione fino
alla rilevazione di un pacchetto danneggiato
oppure di un frame incompleto passando
per diverse condizioni di overflow dovute,
per esempio, ad un tempo di latenza troppo
alto piuttosto che al fatto che l’intero
pacchetto sia stato generato in maniera
errata e contenga più dati. La gestione degli
errori e la tipologia degli stessi ci aiuta
a comprendere cosa stiamo sbagliando
e perché. Anche in questo caso l’ordine
progressivo suggerisce che le condizioni di
errore siano state inserite secondo un criterio
prima di tutto cronologico e comunque
relativo al funzionamento e al meccanismo
di trasmissione. E con lo stesso metodo con
cui definiamo componenti, facciamo per
viene trasferito il dato. È il caso di notare che gli errori. Specifiche condizioni possono,
queste sono definite in ordine progressivo e inoltre, essere utilizzate per svolgere funzioni
ciò perché si rispetta l’ordine in cui vengono di debug o per verificare l’esecuzione di
utilizzate; ciò identifica e stabilisce anche porzioni di codice. Se utilizziamo le funzioni
una certa gerarchia (Fig. 7). L’importanza definite nella libreria con cui possiamo
dell’ordinamento è fondamentale stampare su interfaccia seriale i messaggi di
nell’interpretazione dei dati. Senza ordine errore, possiamo introdurre alcune di queste
corretto di lettura, tutto quello che riceviamo condizioni all’interno del codice per verificare
o leggiamo o proviamo ad interpretare è quando le condizioni sono vere, quali dati
inutile. Soprattutto, facendo riferimento a vengono effettivamente inviati, come vengono
quanto detto in precedenza, dal momento gestiti e così via dicendo. Altra componente
che i pacchetti vengono incapsulati in fondamentale per il funzionamento di
maniera tale da tenere traccia di quali sono le un protocollo di comunicazione sono i
destinazioni e quali i contributi che vengono parametri IANA (Fig. 9). IANA è una sigla
da ciascun layer. Se non si rispettano questi che identifica la Internet Assigned Numbers
criteri, tutto quello che viene ricevuto e letto Authority, cioè un organismo il cui scopo è
viene interpretato in maniera non corretta. delegare la gestione di blocchi di indirizzi
Senza contare, poi, che quando si ha a che fare IP ad enti locali chiamati Regional Internet
con dati digitali esistono tecniche che mirano Registries, ciascuno dei quali assegna gli
a confinare l’errore il più possibile e molto indirizzi per una specifica zona del mondo

Elettronica In ~ Maggio 2016 121


Sensor TAG: istruzioni per l’uso
Fig. 8 Fig. 9

della stessa dimensione della struttura. La


stessa cosa facciamo per tutte le variabili
che servono a effettuare il debug e gestire le
condizioni di errore, dopodiché dobbiamo
decidere se lavoriamo con un solo canale di
sincronizzazione, facendo riferimento ad un
parametro specifico tra le variabili, oppure no.
Se l’ACK è abilitato, verranno inviati pacchetti
con questo scopo sul canale comunicativo;
altrimenti no. Siccome per la prova che è
stata effettuata non necessitava abilitare il
protocollo di sicurezza e che l’abilitazione
era dichiarata come una variabile booleana,
in questo caso è stata impostata al valore
logico FALSE. Viene poi definito il metodo

ed a loro volta formano un ente che prende


il nome di Number Resource Organization,
che ha lo scopo di definire le politiche di
assegnazione e gestione degli indirizzi.
Infatti, i parametri protocollari sono definiti in
funzione del livello di riferimento. In questo Fig. 10
caso non c’è molto da commentare, salvo che
l’introduzione e la gestione di queste variabili
è fondamentale. In Fig. 10 vediamo come si
gestiscono le funzioni di inizializzazione;
le variabili, com’è buona norma, vanno
inizializzate e in particolare ci serve indicare
la dimensione della struttura che gestisce
tutte le variabili protocollari. Pertanto va
inizializzata a 0 una quantità di memoria

122 Maggio 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Listato 1
bool topology_isAcceptablePacket(ieee802154_header_iht*
ieee802514_header) {
predefinito con il quale deve avvenire l’hop bool returnVal;
e così di conseguenza la verifica che, qualora switch (idmanager_getMyID(ADDR_64B)->addr_64b[7]) {
il nodo sia root, la sincronizzazione possa case TOPOLOGY_MOTE1:
if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2) {
avvenire. Nessun nodo che non sia root returnVal=TRUE;
può gestire una condizione del genere e } else {
returnVal=FALSE;
può garantire la sincronizzazione, per ovvi }
motivi. Le altre condizioni sono abbastanza break;
case TOPOLOGY_MOTE2:
autoesplicative: si abilita l’interfaccia radio if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE1 ||
e si impostano i parametri che servono alla ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
gestione della trasmissione dei dati (Fig. 11). returnVal=TRUE;
} else {
Molto spesso risulta poco chiaro come fare returnVal=FALSE;
a gestire un dato, scrivere un parametro, }
break;
aggiornare un indice. Ma lavorare su un case TOPOLOGY_MOTE3:
pacchetto significa conoscerne la dimensione, if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2 ||
ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE4) {
poterne stimare i valori oppure ricavarli 10
oppure impostarli ad un numero che returnVal=TRUE;
scegliamo. Supponiamo, come nell’esempio } else {
returnVal=FALSE;
che abbiamo appena visto, di voler creare }
una quota del payload all’interno della quale break;
case TOPOLOGY_MOTE4:
allocare delle informazioni che desideriamo: if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
in particolare, 5 byte che vengono inizializzati returnVal=TRUE;
} else {
ad un valore e poi aggiornati, più due byte returnVal=FALSE;
dell’ID (quelli riguardanti lo specifico nodo). }
Dobbiamo aggiornare quei 5 byte ogni volta break;
default:
che avviene una trasmissione, perché vengono returnVal=TRUE;
utilizzati come marca temporale (timestamp) }
return returnVal;
per stabilire la differenza tra la trasmissione }
di un pacchetto e la successiva. Ebbene, a
livello applicativo il dato può essere scritto
con questa soluzione; a livello protocollare in ingresso e in uscita. Gli altri non saranno
definiremo una funzione che materialmente visibili, quindi non saranno possibili
scrive il dato puntando sempre a pkt -> interazioni o comunicazioni. È importante
payload [0 - 5]. sottolineare che la topologia non deve essere
Ricordate quando abbiamo scritto che la fissa; ciò che vogliamo da questi sensori e
topologia è impostabile e vi avremmo fatto che siano in grado di connettersi e scambiare
vedere come? Bene, è arrivato il momento: informazioni, e che l’informazione segua
guardate il codice nel Listato 1, dove un certo un percorso prestabilito, anche perché
numero di nodi (quattro) riconosciuti per ciò assicura che la rete possa ospitare
uno specifico byte degli 8 che compongono nuovi nodi in maniera dinamica. Perciò
l’indirizzo, vengono impostati affinché il procedimento illustrato va inteso come
possano comunicare soltanto con quelli con verifica della funzionalità e come un esercizio
cui è previsto che instaurino comunicazioni di programmazione.
Notate che i codici riportati in queste pagine
sono parte di un lavoro basato sul modulo
TI CC2420, una board TelosB e un sistema
operativo open source chiamato OpenWSN e
li abbiamo utilizzati perché compatibili con la
scrittura di firmware SimpleLink Sensor Tag.
Con quest’ultima nota si conclude questa
puntata; a partire dalla prossima “metteremo
Fig. 11 le mani” sui software per gestire i SensorTag e
g
inizieremo a lavorare sui nostri progetti.

Elettronica In ~ Maggio 2016 123


Sensor TAG: istruzioni per l’uso

Conosciamo il software Smart


RF Studio e vediamo, dopo una
carrellata sulle caratteristiche
hardware dei moduli TI, come
utilizzarlo. Seconda Puntata.

di PIERO BOCCADORO

SENSOR TAG:
istruzioni per l’uso 2
N ella prima puntata di questo corso abbiamo
gettato le basi per utilizzare la tecnologia
conoscessero questa architettura, sappiate
che consente un’elevatissima potenza
Sensor Tag di TI, riproponendoci di affrontare computazionale, la quale si deve a un sistema
e “mettere mano”, in questa sede, ai software di definito dalle seguenti specifiche:
gestione. Prima di andare avanti vogliamo però • architettura ARM Cortex-M3 32-bit;
analizzare meglio e comprendere tutto ciò che • set di istruzioni ARM Thumb®-2 da 16 e 32-bit;
riguarda la dotazione hardware della scheda, • interrupt handling deterministico ad alte
dell’antenna, nonché l’architettura interna. prestazioni per la gestione di applicazioni
Diamo innanzitutto uno sguardo alla Fig. 1: ”time-critical”;
nello schema concettuale rappresentato in essa • sistema di debug migliorato dotato di
sono evidenti alcuni blocchi funzionali che breakpoint e trace capability;
schematizzano il modo in cui l’antenna funziona. • serial wire trace, che riduce il numero di pin
La CPU, che è basata su Cortex-M3, rappresenta necessari per le operazioni di debugging e di
il nucleo fondamentale del funzionamento e tracing;
le sue specifiche tecniche suggeriscono l’idea • modalità di consumo ultralow-power in sleep
che si tratti di un processore estremamente mode;
performante. Per tutti coloro che non • potenza di calcolo di 1,25 DMIPS per MHz.

Elettronica In ~ Giugno 2016 117


Sensor TAG: istruzioni per l’uso
frequenza viene sincronizzata con un’altra
in ingresso e inviata poi nell’etere tramite
l’antenna. Il Sensor Controller è molto
importante all’interno di questa soluzione,
dal momento che contiene tutta la circuiteria
che può essere abilitata in maniera selettiva
in modalità standby. Dal momento che è
possibile effettuare una gestione intelligente
di tutto il sistema, l’utilizzo della CPU, anche
soprattutto dal punto di vista energetico, può
essere facilmente ottimizzato in maniera tale
da leggere e monitorare i vari sensori oppure
svolgere più compiti contemporaneamente
(smart configuration).
Esempi di questa gestione sono:
• possibilità di utilizzare sensori analogici
grazie all’ADC integrato;
• possibilità di utilizzare sensori digitali su
GPIO, I²C (bit-banged) ed SPI;
• interfaccia UART per comunicazioni e
debug;
Fig. 1 • capacitive sensing;
• generazione di forma d’onda;
Il core della trasmissione a radiofrequenza • pulse counting.
è affidato all’antenna, che viene gestita
in autonomia da un Cortex-M0. La Per poter avere un quadro più chiaro
gestione dei dati è bidirezionale e consente dell’intero scenario operativo, bisogna
ai bit di informazione (strutturati in tenere in considerazione che abbiamo
pacchetti) di viaggiare rispettando i a disposizione alcune interessanti
protocolli e gli standard radio, grazie a funzionalità, tra cui il comparatore low-
una gestione autonoma di tutti gli aspetti power clocked (che è possibile utilizzare al
di sincronizzazione e temporizzazione; fine di “risvegliare” il microcontrollore in
per comprendere i vantaggi di tale qualunque momento) e le funzionalità di
caratteristica, considerate che in alcune capacitive sensing, implementate attraverso
soluzioni, soprattutto le più datate, tutto l’utilizzo di un current source insieme
era gestito da un unico microcontrollore. con un convertitore time-to-digital e un
Le grandi prestazioni offerte da questa comparatore a tempo continuo, peraltro ad
accoppiata, soprattutto in funzione della alta accuratezza.
memoria dedicata sul chip RF, consentono Va tenuto conto anche che abbiamo
al processore di funzionare in maniera a disposizione un ADC a 12-bit, 200
ottimale. Va comunque notato che non è ks/s con 8 ingressi ed un riferimento di
possibile programmarlo e d’altronde non tensione interno. Questo risulta piuttosto
ce n’è alcun bisogno, perché è configurato a interessante dal momento che l’attivazione
livello hardware così da essere autonomo e da del convertitore può essere sintonizzata con
funzionare semplicemente come interfaccia dei timer piuttosto che con dei GPIO, oppure
radio. anche comandato via software.
La generazione dei segnali è affidata ad un Per quanto riguarda la memoria, abbiamo già
PLL (Phase Locked Loop) cioè un anello ad parlato della disponibilità di Flash memory
aggancio di fase; questo circuito ha la precisa on-board, che sappiamo essere non volatile e
funzione di generare una forma d’onda la cui quindi utile per il codice ma anche per i dati.
frequenza è determinata e stabilizzata sulla Se invece parliamo di SRAM, disponibile
base del confronto tra valori di tensione. La per l’esecuzione del codice, è divisa in due

118 Giugno 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Tabella 1
blocchi (da 4 e da 6 kB) sappiamo di avere a parlando di un sistema che di base funziona
disposizione una buona quantità di spazio da multiplexer e che consente a una serie di
per la memorizzazione di contenuti anche periferiche di essere assegnate a pin di I/O
in modalità standby. Tra le altre cose, se la in maniera flessibile. Tutti i pin, infatti, sono
cache Flash è disabilitata, anche gli 8 kB di dotati di interrupt che possono essere abilitati
cache possono essere utilizzati come RAM. con funzionalità di pull-up e pull-down in
Nell’ambito della compilazione e quindi maniera programmabile con configurazioni
della gestione delle interfacce, delle positive o negative-edge. Quando un’uscita
periferiche ma soprattutto del core, c’è da è configurata come negative-edge, il pin
tener presente che la memoria di sola lettura corrispondente può funzionare sia da pull-up
contiene, pre-programmato, il kernel Ti sia da open-drain.
RTOS, comprensivo quindi di librerie e stack, Per quanto riguarda l’interfaccia I²C,
in uno con il bootloader (quest’ultimo può essa viene utilizzata per comunicare con
essere programmato sfruttando le classiche dispositivi compatibili con questo standard ed
interfacce SPI e UART). è possibile lavorare con frequenze operative
E a proposito di modalità di funzionamento da 100 o 400 kHz, in modalità sia master, sia
del processore e di consumo di potenza e di slave.
ottimizzazione dello stesso, vi rimandiamo Tra i device inclusi c’è anche un controllore
alla Tabella 1, che riassume tutte le modalità Direct Memory Access (μDMA), che permette
di configurazione e dei consumi al fine di di trasferire i dati rendendo l’utilizzo del
inquadrare l’effettiva efficienza energetica di processore più efficiente, soprattutto nel
cui è capace. trasferimento di dati dalla memoria alle
Come tutti i componenti integrati dalle grandi periferiche. In verità esistono diverse modalità
prestazioni, anche questo è dotato di una serie di trasmissione che prevedono lo scambio
di interfacce e tra esse, naturalmente, ci sono tra memoria e periferica oppure all’interno
quelle che gestiscono le periferiche, come per della memoria stessa oppure direttamente tra
esempio I²C e UART. periferiche.
Per quanto riguarda le periferiche e i moduli Alcune delle caratteristiche più interessanti
che possono essere connessi al CC2650, stiamo sono riportate qui di seguito:

Elettronica In ~ Giugno 2016 119


Sensor TAG: istruzioni per l’uso
Fig. 2 Fig. 3

• fino a 32 canali configurabili; esterna alla scheda e pertanto, è possibile


• dimensione dei dati pari a 8, 16 e 32 bit; pensare al funzionamento di questa soluzione,
• battery monitor e sensore di temperatura come tutte le altre, grazie alla presenza di un
sono direttamente accessibili da software, regolatore esterno (Fig. 4).
dando un’indicazione sullo stato della Dal momento che questo integrato, così come
batteria e sulla soglia di temperatura. tutti gli altri, è una particolare soluzione
configurata in maniera specifica, grazie
Il tutto viene arricchito dal convertitore all’alloggiamento all’interno di un package
DC/DC la cui funzione è piuttosto semplice, formato standard, vediamo esattamente, dalla
dal momento che scopo di tale componente è Fig. 5, qual è la sua pin-out.
adattare i valori di tensione di funzionamento, Con questo, abbiamo concluso anche
per esempio quando si è in fase di l’introduzione alla scheda; possiamo passare
programmazione e la tensione proviene alla progettazione e alla realizzazione del
dall’alimentazione prelevata dall’USB; in nostro codice per mettere in funzione l’intero
questo caso specifico, infatti, il valore di sistema e per farlo vedremo il primo dei
tensione viene convertito da 5V a 3,3V. software distribuiti da Texas Instruments,
Come abbiamo visto, inoltre, stiamo parlando ovvero lo SMARTRF Studio 7.
di un chip perfettamente autonomo, che non
necessita di essere programmato dall’esterno SMARTRF Studio 7
ma che è già impostato per il funzionamento Iniziamo ora la parte pratica di questo corso
previsto. parlando di applicazioni e software per la
Proprio queste funzioni di regolazione, progettazione, programmazione, debug e
sono già implementate in hardware grazie test finale. Vi presentiamo, adesso, SmartRF
all’utilizzo delle configurazioni che vi Studio 7, un software, disponibile per
facciamo vedere qui di seguito, a partire sistema operativo Windows, che vi consente
dalla presenza di un regolatore DC/DC di valutare e configurare circuiti integrati,
interno (Fig. 2) per poi dare uno sguardo naturalmente targati Texas Instruments,
approfondito alla presenza ed alla funzione di basandovi sulla documentazione subito messa
un LDO, sempre interno (Fig. 3). a disposizione dell’utente. In buona sostanza,
Naturalmente, però, le soluzioni integrate supponendo che voi non abbiate per le mani
possono beneficiare anche di componentistica un dispositivo come il SensorTag Simple

120 Giugno 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Fig. 5

Fig. 4

Link o altra soluzione già pronta per l’uso, come un’applicazione di tipo stand-alone
e dobbiate progettarne una da zero, questo oppure insieme alla documentazione del kit di
software vi fornirà un valido supporto. sviluppo proprio per verificare e comprendere
Ciò, non solo perché, siccome stiamo al meglio ciascun aspetto dell’hardware in
analizzando proprio il dispositivo basato proprio possesso. Potreste anche avviarlo
su CC2650, questo software può tornare soltanto per curiosità, dal momento che tutte
utile, ma anche perché controllando la le informazioni tecniche su tutte le varianti e
documentazione di tale componente si può su tutti gli esponenti della serie CC26XX sono
imparare come creare un nuovo dispositivo completamente documentate e disponibili
personalizzato partendo da un caso a partire dalle note tecniche fino alla
applicativo. documentazione completa. E questo non vale
In qualche modo, seguendo uno di questi certamente soltanto per i quattro esponenti
due approcci, complementari e duali, della famiglia di cui ci stiamo occupando in
SmartRF Studio 7 vi aiuterà a prendere queste pagine, ma si applica, in verità, anche
subito dimestichezza con i circuiti integrati a a integrati più “datati” o semplicemente
radiofrequenza, con il loro sviluppo, le loro meno performanti, che fanno parte o meno
caratteristiche, le relative specifiche e le loro di diversi kit di sviluppo. Le famiglie in
peculiarità. È intuitivo, quindi, che l’utilizzo questione sono: CC11X, CC11XX, CC11XL,
di SmartRF Studio possa essere pensato o CC112X, CC12XX, CC25XX, CC24XX.

Fig. 6 - Sensore di luce e accelerometro

Elettronica In ~ Giugno 2016 121


Sensor TAG: istruzioni per l’uso
• supporto completo per oltre 30 schede di
valutazione.

Tra le tante caratteristiche interessanti di


questo software ci sono anche le due modalità
di utilizzo differenziate: “Easy” ed“Expert”.
“Easy” consente un accesso immediato
alle informazioni, alla progettazione e alla
configurazione.
Nella modalità “Expert”, invece, tutti i singoli
parametri sono accessibili al progettista, il che
restituisce un controllo sicuramente migliore,
nonché una serie di gradi di libertà con i
quali rendere la soluzione più professionale e
completa. In questo caso ci stiamo riferendo
all’accesso ai singoli registri all’interno dei
quali è possibile scrivere le informazioni
dettagliatamente e controllare a livello basso
Fig. 7 il vostro dispositivo. Tutto questo sarà più
chiaro adesso che vi mostreremo alcune
Nel nostro caso, l’utilizzo del software è stato schermate del programma.
fondamentale per avere un approccio più Per quale motivo, dunque, prendiamo in
diretto a tutte le caratteristiche e specifiche considerazione questo software? Ebbene,
tecniche e per essere operativi da subito perché è molto semplice e perché dispone
rispondendo alle domande più importanti: (lo avrete intuito leggendo sinora) di alcune
• com’è stato ottenuto l’adeguamento della funzionalità veramente interessanti.
tensione proveniente dall’USB (particolare Nella schermata di Fig. 7 potete vedere
che abbiamo già visto? come il software supporti pienamente e sia
• che tipi di collegamenti sono stati realizzati totalmente compatibile con tutta una serie
per i sensori? di chip che fanno parte delle famiglie di cui
abbiamo parlato fino a questo momento. Le
Per rispondere alla seconda domanda soluzioni sono divise in due categorie: quelle
vi proponiamo, in Fig. 6, le principali che lavorano al di sotto del GHz e quelle che
connessioni dei sensori in questione
(accelerometro MPU-9250 della Invensense Fig. 8
e sensore di luminosità OPT 3001 Texas
Instruments); per eventuali approfondimenti
potete reperire sul web i rispettivi data-sheet.
Tra le funzioni più importanti svolte dal
programma ci sono:
• link test, con lo scopo di inviare e ricevere
pacchetti tra i nodi (lo vedremo tra poco);
• test d’antenna, che consente di verificare
lo stato e la funzionalità della radio sia in
trasmissione sia in ricezione;
• controllo dei pacchetti in transito;
• verifica delle chiamate ai registri;
• lettura e scrittura dei singoli registri;
• informazioni dettagliate su bit field in
ciascun registro;
• comunicazione con i dispositivi tramite
USB;

122 Giugno 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso Fig. 9

operano a 2,4 GHz, mostrate nella scheda


aperta perché sono quelle che ci interessano.
Naturalmente sceglieremo di consultare
la documentazione di tutti i chip qualora
dovessimo ancora decidere quale utilizzare,
ma in ogni caso potrebbe essere molto utile,
se decidiamo di iniziare a lavorare all’interno
di questa branca e quindi sviluppare schede
pensate per la trasmissione a radiofrequenza,
analizzare le differenze tra le singole MCU.
Per poter effettuare questa operazione basta
dare uno sguardo al menu contestuale che si
apre facendo clic con il pulsante destro del
mouse all’interno della scheda, come appare
in Fig. 9.
Le voci di tale menu sono tante e risultano
divise in due sezioni distinte delle quali la
prima riguarda le funzionalità specifiche
del programma per il singolo chip (infatti
tra queste è possibile mostrare i dispositivi Fig. 10
attualmente connessi, per esempio) mentre che desiderate; ricordate che ne avete due a
nella seconda ci si rifà alla documentazione disposizione, come potrete ormai immaginare:
ufficiale relativa all’antenna, piuttosto che BLE mode ed IEEE 802.15.4 mode.
alla famiglia di antenne e a tutta una serie Altra sezione interessante, l’ultima in verità
di documenti, pdf oppure pagine Wiki, del che serva analizzare di questo software,
singolo microcontrollore. riguarda gli strumenti a disposizione.
Quando provate ad accedere, per esempio, Qui potete facilmente trovare delle voci che
alle specifiche del chip, trovate estratti dei vi consentono di accedere a funzionalità di
data-sheet e delle schede tecniche che vi test interne oppure ad altri software dei quali
restituiscono le informazioni dettagliate comunque stiamo parlando, o parleremo a
(benché preliminari) di cui avete sicuramente breve. Ad esempio, infatti, del Packet Sniffer,
bisogno. della sua importanza, del suo ruolo, delle
La sezione “Device control Panel” è sue funzionalità e del modo in cui potrete
altrettanto interessante, perché al suo interno utilizzarlo parleremo più avanti, dedicandogli
troverete la possibilità di testare i vostri il giusto spazio.
dispositivi per trasmissione e ricezione in È importante notare che ci sono due voci
maniera continuativa oppure per singolo che sembrano uguali tra loro, ovvero Flash
pacchetto, verificando, tramite la selezione Programmer e Flash Programmer v2; nella
di opportune opzioni, tutti i parametri di prossima puntata vedremo quali sono le
cui abbiamo parlato fino a questo momento: differenze tra le due, fermo restando che
dalla frequenza operativa fino al canale l’indicazione delle differenti MCU supportate
selezionato, passando per la potenza di suggerisce che il software è stato aggiornato
trasmissione. Il tutto andando a selezionare ad una versione successiva per supportare
la costruzione del pacchetto da inviare, ivi microcontrollori e microprocessori più evoluti
compresi il preamble, l’indirizzo e tutti gli e recenti.
altri campi di cui abbiamo parlato quando
vi abbiamo introdotto lo stack protocollare CONCLUSIONI
ed il meccanismo di funzionamento e di Bene, con questo abbiamo concluso,
connessione del Bluetooth Low Energy. almeno per questa puntata. Nella prossima
Selezionate, quindi, “Open RF Device in off- proseguiremo l’analisi dei tool software ed
line mode” per iniziare questo tipo di test e in particolare partiremo da BLE-Stack 2.1.0,
poi indicate la modalità di funzionamento sempre di Texas Instruments. g

Elettronica In ~ Giugno 2016 123


Sensor TAG: istruzioni per l’uso

Conosciamo i tool software


per sviluppare applicazioni
con i dispositivi Sensor Tag: in
queste pagine apprenderemo
caratteristiche e utilizzo di
BLE-Stack, BLE Device Monitor
e Code Composer Studio.
Terza puntata.

di PIERO BOCCADORO

TUTORIAL
SENSOR TAG 3
D opo aver analizzato la tecnologia e i
dispositivi Sensor Tag di Texas Instruments
attivi, ma anche il consumo energetico e una serie
di altri parametri che non possono essere ignorati.
ed aver conosciuto le caratteristiche e le L’analisi delle caratteristiche dello stack
potenzialità della suite software Smart RF protocollare è indispensabile ed il software
Studio, utilizzata per progettare le applicazioni, BLE-Stack 2.1.0 di Texas Instruments vi servirà
proseguiamo l’analisi dei tool a nostra proprio a questo. L’adattamento per la gestione di
disposizione incontrando per primi BLE-Stack SimpleLink si è reso indispensabile dal momento
e BLE Device Monitor, quindi passando a Code che esistono diverse versioni di questo software
Composer Studio. che si riferiscono, com’è facile immaginare, a
schede basate su altri chip e su altre antenne. Lo
BLE STACK E BLE DEVICE MONITOR stack è reso disponibile dalla Texas Instruments in
Come abbiamo già scritto nelle precedenti puntate forma royalty-free per tutti coloro che intendono
di questo corso, lavorare con un protocollo di sviluppare sui dispositivi CC2640 e CC2650 e
comunicazione significa conoscerlo nel dettaglio, pertanto potrete avervi facile accesso se intendete
saper identificare il modo in cui in esso vengono lavorare con il CC2650DK.
organizzati i dati e, nel caso di un sistema radio È importante sottolineare che del BLE-Stack esiste
come Sensor Tag, le frequenze di lavoro, i canali anche una versione precedente, la 1.4.1, che però

Elettronica In ~ Luglio / Agosto 2016 131


Sensor TAG: istruzioni per l’uso
Fig. 1

è orientata allo sviluppo con i dispositivi • possibilità di aggiornamento del firmware


CC2540 e CC2541. Si tratta tuttavia di tutto lo in modalità OTA (Over-The-Air)
stack protocollare, completamente compatibile direttamente su memoria Flash;
con Bluetooth 4.0 e quindi non con le • supporto fino ad un massimo di 8
specifiche Low Energy. connessioni con gestione delle operazioni
Per l’utilizzo completo e l’analisi puntuale del master/slave concurrent.
funzionamento, è previsto anche un software
ulteriore, che va sotto il nome di SmartRF Operativamente, l’avvio del programma e
Packet Sniffer. Sebbene la sua denominazione quindi il lancio dell’eseguibile ble_devmon
sia in qualche modo autoesplicativa, ne
parleremo in maniera approfondita e
dettagliata nella quinta ed ultima puntata
di questo corso, soprattutto per l’utilità già
dimostrata con il CC2540EMK-USB kit e che
può ancora dimostrare oggi, per chi lavora con
CC2650.
A cosa può servire avere a che fare con la suite
sullo stack protocollare, è facile da intuire, ma
analizzando le caratteristiche del BLE-Stack
2.1.0 nel dettaglio risponderemo sicuramente
meglio a questa domanda:
• pieno supporto per le specifiche Bluetooth Fig. 2
4.1;
• processor solution con API per Bluetooth
Smart Network;

132 Luglio / Agosto 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Fig. 3

apre un’interfaccia piuttosto semplice dove, Prendetevi del tempo per esplorare tutti i
peraltro, all’utente sono richieste davvero valori restituiti e l’organizzazione dei dati
poche interazioni; infatti dopo aver scelto la che, oltre ai valori, restituiscono una serie
corretta porta seriale da “ascoltare”, il monitor di informazioni utili per effettuare un log
proporrà una schermata come quella in Fig. 1. completo (Fig. 4).
Nel caso dei nostri sensori, i CC2650, una Nella sezione in cui vengono elencati tutti
volta inserita la batteria ed attivato tramite i mote, sono disponibili le letture dei valori
l’utilizzo del pulsante per l’advertising, il LED dei sensori, ovvero qui non ci sono valori
D1 inizierà a lampeggiare; questa funzione in formato esadecimale ma valori numerici.
è programmata per indicare che è avviata Esiste una modalità Test piuttosto utile che
l’interfaccia Bluetooth e che il dispositivo è consente di verificare sensori e periferiche
pronto. connessi, per controllare il funzionamento
A questo punto ricordiamo che una delle
funzioni più interessanti, che garantisce
proprio il basso consumo energetico
nell’esercizio ordinario da parte della scheda,
riguarda il fatto che se non vengono stabilite
connessioni entro non oltre 30 secondi, il tag
entra in modalità sleep, proprio per garantire
il basso consumo; naturalmente anche il LED
smetterà di funzionare. Tenete conto che,
quando parliamo di dispositivi alimentati a
batteria, anche il lampeggio di un LED implica
un consumo di potenza e un assorbimento di
corrente non trascurabili (~5 mA) e pertanto Fig. 4
va effettuata una programmazione intelligente anche dei LED. Le funzioni a disposizione
che preveda proprio lo spegnimento tra le sono tutte estremamente intuitive, soprattutto
funzioni principali. perché l’interfaccia è minimale, ma se avete
A questo punto vediamo di “trovare” il nostro difficoltà potete sempre far riferimento alla
tag utilizzando la funzione Scan (Fig. 2) e documentazione completa disponibile nella
selezionando le voci che sono comparse e che guida accessibile dal sito Internet http://
hanno popolato la lista: sarà facile esaminare processors.wiki.ti.com/index.php/BLE_Device_
tutti i dettagli del singolo dispositivo Monitor User_Guide.
individuato. In particolare, questo software
gestisce due finestre principali, una relativa ai CODE COMPOSER STUDIO
servizi e l’altra relativa al tag, ovvero a tutti i Code Composer Studio (o CCS, se preferite)
mote connessi. è un software che non ha bisogno di
L’indicazione complessiva sul fatto che tutte presentazioni: si tratta di un intero ambiente
le connessioni siano andate a buon fine potete di sviluppo integrato e di altissimo livello che
trovarla nella barra in basso (Fig. 3). consente di scrivere codici in maniera semplice
L’utilizzo della prima sezione è abbastanza ed efficace per tantissime piattaforme diverse
semplice, dal momento che espandendo la tra loro.
struttura ad albero vengono evidenziate le Con questo IDE, lo sviluppatore potrà
caratteristiche del servizio, quindi l’eventuale produrre il proprio firmware ottimizzandolo
presenza, per esempio, di temperature con grazie al supporto di diversi microcontrollori
annessi valori restituiti per registri di memoria e microprocessori. L’ottimizzazione sarà
di riferimento. Le notifiche sono abilitate a possibile per i compilatori C e C++ e tutte le
valle della connessione, ma alcuni sensori, operazioni necessarie per portare a termine il
come accade nel caso specifico del SensorTag, proprio progetto sono facilmente raggiungibili
sono disattivati per impostazione predefinita. grazie a un’interfaccia in cui i comandi sono

Elettronica In ~ Luglio / Agosto 2016 133


Sensor TAG: istruzioni per l’uso
Fig. 5

Fig. 7

Fig. 6

immediatamente disponibili, come vedremo


Fig. 8
tra poco.
CCS vi darà l’opportunità di lavorare non
soltanto producendo codice sorgente, ma ancora più facile grazie ai vantaggi proposti
anche compilando lo stesso e godendo di dal Framework Eclipse, ben conosciuto da chi
funzioni di debugger e profiler. Il tutto sarà lavora in ambito di programmazione, insieme

Fig. 9

134 Luglio / Agosto 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Fig. 10 Fig.11 - Librerie in uso. Fig. 12

con le possibilità offerte dal debugger TI, la creazione di un


ottimizzato per lo sviluppo embedded. nuovo progetto
In particolare, sono supportati diversi che può essere, in
dispositivi, tra cui altre soluzioni pensate per realtà, non soltanto un progetto completo
gestire connettività di tipo wireless come i ma anche un singolo file contenente codice,
SimpleLink Wi-Fi CC3200, e ancora le unità header o meno, piuttosto che una cartella
Pin Mux nonchè tutti i progetti che hanno che o qualsiasi altra variabile che possa essere
fare con TI-RTOS. Nel seguito vedremo anche visualizzata e gestita all’interno della struttura
quanto questo sarà importante, soprattutto ad albero predefinita, posta a sinistra nella
quando andremo a scrivere il nostro primo visualizzazione dello schermo (Fig. 7).
codice per SensorTag. L’icona dello scarabeo che rappresenta
Come per tutti i software (di sviluppo e non) la funzione di debug, è assolutamente
ben realizzati e supportati, anche questo indispensabile una volta che il codice sarà
prevede una sezione denominata “Getting stato scritto e avrà preso forma (Fig. 8).
Started”, all’interno della quale prenderete Vi consigliamo di esplorare queste funzioni
facilmente subito confidenza con tutti gli una alla volta prima di metter mano a tutti gli
aspetti fondamentali, oltre ad avere accesso strumenti in maniera tale da avere almeno una
diretto ad alcuni esempi che vi faranno capire prima cognizione di che cosa potete fare.
meglio come poter utilizzare l’intero sistema Fatevi aiutare dalla guida ma soprattutto
in maniera efficiente (Fig. 5). prendetevi del tempo. Una volta che avrete
Quando sarete pronti per cominciare il vostro imparato ciascuna di queste funzioni, sarà
progetto, l’IDE vi proporrà diverse soluzioni tutto più semplice.
compatibili col fatto che abbiate già del codice, Infatti, per esempio, una delle cose che
che lo vogliate importare oppure inaugurarne dovete subito verificare sarà la modalità di
uno del tutto nuovo. visualizzazione e gestione del vostro progetto.
Per poter utilizzare correttamente il software Eclipse vi consente di lavorare con tantissimi
è indispensabile comprendere alcune funzioni linguaggi differenti, gestendo anche delle
di base che sono raggiungibili tramite i varianti utili. Code Composer non è da meno e
pannelli e palette come quella in Fig. 6. Nello se un progetto scritto genericamente in C/C++
specifico, da questa è possibile selezionare viene visualizzato in una certa maniera, con

Elettronica In ~ Luglio / Agosto 2016 135


Sensor TAG: istruzioni per l’uso
certi strumenti annessi, e produce determinati nella compilazione e poter garantire il
file in output dopo la compilazione, un funzionamento del codice che avete scritto.
progetto CCS ha delle varianti. Selezionate la
modalità di visualizzazione più corretta ed APPROFONDIMENTI
osservate come cambiano i tool a disposizione. A questo punto vogliamo fare due
Naturalmente, quando sarete in dirittura approfondimenti; il primo riguarda la
d’arrivo, avrete scritto il vostro programma, programmazione e si può introdurre con
incluso tutte le librerie, verificato che le la domanda: “come genero un file bin per
variabili siano state dichiarate, inizializzate ed CC2650 per poi caricarlo sul mote?”. Da qui
utilizzate correttamente, dovrete compilare nasce una nuova domanda: “è una funzione
il codice e per farlo dovrete selezionare la che viene svolta da questo software?”.
toolchain giusta. All’interno del menu a cui Supponiamo che siate stati capaci di generare
accedete dalle preferenze potrete evidenziare gli output opportuni e quindi il formato
ed includere tutti i compilatori che vi binario, selezionandolo nelle opzioni di
serviranno, naturalmente privilegiando quelli progetto del compilatore oppure in “IAR
che effettivamente riguardano l’MCU in uso. → Project → Options” se usate lo IAR
Il supporto che Code Composer Studio vi Workbench. A questo punto dovrete fare
mette a disposizione è davvero molto ampio e particolare attenzione al percorso in cui il
soltanto tra architetture Texas basate su SP430 file è stato creato perché non è detto che
e chip ARM avrete la possibilità di compilare sia collocato nella cartella workspace, dove
progetti per piattaforme davvero molto probabilmente lo state cercando.
differenziate tra loro (Fig. 9 e Fig. 10). Vale la pena, quindi, di anticipare qualcosa
Fate molta attenzione alle impostazioni che verrà spiegato nelle prossime puntate di
del vostro solutore: verificate le regole di questo corso, ovvero come caricare il file sul
composizione, le cartelle di destinazione e mote. Dovrete utilizzare il Flash Programmer
soprattutto la gestione dei commenti, i simboli v2, che vi verrà spiegato in maniera
da utilizzare e così via dicendo. approfondita nella quarta puntata.
Solitamente collocata sulla destra in una Ma come? E partendo da quale area di
paletta piena di altre voci, “Outline” è memoria? Una cosa importante della
un metodo grafico per rappresentare programmazione è che non è detto che
semplicemente ed in maniera condensata stiate pensando a un codice unico e
ed efficace parametri, variabili e funzioni completamente funzionante ma magari state
presenti all’interno del codice (Fig. 11). Se implementando una patch o una mod oppure
per i parametri (per esempio un define o un un altro codice che, però, può funzionare
casting) e le variabili viene soltanto richiamato contemporaneamente. A seconda di questo
che ci sono, per le funzioni, invece, la singola specifico aspetto e di qual è la risposta alla
voce consente di riportare il programmatore domanda, sappiate che è possibile iniziare a
alla sua dichiarazione e quindi al suo utilizzo. caricare il vostro codice sulla scheda partendo
Non sottovalutate questa funzionalità, perché da un’area di memoria che specificate.
quando il vostro codice comincia a diventare Pertanto, se volete programmare il nodo
complesso e a contenere migliaia di righe, ciò per una specifica funzione e solo per quella,
risulterà parecchio utile. sarà opportuno cancellare l’intera memoria e
Il menu delle impostazioni (Fig. 12) è scrivere dal primo settore disponibile.
probabilmente una delle più classiche Vedremo i dettagli di queste procedure e
funzionalità di un programma e quindi non l’utilizzo del programma molto presto, non
dovrebbe sorprendere che ce ne sia uno. temete...
Quello che vi consigliamo caldamente di fare è Il secondo tema di approfondimento riguarda
analizzarlo nel dettaglio. alcuni codici che vogliamo riportare. Tra i
Ciascuna delle modalità di compilazione e tanti documenti che potete trovare sul sito
delle toolchain supportate abilita opzioni Internet della Texas Instruments dedicato a
specifiche e comprenderle significa Sensor Tag, ce ne sono alcuni che riguardano il
anche saper interpretare eventuali errori funzionamento e la configurazione proprio dei

136 Luglio / Agosto 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso
Listato 1
* GLOBAL VARIABLES
*/
// Profile state and parameters
gaprole_States_t gapProfileState = GAPROLE_INIT;

// Semaphore globally used to post events to the application thread


ICall_Semaphore sem;

// Global pin resources


PIN_State pinGpioState;
PIN_Handle hGpioPin;

/*******************************************************************************
* LOCAL VARIABLES
*/

// Task configuration
static Task_Struct sensorTagTask;
static Char sensorTagTaskStack[ST_TASK_STACK_SIZE];

// Entity ID globally used to check for source and/or destination of messages


static ICall_EntityID selfEntity;

// Clock instances for internal periodic events.


static Clock_Struct periodicClock;

// Queue object used for app messages


static Queue_Struct appMsg;
static Queue_Handle appMsgQueue;

// events flag for internal application events.


static uint16_t events;

// GAP - SCAN RSP data (max size = 31 bytes)


static uint8_t scanRspData[] =
{
// complete name
0x11, // length of this data
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
‘C’, ‘C’, ‘2’, ‘6’, ‘5’, ‘0’, ‘ ‘,
‘S’, ‘e’, ‘n’, ‘s’, ‘o’, ‘r’, ‘T’, ‘a’, ‘g’,

// connection interval range


0x05, // length of this data
GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),
HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),
LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),
HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),

// Tx power level
0x02, // length of this data
GAP_ADTYPE_POWER_LEVEL,
0 // 0dBm
};

// GAP - Advertisement data (max size = 31 bytes, though this is best kept short to conserve
//power while advertising)
static uint8_t advertData[] =
{
// Flags; this sets the device to use limited discoverable
// mode (advertises for 30 seconds at a time) instead of general
// discoverable mode (advertises indefinitely)
0x02, // length of this data
GAP_ADTYPE_FLAGS,
DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

// service UUID, to notify central devices what services are included


// in this peripheral
0x03, // length of this data
GAP_ADTYPE_16BIT_MORE, // some of the UUID’s, but not all
#ifdef FEATURE_LCD
LO_UINT16(DISPLAY_SERV_UUID),
HI_UINT16(DISPLAY_SERV_UUID),
#else
LO_UINT16(MOVEMENT_SERV_UUID),

(Continua)

Elettronica In ~ Luglio / Agosto 2016 137


Sensor TAG: istruzioni per l’uso
Listato 1 (segue)
HI_UINT16(MOVEMENT_SERV_UUID),
#endif

// Manufacturer specific advertising data


0x06,
GAP_ADTYPE_MANUFACTURER_SPECIFIC,
LO_UINT16(TI_COMPANY_ID),
HI_UINT16(TI_COMPANY_ID),
TI_ST_DEVICE_ID,
TI_ST_KEY_DATA_ID,
0x00 // Key state
};

// GAP GATT Attributes


static const uint8_t attDeviceName[GAP_DEVICE_NAME_LEN] = “SensorTag 2.0”;

#if FEATURE_OAD
// Event data from OAD profile.
static Queue_Struct oadQ;
static Queue_Handle hOadQ;
#endif //FEATURE_OAD

// Device information parameters


static const uint8_t devInfoModelNumber[] = “CC2650 SensorTag”;
static const uint8_t devInfoNA[] = “N.A.”;
static const uint8_t devInfoFirmwareRev[] = FW_VERSION_STR;
static const uint8_t devInfoMfrName[] = “Texas Instruments”;
static const uint8_t devInfoHardwareRev[] = “PCB 1.2/1.3”;

// Pins that are actively used by the application


static PIN_Config SensortagAppPinTable[] =
{
Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED
initially off */
Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED
initially off */
Board_KEY_LEFT | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is
active low */
Board_KEY_RIGHT | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Button is
active low */
Board_RELAY | PIN_INPUT_EN | PIN_PULLDOWN | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS, /* Relay is
active high */
Board_BUZZER | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* Buzzer
initially off */

PIN_TERMINATE
};

/*******************************************************************************
* LOCAL FUNCTIONS
*/

static void SensorTag_init( void);


static void SensorTag_taskFxn( UArg a0, UArg a1);
static void SensorTag_processStackMsg( ICall_Hdr *pMsg);
static void SensorTag_processGATTMsg(gattMsgEvent_t *pMsg);
static void SensorTag_processAppMsg( stEvt_t *pMsg);
static void SensorTag_processStateChangeEvt( gaprole_States_t newState ) ;
static void SensorTag_processCharValueChangeEvt( uint8_t serviceID, uint8_t paramID ) ;
static void SensorTag_performPeriodicTask( void);
static void SensorTag_stateChangeCB( gaprole_States_t newState);
static void SensorTag_resetAllSensors(void);
static void SensorTag_clockHandler(UArg arg);
static void SensorTag_enqueueMsg(uint8_t event, uint8_t serviceID, uint8_t paramID);
static void SensorTag_callback(PIN_Handle handle, PIN_Id pinId);
static bool SensorTag_hasFactoryImage(void);
static void SensorTag_setDeviceInfo(void);

#ifdef FACTORY_IMAGE
static bool SensorTag_saveFactoryImage(void);
#endif

#ifdef FEATURE_OAD
static void SensorTag_processOadWriteCB(uint8_t event, uint16_t connHandle,
uint8_t *pData);
#endif //FEATURE_OAD

138 Luglio / Agosto 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

SensorTag alo scopo di svolgere le funzioni piuttosto voluminoso lo alleghiamo ai file


per le quali sono preprogrammati. di questo numero della rivista, dove potete
Ecco, dunque, alcuni listati utili per consultarlo con il nome codice.c. In questa
comprendere il funzionamento. Nel primo che puntata del corso riportiamo solo (lo vedete
vi proponiamo è riportata la cosiddetta “main nel Listato 1) la dichiarazione delle variabili e
application”, ovvero il programma principale, la definizione delle funzioni.
che è interessante in quanto permette di L’altro codice che vi illustriamo, invece,
vedere tutte le librerie che sono incluse, che riguarda una lettura specifica di un
gestiscono da un lato le stringhe, dall’altro singolo valore sfruttando le potenzialità
il sistema operativo a runtime, poi il BIOS, il della scheda, ma per un progetto molto
clock di sistema e poi ancora le chiamate ai mirato: si tratta dell’analisi del livello di
singoli metodi per le periferiche e i protocolli glucosio. È interessante vedere com’è stato
di comunicazione, la scheda delle sue implementato questo progetto, soprattutto
periferiche e molto altro ancora; si passa poi perché dà un’idea precisa del meccanismo
alla definizione di alcune funzioni che sono di funzionamento, per esempio rispetto al
in grado di leggere e manipolare i messaggi, fatto che ciascuna misura deve avere una
effettuare il parsing dei dati letti, aggiornare corrispondenza basata sul fatto che la lettura
l’eventuale richiesta di dati, controllare la sia abilitata e molto altro ancora, altrimenti
pressione dei pulsanti, ma svolgere anche il dato non deve essere inviato. Funzioni
funzioni più semplici come definire il numero come questa sono definite dentro il firmware
(e la durata) di lampeggi dell’LED durante la glucosio.c, anche questo troppo lungo per
fase di test. poterne riportare in queste pagine il listato,
Insomma, leggere con attenzione questo ma che trovate tra i file del corso, sul nostro
codice può svelarvi come eseguire le azioni sito www.elettronicain.it.
più importanti, soprattutto qualora doveste Per poter essere completamente configurato
decidere di modificarlo per la vostra il progetto richiede anche un main, ed è
applicazione. Trattandosi di un programma per questo che trovate un file il cui nome è

Listato 2
/**
*/

#include <xdc/runtime/Error.h>
#include <ti/sysbios/family/arm/cc26xx/Power.h>
#include <ti/sysbios/BIOS.h>

#include “ICall.h”

#include “bcomdef.h”
#include “peripheral.h”
#include “glucose.h”

/* Header files required to enable instruction fetch cache */


#include <inc/hw_memmap.h>
#include <driverlib/vims.h>

#ifndef USE_DEFAULT_USER_CFG

#include “bleUserConfig.h”

// BLE user defined configuration


bleUserCfg_t user0Cfg = BLE_USER_CFG;

#endif // USE_DEFAULT_USER_CFG

/**
* Exception handler
*/
void exceptionHandler()
{

(Continua)

Elettronica In ~ Luglio / Agosto 2016 139


Sensor TAG: istruzioni per l’uso
Listato 2 (segue)
volatile char i = 1;
while(i);
}

/*
* ======== main ========
*/
int main()
{
PIN_init(BoardGpioInitTable);

#ifndef POWER_SAVING
/* Set constraints for Standby, powerdown and idle mode */
Power_setConstraint (Power_SB_DISALLOW);
Power_setConstraint (Power_IDLE_PD_DISALLOW);
#endif //POWER_SAVING

/* Initialize ICall module */


ICall_init();

/* Start tasks of external images - Priority 5 */


ICall_createRemoteTasks();

/* Kick off profile - Priority 3 */


GAPRole_createTask();

/* Kick off application - Priority 1 */


GlucoseSensor_createTask();

/* enable interrupts and start SYS/BIOS */


BIOS_start();

return 0;
}

/**
* Error handled to be hooked into TI-RTOS
*/
Void smallErrorHook(Error_Block *eb)
{
for (;;);
}

/**
* HAL assert handler required by OSAL memory module.
*/
void halAssertHandler(void)
{
for (;;);
}

glucosio main.c. Il codice del main lo trovate deve fare nel dettaglio, da quando si avvia a
nel Listato 2. L’importanza di questo codice quando termina la sua esecuzione. In questo
sta nel fatto che vi permette di notare una modo il vostro programma sarà stabile,
cosa tutt’altro che trascurabile: è brevissimo, e perfettamente modificabile, se dovesse
se rapportato a ciò che permette di fare! rendersi necessario.
Infatti, come tutti i bravi programmatori
sanno, è buona norma che il main si è tenuto CONCLUSIONI
il più libero possibile, con minor numero di Ebbene, anche per questa puntata abbiamo
operazioni richiamate. Questo garantisce terminato. Ora che conosciamo i tool software
sempre un’ottima modularità e scalabilità del utilizzati per lo sviluppo possiamo spostarci
codice, che diventa espandibile in maniera sul piano fisico e vedere come programmare
semplice, nonché un ottimo controllo delle il Tag; ne riparleremo nella prossima
funzionalità aggiunte. Quando, invece, non puntata, dove faremo uso di SmartRF Flash
siete ancora sicuri di aver perfezionato il Programmer v2, cogliendo l’occasione per
tutto, vi consigliamo di partire con un unico presentarvi questo indispensabile strumento
file dal quale iniziare a scorporare le funzioni e descrivervi in che modo utilizzarlo per
g
solo una volta che avrete definito che cosa caricare il codice nei dispositivi.

140 Luglio / Agosto 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Entriamo nel vivo della


programmazione dei Tag
utilizzando il programmatore
SmartRF Flash Programmer v2
e lo strumento di debug Sensor
Controller Studio. Concludiamo
quindi questo corso
analizzando Packet Sniffer,
che permette di intercettare
le stringhe di dati. Quarta ed
ultima puntata.

di PIERO BOCCADORO

TUTORIAL
SENSOR TAG 4
G iunti a questo punto dello sviluppo
del progetto, avete finito di scrivere il
Texas Instruments basati su microcontrollore
ad architettura ARM. Per effettuare la
vostro codice e siete pronti per effettuarne programmazione vengono utilizzate la funzionalità
l’upload sul Tag. E a questo scopo, come vi di debug e l’interfaccia seriale.
avevamo annunciato, vi serve un sistema di Il software può essere utilizzato per lavorare
programmazione con tutto ciò che lo correda. su dispositivi basati sulla serie 8051 e su altri
In questa puntata conclusiva del corso vi microcontrollori a basso consumo e viene, infatti,
proponiamo di utilizzare lo SmartRF Flash impiegato con dispositivi MSP430-compliant, come
Programmer, che è la soluzione elettiva per il ad esempio il dongle eZ430.
compito che dovete svolgere. Tra le caratteristiche principali della soluzione
Giunta alla sua seconda versione (anche software qui proposta ci sono:
se per questa puntata del corso abbiamo • programmazione di immagini del software su
catturato le schermate dalla versione 1.7.1, microcontrollore low-power per RF;
che è quella che al momento della stesura • programmazione di immagini del software su
avevamo a disposizione), questa utility dispositivi MSP430;
può essere impiegata per programmare la • programmazione e aggiornamento del firmware
memoria Flash di programma nei dispositivi e del bootloader su evaluation board ad

Elettronica In ~ Settembre 2016 115


Sensor TAG: istruzioni per l’uso
Fig. 1 - La schermata principale del software

interfaccia USB basate su microcontrollore; Tramite queste ed altre funzioni (visibili nella
• aggiornamento dell’immagine del firmware schermata iniziale di Fig. 1), come la lettura
sulla MCU; dell’Information Page del dispositivo, avrete
• lettura dell’immagine e creazione di un file la possibilità di controllare ogni singolo
hex; aspetto della programmazione.
• confronto di un file hex con l’immagine già Il software SmartRF Flash Programmer può
scritta su dispositivo; essere scaricato gratuitamente da Internet
• lettura e scrittura di MAC address nei accedendo alla pagina web www.ti.com/tool/
dispositivi che devono accedere alla rete. flash-programmer del sito di Texas Instruments.

Fig. 2 - Facendo clic sul pulsante Show del riquadro cerchiato in rosso, si apre la sezione Flash Utilities.

116 Settembre 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

Fig. 3 - Salvataggio del contenuto della Flash in un file.

Dopo averlo scaricato e installato, è possibile delle funzionalità e questa azione utilizza i
effettivamente iniziare a lavorare; la prima comandi di debug per leggere la memoria,
cosa che dobbiamo chiederci è che tipo di il che implica che se i comandi sul chip
immagine vogliamo caricare: single o multiple? sono bloccati non sarà possibile eseguire
Tali termini sono autoesplicativi, per cui tutto l’azione.
ciò che dovete fare sarà decidere, cercare • Verify: come il nome stesso suggerisce,
nei vari percorsi la posizione della (o delle) indica molto semplicemente una verifica
immagine(i) e poi sarete quasi pronti; quasi, dell’immagine che viene scritta nella
perché manca una fase operativa: decidere memoria Flash. La funzione verifica
quali sono le cosiddette “Actions” da soltanto il file presente e non controlla se
intraprendere. qualche dato viene aggiunto alla memoria.
In totale possiamo individuare sei azioni
differenti che è possibile eseguire con i SoC Volete scrivere solo su alcune pagine di
di cui stiamo parlando; per farlo, ci basta memoria e quindi cancellarne selettivamente?
selezionare, nel software, quella desiderata. Oppure volete che il vostro codice sia l’intero
Le nostre Actions sono di seguito descritte. sorgente, o magari solo una porzione? E che
• Erase: grazie a questa cancelleremo la dire della possibilità di verificare che tutto
memoria Flash del dispositivo selezionato. sia andato a buon fine? Potrete scegliere
• Erase & Program: cancellerà la memoria fra le due modalità indicate per fare questo
Flash come nel passaggio precedente, controllo, ammesso che vi serva ....è chiaro!
ma scriverà anche il file .hex che avremo Tra le Actions ci sono alcune opzioni dedicate
indicato. anche nella sezione Image Overrides, dalla
• Erase, Program & Verify: azione combinata quale potrete scegliere, per esempio, di
che effettua gli stessi passaggi del processo disabilitare il Bootloader.
precedente, ma che nel contempo rileva gli A seconda del tipo di progetto sul quale
errori durante la programmazione oppure starete lavorando, le istruzioni potranno
quelli causati da un’area di memoria risultare più o meno utili ma in questa fase è
danneggiata. assolutamente poco influente parlare di casi
• Append and Verify: prevede la scrittura applicativi.
dell’immagine sul dispositivo senza Tra le tab presenti nella visualizzazione che
eliminare quella precedentemente esistente abbiamo appena descritto c’è la sezione “Edit”
in Flash. In pratica stiamo aggiungendo (è visualizzata nella Fig. 2); anche in questo

Elettronica In ~ Settembre 2016 117


Sensor TAG: istruzioni per l’uso
Fig. 4 - Selezione della modalità di cancellazione della memoria.

caso si tratta di una funzione abbastanza diverse modalità, come abbiamo detto più
intuitiva, che serve a lavorare sulle aree volte finora: selezionando specifiche aree di
di memoria in maniera selettiva andando memoria, accedendo alla memoria di massa
a leggere, per esempio, specifici indirizzi per intero oppure forzando la riscrittura
oppure intere pagine, sempre che non si anche delle aree protette. Tale scelta può
voglia avere una visione completa e lavorare essere effettuata tramite il menu contestuale
sull’intera memoria disponibile. Ma ciò può mostrato nella Fig. 4 e grazie alla selezione
non essere semplice da gestire. dell’azione più opportuna.
In questa sezione sarà anche possibile Qualunque sia l’operazione che intendete
modificare i valori leggendoli e scrivendoli, svolgere sul vostro chip, o qualsiasi sia
ed eventualmente salvando il contenuto della l’impostazione o il caricamento che avete
memoria Flash anche su un file creato ad hoc, effettuato, dare uno sguardo alle pagine di
come mostrato nella Fig. 3. memoria e ai valori scritti al loro interno
In alto a destra nella schermata mostrata in risulterà fondamentale, per cui una volta che
Fig. 2, all’interno della sezione Flash Utilities avrete letto il vostro dispositivo ed avrete
si trova il pulsante Show; facendo clic su di avuto accesso alla sezione Info Page, tutto ciò
esso si apre la sezione omonima che rende che sarà scritto sul vostro tag sarà disponibile
accessibili alcune importanti opzioni che a video (Fig. 5).
possono risultare piuttosto utili se si intende, Potrete scegliere anche una visualizzazione
per esempio, scrivere su aree di memoria differente con un diverso numero di
protette. colonne, ma noterete che si tratta soltanto
Anche in questo caso vi consigliamo un di un espediente grafico, talvolta comunque
attento approfondimento delle singole comodo. I valori che avrete letto potranno
funzioni, analizzate singolarmente, allo scopo essere salvati ed esportati per una
di individuare, caso per caso, l’operazione più consultazione successiva o un eventuale
appropriata. elaborazione. Unica pecca di questo
Come abbiamo detto all’inizio di questa programma è il fatto che al momento della
puntata, una delle funzioni più interessanti è pubblicazione di questo corso non esiste in
quella che consente di cancellare la memoria, versione per sistemi operativi Linux o MAC
anche soltanto al fine di poterla riscrivere. OS. Se volete lavorare con questi sistemi
Ricordiamo che ciò può essere fatto in operativi, vi consigliamo, quindi, di utilizzare

118 Settembre 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

una macchina virtuale oppure una qualche


forma di emulazione, stando però attenti
al fatto che non sempre le connessioni USB
che emulano una porta seriale risultano
effettivamente sempre attive e pertanto
dovrete prestare particolare attenzione al fatto
che sia sempre attiva e sincronizzata.
Vale la pena di sottolineare che questo
specifico software è l’unico tra tutti quelli che
vi serviranno per lavorare sui tag di Texas
Instruments a non poter essere sostituito da
alcun equivalente. Si tratta di un passaggio
obbligato che rappresenta, forse, un punto
debole se vogliamo poter considerare queste
schede utilizzabili in ogni ambiente e sistema
operativo. Finora tutto è andato benissimo;
ma dell’intera rete e dell’intera topologia che
Fig. 5 - La Info Page.
abbiamo messo su e che stiamo analizzando,
quale tag abbiamo letto? Ebbene, la sezione
MAC Address (accessibile dall’apposita Quando avremo finito di lavorare con questo
tab, della finestra di lavoro del programma, tool, il nostro tag sarà pronto per la fase
mostrata in Fig. 6) ci aiuta a individuare finale di test del sistema. Ci stiamo dunque
proprio quello giusto, proponendoci lo avvicinando alla messa in opera definitiva del
specifico indirizzo sia primario sia secondario progetto: siete pronti?!
diviso per campi con un’indicazione chiara
anche della profondità di rappresentazione SENSOR CONTROLLER STUDIO
del dato. Prima di ritenere operativo il nostro sistema

Fig. 6 - La scheda MAC Address.

Elettronica In ~ Settembre 2016 119


Sensor TAG: istruzioni per l’uso
Fig. 7 - Impostazione del lampeggio dei LED.

dovremo provvedere all’operazione di debug, Questo significa che è possibile, per esempio,
utile a risolvere quei problemi e ovviare a programmare l’ADC per effettuare un
quelle dimenticanze che affliggono un po’ campionamento periodico ed un buffering dei
tutte le versioni “beta” dei progetti. dati rendendo il sistema più performante dal
Il software Sensor Controller Studio è punto di vista energetico ed ottimizzando la
un’applicazione che viene utilizzata per durata e l’efficacia delle trasmissioni. Tra le
sviluppare e verificare, in fase di debug, altre cose, le interfacce gestite sono tantissime
il funzionamento dei Sensor Controller e si può quindi comunicare tramite I²C, SPI,
CC26xx/CC13xx e vi consentirà di creare, in oppure UART.
maniera estremamente efficiente, applicazioni Tra le caratteristiche più interessanti ci sono:
che lavorino indipendentemente dal sistema • possibilità di programmare implementando
centrale di gestione, svolgendo operazioni un linguaggio simile al C;
semplici in background. • gestione di sistemi multi-CPU tramite

Fig. 8 - Assegnazione degli I/O del Sensor Tag.

120 Settembre 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

framework; accertare che stiate impostando tutto


• generazione di una Sensor Controller correttamente, fate riferimento allo schema
Interface; del Sensor Tag che abbiamo richiamato
• toolchain completa di compiler ed nelle precedenti puntate del corso, dove
assembler; troverete tutte le informazioni relative alle
• piattaforma di sviluppo che integra connessioni fisiche tra i dispositivi e l’MCU,
funzionalità di sensor control task testing e ed eventualmente dovesse essere presente,
debug. anche all’elettronica di interfaccia (in Fig. 8
vedete la finestra di gestione degli I/O).
Un metodo piuttosto interessante per Una volta che avrete configurato tutto e
programmare i tag prevede l’accesso diretto caricato il vostro codice, sarà il caso di
alle funzioni precaricate, soprattutto se verificare che tutto funzioni; solo allora
si decide di partire da esempi di codice potrete ottenere dei grafici di risultati
già pronti come quello che implementa il strutturati come quello che appare nella Fig. 9;
lampeggio del LED a bordo del tag. Infatti, l’analisi dei dati che viene proposta in tale
selezionato l’esempio si ha subito accesso a figura è chiaramente temporale e le escursioni

Fig. 9 - Un grafico che illustra l’andamento dei dati acquisiti dai sensori.

una sezione di inizializzazione del codice, rappresentano l’andamento della variabile


poi a una successiva in cui si spiega e si prescelta nel tempo: semplice esattamente
imposta il funzionamento, per poi arrivare come sembra.
alla chiusura della programmazione. Durante Tale grafico può essere trasferito in formato
questa fase è possibile impostare sia il numero “log” e salvato su un file per una successiva
che l’intensità dei lampeggi del LED, ovvero elaborazione, qualora si renda necessaria.
contare i lampeggi, così come fatto nel codice Ma come si fa ad arrivare all’esecuzione
mostrato in Fig. 7, con la sola aggiunta di questo codice? Ebbene, avete notato che
del parametro di riferimento, qualora ne avevamo selezionato “Graph”? Prima di
richiedano uno, in ingresso. arrivare lì è necessario dare uno sguardo a
Alla scheda andranno collegate delle quello che succede nella sezione “Setup”.
periferiche. Qui viene dimostrata l’intera procedura
Questo vale in generale, perché dal momento di test (Fig. 10) che può essere manuale o
che stiamo parlando del nostro SensorTag, automatica; lasciamo a voi l’approfondimento
sappiamo già che cosa abbiamo a bordo, il di questo tema.
che vuol dire che possiamo anche considerare
che il lampeggio del LED oppure l’accesso PACKET SNIFFER
all’A/D converter si riferiscano al controllo Dopo aver completato lo sviluppo
del pin corrispondente: nell’ultimo caso dell’applicazione e la programmazione
(ingresso dell’ADC), al DIO23. Per potervi passiamo alla fase di test e verifica, che

Elettronica In ~ Settembre 2016 121


Sensor TAG: istruzioni per l’uso
applicativo software che può mostrare e
memorizzare i pacchetti in trasmissione via
radio su un sistema.
Lo scopo viene raggiunto in maniera
egregia da questa soluzione, soprattutto
grazie al supporto di diversi protocolli di
comunicazione, tra i quali non mancano
il Bluetooth Low Energy, Zigbee e l’IEEE
802.15.4, RF4CE, SimpliciTI ed altri protocolli
generici.
Una delle principali funzioni che deve
svolgere un software di questo tipo è
decodificare i pacchetti in transito per poterli
interpretare correttamente, farne un parsing e
proporli a video.
Tra le caratteristiche più interessanti abbiamo:
• salvataggio in apertura di file contenenti i
pacchetti;
• selezione dei campi da visualizzare e
nascondere;
• filtraggio dei pacchetti;
• dettagli sui pacchetti in transito;
• lista dei destinatari;
• analisi cronologica delle trasmissioni, con
identificazione degli istanti di trasmissione
Fig. 10 - Procedura di test. e ricezione;
• possibilità di reinoltro dei pacchetti
catturati tramite socket UDP per il
affronteremo in queste pagine descrivendo monitoraggio in tempo reale del sistema.
l’utilizzo di un prezioso strumento capace di
“sniffare” i pacchetti di dati scambiati durante Tutto questo risulta particolarmente utile
la comunicazione. quando si stanno utilizzando bande di
Molto spesso, quando si ha a che fare con un frequenza al di sotto del GHz, caso in cui è
sistema di comunicazione, è utile verificare necessario avere a disposizione dell’hardware
l’effettiva funzionalità, nonché l’integrità dedicato dal momento che non tutti i
delle trasmissioni. A questo scopo esistono dispositivi supportano tutte le frequenze
sistemi che sono in qualche modo interposti oppure le modalità operative possibili.
tra mittente e destinatario, il cui ruolo è quello In generale, possiamo sottolineare che va
di “intercettare” le comunicazioni per poter specificata la compatibilità tra i dispositivi e
analizzare il trasferimento dati. Quando tutto i protocolli e il software, ma nel nostro caso
questo viene fatto allo scopo di debug, e non questo dubbio non esiste: il packet sniffer
certamente per intrufolarsi all’interno di funziona perfettamente con CC2420DK e
“conversazioni private”, si possono avere utili CC2420ZDK (sebbene queste schede siano
informazioni sul funzionamento complessivo differenti da quelle che stiamo utilizzando)
del sistema. ed altre piattaforme hardware. In particolare,
Mettersi in ascolto di un apparato di sarà proprio il filtraggio ad essere differente,
comunicazione a radiofrequenze è una per il modo in cui sono organizzati i dati;
delle fasi di test e verifica della corretta altrettanto è per il parsing.
realizzazione del proprio sistema e questo Sottolineiamo questo aspetto perché CC2420
vale soprattutto se è implementato un rappresenta una delle soluzioni d’antenna più
protocollo di sicurezza. SmartRF Packet largamente impiegate nei dispositivi realizzati
Sniffer fa proprio questo: si tratta di un da Texas Instruments, soprattutto nel campo

122 Settembre 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

dell’IoT. Esemplare è la board TelosB, sulla possibilità concreta di utilizzare questi


basata su questo chip d’antenna e della dispositivi. E infatti, quelli che vediamo
quale abbiamo visto estratti del codice per adesso sono casi applicativi perfettamente
l’implementazione dello stack protocollare a funzionanti, di grande interesse per le
livello MAC Low. comunità sia dei programmatori sia degli
Non aspettatevi, dunque, una soluzione sviluppatori sia dei progettisti hardware.
universale ma un valido strumento che vi Cominciamo con Z-Stack™ Linux Gateway.
potrà essere utile nei casi per i quali è stato Si tratta di una soluzione automatizzata per
studiato e sviluppato. la casa che include diverse funzionalità di
La Fig. 11 rappresenta l’interfaccia del grande interesse:
programma grazie alla quale, selezionando • controllo delle luci;
da subito il protocollo di comunicazione • gestione degli allarmi e della sicurezza;
inizieremo l’analisi funzionale del sistema • controllo del consumo energetico.
stesso. Poche opzioni, dunque, peraltro molto
semplici ma non per questo meno valide. Una delle funzionalità più interessanti
Infatti le reti di sensori possono operare in e peraltro comune a questa ed altre
maniera tale da svolgere diverse funzionalità applicazioni è la possibilità di aggiornare il
di connessione e di queste è sempre utile firmware in modalità Over-The-Air. Inoltre,
testare la qualità della connessione stessa questa soluzione consente una prototipazione
che naturalmente dipende criticamente dalle rapida su BeagleBone Black, una scheda
condizioni a contorno, dalla presenza di di grandissimo successo basata su Sitara
eventuali altre antenne o soggetti interferenti AM335x Cortex-A8 ma anche di mettere in
e da fattori ambientali più in generale. funzione il sistema su altre piattaforme basate
A differenza dei collegamenti tradizionali, su Linux o Android. È anche compreso il
che hanno un bit-error-rate (spesso indicato supporto per SimpleLink Range Extenders
con l’acronimo BER) basso, un PDR (Packet CC2591 e CC2590.
Delivery Ratio) da valutare ed altre figure Questi front end supportano appieno la
di merito che bisogna tenere sotto controllo, trasmissione di potenza pari a +22dBm e
nel caso delle reti LLN queste figure possono +14 dBm,rispettivamente, e garantiscono
variare sensibilmente e questo non vale una sensibilità in ricezione migliorata per
soltanto per le reti wireless, ma per tutte CC253X.
quelle che possono prevedere variazioni di Vale la pena accennare a Z-Stack Home,
impedenza importanti.
La qualità del collegamento ha, peraltro,
implicazioni dirette sul protocollo di
instradamento dei dati e sul cosiddetto tempo
di “convergenza”; mentre, infatti, i protocolli
convenzionali sono progettati sui requisiti
di collegamento, sul tempo di transito e su
altre caratteristiche, nel caso delle LLN questi
criteri di progetto non sono più altrettanto
validi perché potrebbero portare a instabilità
nell’instradamento soprattutto perché i
dispositivi di cui parliamo non inviano grandi
moli di dati e pertanto è legittimo aspettarsi
che la fase di assestamento nella trasmissione
possa portare a loop interni e ad una
sincronizzazione che stenta a stabilizzarsi.

POTENZIALI APPLICAZIONI
Ciò detto, le problematiche di cui abbiamo
parlato non influiscono negativamente
Fig. 11 - L’interfaccia utente di Packet Sniffer.

Elettronica In ~ Settembre 2016 123


Sensor TAG: istruzioni per l’uso
un’altra soluzione molto interessante che ora una breve nota di approfondimento: a
prevede l’automazione domotica basata su livello di programmazione, e di software
CC2630, CC2530 e CC2538, soluzione che che la consentono, tutti coloro che hanno
include anch’essa un pieno supporto per le già avuto esperienze con ARM certamente
specifiche 802.15.4 ed il supporto per TIRTOS. conosceranno lo IAR Workbench, un IDE di
Naturalmente ciò che viene fatto per sviluppo estremamente completo, potente e
l’automazione domestica può essere mirato performante: ebbene, sappiate che Z-Stack
anche soltanto alla realizzazione di alcuni è stato sviluppato attestato utilizzando i
moduli e pertanto esiste lo Z-Stack Lighting, compilatori IAR (www.iar.com).
il quale serve esattamente a quello che il
nome suggerisce, ovvero la capacità di CONCLUSIONI
gestire impianti di illuminazione domestici SimpleLink Sensor Tag è un prodotto dalle
basati su LED o CFL, con rilevazione di grandi potenzialità, sebbene di primo acchito
posizione e commutazione di illuminazione, non sia facile trovargli applicazioni applicate
anche riferito all’intensità. Non pensiate, al mondo reale. Ma quando si iniziano a
però, che la soluzione possa essere applicata scoprire le caratteristiche, la potenza di calcolo
soltanto in ambito domestico perché l’intera e soprattutto la dotazione a bordo, ci si rende
infrastruttura autostradale, gli impianti conto che è qualcosa di notevole e versatile.
industriali o anche gli stabilimenti possono Ripercorriamo dunque, rapidamente, i
essere controllati tramite questa soluzione. passi di progetto, partendo dalle specifiche:
Vi consigliamo, qualora siate interessati una volta inquadrato il particolare caso
a sviluppare in questo ambito, di dare applicativo, le specifiche di progetto, i
un’occhiata al kit dedicato, di cui trovate tutte parametri e le restrizioni, abbiamo compreso
le informazioni sul web alla pagina www. gli aspetti fondamentali, tra cui, per esempio,
ti.com/tool/cc2530zdk-zll; si tratta dello ZigBee il protocollo di comunicazione da utilizzare,
Light Link Development Kit basato sul le dimensioni fisiche del sistema, la velocità di
dispositivo CC2530. trasferimento dei dati di cui abbiamo bisogno
Esistono poi, ma ne facciamo solo un e tanti altri parametri ancora.
cenno, due soluzioni che prendono il Quando tutto questo è chiaro e definito, si
nome di Z-Stack Mesh e Z-Stack Energy: vi può passare alla realizzazione della scheda,
consigliamo di analizzarle se volete studiare all’integrazione e all’ingegnerizzazione
l’impatto del consumo energetico, ma anche che ottimizza sia lo spazio occupato, sia i
una versione particolare del protocollo. consumi sia le dimensioni fisiche e tutti gli
Concludiamo questo argomento con un altri parametri che stabiliscono i trend di
riferimento ad alcune collaborazioni che miglioramento del sistema. In questo modo
Texas Instruments ha messo in piedi con tutti i concetti appresi, tutti i parametri,
aziende che lavorano in questo campo. fisici e non, saranno stati presi nella giusta
Il sodalizio con Ubilogix nasce con lo scopo considerazione e diventeranno concretamente
di fornire un analizzatore di protocollo parte del progetto.
compatibile con lo standard IEEE 802.15.4 e Non è detto che siate chiamati ad effettuare
ZigBee. la progettazione della scheda, perché potreste
Il risultato di questo lavoro è Ubiqua tranquillamente trovare quella che fa per voi
Protocol Analyzer, che supporta, tra gli già disponibile in commercio, così come è
altri, perfettamente il dongle USB CC2531, capitato di analizzare in questo caso. A quel
già contenuto nel kit CC2531EMK. Una punto, però, avrete comunque da mettervi
delle funzionalità interessanti di Ubiqua è il al passo con lo studio di tutto il protocollo
fatto che può lavorare insieme con SmartRF di comunicazione. Una volta che tutto
Packet Sniffer, in particolare acquisendo ed questo sarà chiaro, e bisognerà passare alla
elaborando i file che provengono da questo programmazione, sarà necessario tradurre
programma (*.psd). da subito in codice il protocollo, le variabili, i
Esiste un’alternativa, nello stesso ambito, che meccanismi di attribuzione degli indirizzi e di
è il Perytons Protocol Analyzer. Facciamo verifica dei contenuti dei dati e dei messaggi

124 Settembre 2016 ~ Elettronica In


Sensor TAG: istruzioni per l’uso

e così via dicendo. Sarete in grado di mettere


tutto a questo sistema quando avrete scritto
le opportune librerie, da includere nelle
vostre applicazioni. Quando avrete il vostro
applicativo, non vi resterà che fare l’upload
sulla scheda e iniziare la fase di test.
Prima di concludere, vogliamo darvi qualche
consiglio pratico per la programmazione.
1. Commentate tutto il codice! Sempre! Fig. 12 - Sensor Tag
Non sottovalutate questo aspetto versione CC2560.
della programmazione e sappiate che
programmare significa intuire... tra le
altre cose. È l’intuizione che risolve il
problema, ma per quanto sia stata vostra, Fate bene a dare per scontato che la scheda
difficilmente la ricorderete quando sarà funzioni ma non è sempre detto.
trascorso un po’ di tempo. E tra le altre 5. A questo punto siete pronti per iniziare
cose, è buona norma che il codice non sia la fase di debug. Il codice funziona? Tutte
considerato solo “vostro” e pertanto è le funzioni che avete previsto lavorano
giusto renderlo leggibile ed interpretabile correttamente? Le vostre variabili
anche da chi programma in altro modo assumono i valori che vi aspettavate?
oppure sta iniziando. 6. Se le risposte a queste domande
2. Per poter programmare correttamente è sono tutte affermative. Potete passare
indispensabile avere chiaro che cosa deve a test più evoluti, riguardanti capacità
fare il sistema. Dove volete arrivare e come di invio e ricezione dei dati, test della
arrivarci sono due domande fondamentali memoria, accesso ai dati, indirizzamento,
e pertanto dovete prima scrivere che cosa calcolo del tempo di latenza e tutta la
deve fare il sistema, magari elencando caratterizzazione dell’intero sistema.
semplicemente le funzionalità, poi è
importante correlare le funzioni perché L’IoT è il futuro e questa scheda si propone di
il comportamento del sistema in realtà rendere estremamente più “smart” soluzioni
rappresenta sempre la traduzione in codice domestiche e aziendali, di varie dimensioni e
di procedure e operazioni che vengono con specificità anche molto diverse tra loro.
eseguite se si verificano delle condizioni. Programmare i Sensor Tag non è difficile
Per cui, utilizzate il Flow Chart! e soprattutto è interessante perché la
3. Il terzo consiglio può sembrare banale programmazione si sposa con l’integrazione
ma non lo è: scegliete i tool giusti per la e ragionare su un hardware così configurato
scrittura del codice. Un buon framework di consente di pensare “a tutto tondo”: dai
interfaccia per un programmatore prevede protocolli di comunicazione al consumo
funzionalità di indentazione automatica, energetico, passando per la gestione di pin di
colorazioni per i tipi di variabili e tante I/O. Il tutto è supportato da una serie di tool
altre funzioni che visivamente aiutano che Texas Instruments mette a disposizione
a scrivere in maniera più agevole per dello sviluppatore, dando la possibilità
cui non fermatevi all’IDE consigliato ma concreta anche a chi comincia di produrre da
sperimentate. subito dell’ottimo codice.
4. Finita la codifica, potete passare al flashing Rendere la programmazione testuale più
del dispositivo. Iniziate con applicativi semplice utilizzando schemi e grafici è
semplici in modo da verificare che tutto stata una scelta in linea con quella che
vada a buon fine e poi createne di sempre normalmente siamo abituati a considerare
più complicati. Ricordate che se lo script l’evoluzione odierna. In conclusione, non
elementare è quello che fa lampeggiare il possiamo che consigliarvi di iniziare a
LED, c’è un motivo. Non abbiate fretta e sviluppare su questa piattaforma.
provate da qui, anche se vi sembra banale. Dunque, buon lavoro! g

Elettronica In ~ Settembre 2016 125

Potrebbero piacerti anche