Controllo e monitoraggio > ESP8266, 1-wire and thingspeak/emoncms


ESP8266, 1-wire and thingspeak/emoncms
ovvero , come fare un termometro ultra low cost remotabile

 

Casualmente ho scoperto su internet  l'esistenza di questo chip Cinese che offre  la soluzione a basso costo per numerosissimi problemi di interconnessione tra "qualsiasi cosa" e la rete internet .

All'interno infatti sono presenti un set di istruzioni da inviare via protocollo seriale TTL ( a 3.3 volt ) che permettono di stabilire facilmente una connessione con la propria rete wireless e di aprire connessioni con protocolli di rete standar.. ma oltre a questo la MCU presente all'interno,  offre:

  • 16 GPIO pins
  • SPI, I²C,
  • I²S interfaces with DMA (sharing pins with GPIO)
  • UART on dedicated pins, plus a transmit-only UART can be enabled on GPIO2
  • 1 10-bit ADC

 

 

 Quindi oltre che da semplice interfaccia seriale>wifi,  questo chip permette la scrittura di programmi autonomi che interfacciati a sensori di vario tipo, ingressi o uscite digitali ecc. , permettono la realizzazione di svariate apparecchiature .

Secondi me è quello che al 2015 mancava per rendere davvero low cost e possibile "l'Internet delle cose" .

Semplice progetto con ESP201

Mi sono messo cosi a studiare questo chip che è usufruibile dagli hobbisti di elettronica grazie alla presenza sul mercato di numerose schedine di sviluppo sul quale è montato.

Queste schedine usano o meno diverse GPIO  del chip e quindi hanno costi e dimensioni diverse anche se in definitiva sono tutte compatibili l'una con le altre.

Io ho scelto di acquistare la scheda denominata ESP-201 che è una delle piu' complete ma anche più care presenti sul mercato, ma dovendo sperimentare meglio avere a disposizione tutte le porte disponibili del chip., e comunque il costo si attesta a meno di 6 euro per ogni scheda.. quindi tutto sommato abbordabile.

Arrivata la scheda ho provato ad alimentarla e connettarla ad  un computer Raspberry PI che ha a disposizione una seriale TTL a 3.3V quindi perfettamente adatta per la scheda ESP201.

 

 

Se non si ha a disposizione un Raspberry PI ( che pero visto il costo mi sento di suggerire come sistema di sviluppo da usare con le varie schede ESP ) si puo adottare un adattatore USB > seriale a 3.3 volt...

Io comunque ho usato un Raspberry e quindi questo articolo descriverà questa soluzione di sviluppo.

 

Dato che la scheda ESP-201 viene offerta con il firmware originale ( che permette di interfacciarla al mondo esterno tramite comandi AT inviati via seriale ) io ho provveduto a flasharla con il firmware NodeMCU che permette di programmare la scheda usando un linguaggio simile al Python,  chiamato  'Lua'.

Prima di installare i tool necessari alla programmazione degli ESP con Raspberry, occorre installare su Rasperry,  python e python serial nonchè Git  che è un software per gestire i progetti open surce disponibili sul omonimo sito :

 

sudo apt-get install minicom

sudo apt-get install python

sudo apt-get install python-serial

sudo apt-get install git

 

Sul raspberry sono andato nella directory di lavoro dell'utente PI :

cd /home/pi

e ho lanciato il comando per installare i file necessari al flash della ESP..

 

git clone https://github.com/themadinventor/esptool.git

 

Poi ho scaricato sul mio PC l'ultima versione del firmware di NodeMCU nella versione 'integer' disponibile da questo sito :

https://github.com/nodemcu/nodemcu-firmware/releases/latest

in particolare ho usato questa versione ,... :

https://github.com/nodemcu/nodemcu-firmware/releases/tag/0.9.6-dev_20150704

ho posizionato il file scaricato nella directory /home/pi/esptool di Raspberry rinominandolo in integer.bin ( per semplicita )

Lanciandio infine questo comando si installa il firmware NodeMCU sulla scheda esp-201 :

 

sudo python esptool.py --port /dev/ttyAMA0 write_flash 0x00000 integer.bin

 

Per perrmettere tutto questo il raspberry deve essere connesso alla scheda ESP-201 in questo modo :

Riferirsi allo schema a lato..

  • 3.3 del raspy al 3.3 della esp-201
  • GND del raspy al GND della esp-201
  • TX del raspy al RX della esp-201
  • RX del raspy al TX della esp-201

Inoltre sulla esp-201 occorre fare questi collegamenti ( riferirsi alla foto sotto )  :

  • pin IO0 a massa ( gnd )
  • pin io15 a massa ( gnd )
  • pin chip_en a +3.3

In particolare il pin IO0 a massa seguito da un reset  'dice' al chip che deve predisporsi a ricevere il firmware.

il pin chip_en a +3.3 attiva il chip e quindi deve essere sempre a 3.3 V

idem per il pin IO15 che deve esere posto a massa nel normale funzionamento.

Se si hanno difficoltà a seguire la mia guida si puo utilizzare questa che è più completa e  comprende anche una versione per Windows .

 

 

 

 

Il mio primo progetto..

 

Una volta disponibile la scheda ESP-201 con il firmware NodeMCU ho provato a realizzare un circuito che leggesse la temperatura da un sensore DS1820  tramite il protocollo 1-wire , e inviasse il valore ad un server remoto ( emoncms.org), tramite la connessione alla mia rete wireless domestica.

Oltre a questo il mio circuito doveva avere la possibilità di essere alimentato a batteria e quindi doveva consumare la minor corrente possibile.

 

Il risultato hardware è nello schema che si vede sotto.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Per quanto riguarda  la batteria,  la scelta è caduta sul modello CR123 che ha una tensione compatibile con quella del chip esp8266 e una capacità che dovrebbe garantire una autonomia di circa 1,5 anni.

