Sei sulla pagina 1di 7

Sistema per comunicazione wireless per scambio dati in real

time.
Il sistema di comunicazione e’ su base wireless con frequenza di lavoro standard di 2,4GHz e
relativo protocollo 802.11b/g/n. Di fatto viene tutto costruito sulla base di un modulo che
originariamente permette di configurare e inizializzare una comunicazione wireless. Per il suo
funzionamento il relativo modulo possiede un microprocessore (uP) dedicato e programmato per
svolgere tali funzioni. La casa costruttrice ha lasciato libera la possibilita’ di riprogrammarlo a
discrezione del progettista per l’esecuzione di compiti differenti.

Nel complesso cio’ che descrive il uP potrebbe essere sintetizzato in uno schema:

Viene ideato e costruito per essere un SOC (System On Chip) e finalizzato ad applicazione
standalone. Il processore ha 32 Pin tra periferiche di general purpose ed altre dedicate; lavora ad
una tensione compresa tra i 3V e 3.6V e tra le periferiche ha un ingresso ADC con conversione a
10Bit e range di tensione accettata tra i 0.2V e 1.2V. Per specifiche piu’ dettagliate si rimanda al
datasheet:

http://espressif.com/sites/default/files/documentation/0a-esp8266ex_datasheet_en.pdf
Il modulo all’origine costituisce gia’ un sistema funzionante che permette in modo veloce di
configurare e stabilire una connessione wireless, tutto questo comunicando attraverso comandi
testuali inviati tramite lo standard RS-232. Questi comandi vengono chiamati AT Commands e il uP
e’ programmato appositamente per la loro esecuzione.
Cio’ che e’ stato eseguito in questo progetto e’ l’eliminazione di tutte le funzionalita’ che
originariamente tale modulo wireless svolgeva e la sua riprogrammazione in modo da predisporlo
a funzionalita’ specifiche.
Dunque per rendere cosi’ versatile questo modulo, e quindi dare la possibilita’ di modificare il
codice come si vuole, una community di progettisti software si e’ occupata in modo autonomo di
creare un “core” ad-hoc con il quale si puo’ sfruttare un IDE comune come quello usato per le
schede di prototipazione (Arduino), nonche’ le funzioni comunemente usate anche in Arduino per
gestire le connessioni WiFi.

Prima di passare nello specifico del livello software devono essere considerati alcuni aspetti
fondamentali della parte hardware, in particolare una piccola scheda che ha permesso in termini
pratici e non, di rendere piu’ accessibile il uP ovvero il modulo sul quale questo e’ montato.
Sostanzialmente per riprogrammare questo modulo c`e’ bisogno di:

- IDE Arduino (dopo aver installato il core per schede ESP8266)


- Adattatore seriale USB -> RS-232
- Traslatore di livelli logici per comunicazione seriale

Nella concretezza il modulo, predisposto di periferica seriale (bifilare), potra’ essere connesso
all’adattatore USB-Seriale attraverso i Pin di ricezione (Rx) e trasmissione (Tx), ovviamente
tenendo conto della necessita’ di effettuare un Cross tra i due. L’adattatore verra’ essenzialmente
riconosciuto dall’IDE come una porta COMXX che sceglieremo come target per scaricare il nostro
software. Rimane in sospeso il traslatore di livelli logici che verra’ interposto tra l’adattatore USB-
Seriale e il modulo, questo per il semplice fatto che e’ indispensabile tener conto che il modulo e’
costruito per lavorare ad un livello logico di tensione pari a 3.3V mentre l’adattatore lavora ad un
livello di tensione pari a 5V. Si ritiene opportuno fare ulteriori considerazioni riguardo la fase
precedentemente descritta, ad esempio il livello logico in ricezione del modulo va
obbligatoriamente traslato da un valore di 5V ad un valore di 3.3V, visto l’evidente superamento
della soglia di valori di tensione accettati dal modulo, altrimenti si rischierebbe di danneggiare la
periferica; mentre in uscita “trasmissione”, si potrebbe fare a meno di adattare i livelli, dato che i
3.3V di trasmissione (Tx) del modulo sono piu’ che sufficienti per far in modo che vengano visti
come ‘1’ Logico da una logica a 5V. Un'altra semplice considerazione consiste nell’esistenza di
adattatori USB-Seriali che operano direttamente a 3.3V a cui non serve nessun traslatore di livelli,
facendo connessioni dirette tra il modulo e l’adattatore USB. Nel caso specifico si era in possesso
dell’adattatore a 5V e del traslatore, decidendo cosi’ di optare per questa soluzione dandoci la
possibilita’ di sfruttare il strumenti in nostro possesso.

Di seguito una foto del circuito realizzato ed utilizzato per l’esperienza:


Il modulo (sulla scheda stampata di colore bianco) ed il traslatore (a destra sullo stampato di
colore rosso) sono montati attraverso degli strip connector su una basetta millefori, sulla quale,
accanto ai due morsetti (in alto a sinistra), si puo’ inoltre notare un circuito di alimentazione nel
quale sarebbe dovuto esserci montato uno stabilizzatore di tensione a 3.3V ma dato che quello di
cui si disponeva in precedenza erogava una potenza minore (100mA) dell’assorbimento del
modulo che ne richiedeva il doppio e’ stato scelto di alimentare tutta la scheda direttamente alla
tensione di lavoro del modulo.
Il traslatore di livelli e’ la piccola schedina a destra ed e’ gia’ assemblata, di fatto non sono altro che due
canali, di coppia ricezione e trasmissione, dove se ne usera’ solo uno di questi. Nulla toglie che questo
piccolo circuito di traslazione puo’ essere, in modo molto semplice, riportato su un progetto e montato su
una scheda in caso se ne dovesse avere il bisogno. A tal proposito se ne riporta uno schema di esempio di
traslatore:

Invece sempre osservando la scheda sopra al traslatore si hanno i due pin per la comunicazione seriale
utilizzati per la programmazione ma anche per comunicazione a scopi generali come il debugging.

Ancora un’aspetto riguardo l’hardware sono i due pulsanti di FLASH(FLSH) e RESET (RST), acquisiscono
queste considerazioni particolari perche’ sono i pulsanti che vengono usati per portare il modulo in una
modalita’ di flash o piu’ semplicemente una modalita’ di programmazione che permette di scaricare su di
esso il codice desiderato. Per portare il modulo modulo a mettersi in questa modalita’ bisogna premere il
tasto RST, tenerlo premuto e poi premere il tasto FLASH solo in quel momento rilasciare il tasto RST e poi
il tasto FLSH, da questo momento il modulo e’ abilitato alla scrittura del codice. Si preme il tasto RST per
uscire da questa modalita’. Il tasto RST serve anche semplicemente per il riavvio del modulo.

Dopo questi passaggi bisogna collegare il modulo, come gia’ in parte specificato in precedenza, in
comunicazione seriale con il PC, attraverso il convertitore USB-Seriale, dopo di che e’ possibile scaricare il
software attraverso l’IDE che riconoscera’ il convertitore e di conseguenza il modulo come una porta seriale
COMXX.
Una foto del circuito compreso di sensore:

Aquisizione della temperatura e struttura del software.


Dopo aver in modo generale specificato alcuni aspetti pratici e parte delle caratteristiche dell’hardware e
di come avviene la programmazione a livello fisico, del modulo, si vuole ora introdurre la parte che portera’
tutto il sistema a raggiungere uno scopo finale di reale utilizzo, come e’ stato trattato in questa occasione,
l’aquisizione di valori di temperatura in un fluido, partendo da cenni teorici, dalla relativa parte di cio’ che
viene svolto in fase di programmazione dal lato del modulo per arrivare alla parte che servira’ per
rappresentare in maniera esplicativa ed intuitiva i dati provenienti dal sensore.

Quando si parla di rappresentare i dati in maniera intuitiva si intende che verra’ utilizzata, come poi verra’
approfondito, una specie di pannello di controllo online definito dashboard.

Di fatto si puo’ osservare che sulla scheda in basso (sotto il modulo) ci sono 3 Pin sui quali verra’ montato
un sensore di temperatura (LM35). I relativi pin sono due di alimentazione ed uno che va diretto nel pin
dell’ADC del modulo, questo perche’ il sensore di temperatura essendo un sensore attivo ha bisogno di un
alimetazione e come uscita sul terzo pin fornisce un valore di tensione proporzionale alla temperatura con
la caratteristica espressa sul datasheet dal costruttore di 10 mV / 1*C.

Si vuole ricordare che il modulo ha un solo un ingresso di conversione analogico digitale con un range di
valori di tensioni accettabili molto bassi in ingresso come gia’ specificato (0.2V – 1.2V), questo fattore
potrebbe essere leggermente restrittivo in termini pratici ma nel caso di questa esperienza si e’ riusciti a
rientrare in questi valori senza troppe difficolta’ dato che le temperature in gioco non permettono di
superare i valori accettati.
Ora ci focalizziamo sul SOFTWARE la quale ovviamente risulta la parte che permette sia di acquisire i dati e
garantire la loro manipolazione, sia di occuparsi della connessione e della trammissione dei dati su mezzo
WiFi. La programmazione presenta dei fondamentali aspetti che generalizzano e forniscono un fondamento
per la comprensione complessiva delle funzionalita’ svolte dal modulo, nonche’ dal programma che viene
caricato ed eseguito su di esso. Il piu’ importante di tutti riguarda il comportamento del modulo che viene
programmato per far in modo che si comporti come un WebServer e l’altro comporta l’invio dei dati tra
client e server sfruttando un formato di scambio dati testuale chiamato JSON (JavaScript Object Notation).

Ovvie puntualizzazioni devono essere fatte riguardo questo formato JSON che dal punto di vista
pratico risulta essere come gia’ detto un formato testuale, inviato tramite richiesta http,
rappresenta, in termini tecnici della programmazione, un array associativo di coppie
{chiave:valore} trasmesso sia con il metodo POST sia con il metodo GET. Viene utilizzato spesso per
scambio dati dove si richiede una rapidita’ nello scambio ed una quantita’ di dati massiccia e
continua, questo perche’ risulta essere tutta una stringa e di conseguenza molto semplice per
poter essere inviata soprattutto in termini di banda questa risulta essere abbastanza leggera.

Quindi il programma in esecuzione sul modulo, utilizzando una libreria ad-hoc, non fa altro che
permettere al programmatore, attraverso l’utilizzo di alcune funzioni, di costruire una stringa, nel
formato JSON, adatta alle esigenze richieste se non altro considerando di avere la piena liberta’
sulla struttura e sui nomi e valori dell’array. In questo modo, ricordando che il modulo viene
programmato per comportarsi come server, ad una richiesta http da parte di un client, il modulo
restituisce dei dati in formato JSON in una risposta HTTP dove ovviamente l’interprete dal lato
client ricevera’ e potra’ utilizzare come un qualsiasi dato tenendo conto del formato
{chiave:valore} di un array associativo.

Esempio generico di JSON:

"home": "Html.it",

"link": "http://www.html.it",

"argomento": "Standard del web",

"aree": [

"area": "CSS",

"url": "http://css.html.it"

},

"area": "Basic",

"url": "http://basic.html.it"

]
}

Tutto questo e’ stato fatto perche’ si e’ voluto optare per una soluzione che avrebbe consentito
una rappresentazione dei valori di temperatura in maniera grafica ed intuitiva su di un pannello
virtuale e questo viene svolto attraverso una dashboard utilizzabile tramite Browser scritta in
javascript. Viene utilizzata nello specifico una dashboard gia’ in parte sviluppata, dal nome
FreeBoard. In questa e’ presente un pannello di controllo per gestire le sorgenti dei dati che
possono essere varie, sia creare pannelli di rappresentazione dei dati, nonche’ la possibilita’ di
piccoli spazi per creare delle dash personalizzate ma solo con l’ausilio di un editor per poter
scrivere parti di codice che permettono appunto la personalizzazione. La prima cosa che
essenzialmente richiede FreeBoard e’ un URL della sorgente dei dati (Server), dove nel nostro caso
e’ appunto di tipo JSON che come descritto in precedenza e’ stato creato attraverso il modulo il
server apposito che interrogato di volta in volta restituira’ la stringa, contenente tutti i dati,
direttamente alla dashboard. Nel momento in cui si crea un pannello per rappresentare i dati in
FreeBoard, questa permettera’ , “scartabellando” nel JSON inviato dal server, di scegliere il dato
da far visualizzare sulla dashboard, sia in un formato grafico sia un formato testuale o a propria
discrezione.

Uno screenshot della dashboard:

Per rigore di completezza si ritiene opportuno fare un riepilogo del sistema, a partire dal modulo
che viene riprogrammato nel complesso per comportarsi come server JSON stando in ascolto di
una richiesta da parte di un client, dal momento che una richiesta gli viene inviata da parte dello
stesso, il modulo o server, si mette in ascolto e risponde con il formato JSON, costruendo la
risposta da restituire al client sulla base del valore di temperatura acquisito, proveniente dalla
conversione ADC dei valori di tensioni forniti dal sensore di temperatura.

Il piccolo sistema risulta essere utilizzato come un apparato a se stante dove fornito di
alimentazione e di una connessione WiFi permette di svolgere in maniera completa le sue
funzionalita’, alcune imperfezioni lo rendono un dispositivo poco accessibile all’utente generico
come il fatto che per creare la connessione WiFi ed inserire i dati di accesso alla rete c’e’ bisogno
di inserire questi dati in fase di programmazione.