Il ponticello JP1 se connesso a massa permette di settare la scheda ESP-201 a ricevere il firmware ( quindi questo schema si puo usare anche per flashare NodeMCU sul modulino ).

P1 è il pulsantino di reset mentre P2 ha una funzione fondamentale.. se premuto durante un reset permette di fermare il programma in esecuzione ed evitare che vada in deepslip .

In Deepslip il modulino non è in grado di ricevere i comandi per l'upload dei file (per es.  in caso di modifiche o aggiornamenti )  e se non ci fosse questa possibilità bisognerebbe resettare il tutto predisponendo un nuovo aggiornamento del firmware..

Per fermare il programma occorre quindi seguire questa procedura :

  1. tenere premuto  P2
  2. premere per un istante P1 ( reset )
  3. rilasciare P2 dopo circa 2 secondi

 

 

 

Il software..

Il software scritto in linguaggio LUA si compone di 3 file :

  • init.lua
  • dallas.lua
  • ds18b20.lua

 

Il file init.lua viene cercato e avviato automaticamente al boot di NodeMCU.

in esso sono contenuti i rimandi al file sucessivo ( dallas.lua ) , la gestione del pulsantino P2 che ferma l'esecuzione e i timer vari che gestiscono il Deepslip.

Nella riga wifi.sta.config("SSid","password") occorre inserire le credenziali per la connessione alla prorpia rete wifi.


 

Avviato init.lua se non è premuto P2 viene eseguito dopo 2 secondi il file dallas.lua che provvede a leggere il dato di temperatura fornito dalla sonda ds1820 e di inviarlo al server di emoncms.

Nel file  dallas.lua c'è questa riga di programma che contiene  le informazioni per autenticarsi presso il server emoncms.org; in particolare la apykey red/write che viene fornita dopo la registrazione al servizio ( gratuito ).

 

conn:send("GET /emoncms/input/post.json?node=11&json={T1:"..t1.."}&apikey=*************************************  HTTP/1.1rn")

 

Sostituire quindi gli asterischi con la propria apykey.

La riga :

conn:connect(80,'80.243.190.58')

contiene l'indirizzo IP del server emoncms che non viene risolto da un sistema DNS per risparmiare tempo e quindi energia x la batteria.

Va da se che se il server emoncms.org dovesse cambiare di ip occorrerà modificare il file dallas.lua e aggiornare la ESP-201.

 

Per sapere l'ip di un host si puoi usare ping :

ping www.emoncms.org

 

Se si ha a disposizione di una installazione locale di emoncms si puo semplicemente inserire l'IP del server dove localmente è installato emoncms :

Per esempio ( che è il mio caso ):
conn:connect(80,'192.168.1.240')

 

 

Infine nel file ds18b20.lua c'è il codice necessario al protocollo di comunicazione 1-wie usato dalla sonda di temperatura e non va modificato nulla.

 

Questi 3 file sono disponibili al download da questo indirizzo :

www.portalsole.it/archivio/ds1820.emoncms.zip

 

 

Programmare esp201 con LUA

 

Per uploadare sulla scheda esp-201 i 3 file descritti , ho usato una utility scritta in python ed istallata sul mio Raspberry.

L'Utility è disponibile a questo indirizzo :

https://github.com/4refr0nt/luatool/archive/master.zip

 

Scomprimerla e installarla sul raspberry ( io l'ho messa in /home/pi )

Quindi nella directory :

/home/pi/luatool-master/luatool si vanno ad inserire anche i 3 file che dobbiamo programmare ( attenzione che esiste già un file init.lua che se vogliamo preservare occorre rinominare in altro modo, per es. init.lua.orig )

 

Per programmare i 3 file usare lo stesso modo descritto sopra e usato per flashare la scheda avendo pero cura di sconnettere dalla massa il pin IO0 .

Si puo usare anche lo schema hardware completo, avendo cura di collegare il  Raspberry tramite i pin rx>tx>gnd e di togliere il ponticello JP1 che serve, se inerito, a programmare il firmware.

 

Lanciare infine in sequenza questi 3 comandi :

python luatool.py --port /dev/ttyAMA0 --src ds18b20.lua --dest ds18b20.lua

python luatool.py --port /dev/ttyAMA0 --src dallas.lua --dest dallas.lua

python luatool.py --port /dev/ttyAMA0 --src init.lua --dest init.lua

 

 

Lanciare minicom per vedere i dati che passano sulla seriale e le risposte della ESP-201 :

 

sudo minicom -b 9600 -o -D /dev/ttyAMA0

Dare il comando di restart :

node.restart()

se tutto è stato fatto correttamente e se la scheda esp-201 è connessa come nello schema HD proposto, si dovrebbe vedere la temperatura letta dalla sonda ds1820 e il valore verrà contestualmente inviato anche al server di emoncms.org.

 

Un test nel freezer..

Per testare la funzionalità del mio circuito e del software che ho predisposto , ho pensato di metterlo in una busta sigillata ed inserirlo nel freezer a quasi -20 di temperatura.

Lo scopo è quello di verificare la durata della batteria in condizioni ambientali estreme .. nonche di avvisarmi se per caso il freexzer dovesse per qualche ragione salire troppo di temperatura.. ;)

 

I dati registrati sono disponibili presso questo indirizzo :

http://emoncms.org/dashboard/view&id=29698

 

.. mentre a lato una foto della mia particolare installazione..

 

Per qualsiasi domanda su questo progetto si puo riferirsi al tread ufficiale preparato allo scopo  ;

oppure in lingua inglese qua :

http://openenergymonitor.org/emon/node/11880

 

 

 

Saluti,

Fabrizio.