Domotica: come costruire un sensore di temperatura smart con ESP8266 e BME280

In questo articolo ti mostrerò come puoi creare un semplice ma utilissimo sensore di temperatura smart alimentabile anche batterie, in grado di inviare la temperatura mediante protocollo MQTT e di sfruttare la modalità Deep Sleep del SOC ESP8266, che ti permetterà di sfruttare la massimo l’autonomia delle batterie. Aggiungilo al tuo impianto domotico!

Scopo del progetto

Il mondo dell’IoT si basa sul concetto per cui le “cose” prendono vita, fornendo dati comprensibili, al fine di esprimere in modo logico un comportamento. Le fondamenta di questa filosofia, di certo, sono i sensori: avere determinate informazioni, infatti, significa progettare e realizzare strumenti atti a prelevarle e tradurle in dati. L’efficenza di un sensore dipende maggiormente da due fattori: la precisione e l’autonomia.

Ti spiego come realizzare e programmare un sensore di temperatura smart che sia in grado di leggere la temperatura utilizzando il sensore Bosch BME280, e di inviarla utilizzando il protocollo MQTT, una connessione WiFi, alimentato mediante batteria LiPo e in grado di sfruttarne al massimo la capacità.

Hardware utilizzato

Software Utilizzato

Schema Elettrico

Lo schema seguente ti mostra come collegare il modulo GY-BME280 al modulo ESP8266 – ESP12 (nel mio caso un Wemos D1 Mini, ma va bene qualsiasi implementazione) e come predisporre il chip ESP12 alla modalità deep sleep.

Se sei interessato alle caratteristiche del chip, scarica qui il datasheet della Bosch

Schema di collegamento ESP12 - GY-BME280
Schema di collegamento ESP12 – GY-BME280

Il modulo BME280 permette l’uso con soli 4 pin, due per l’alimentazione (3.3V e GND), due per la connessione I2C. Comodissimo!

Per far si che il Chip ESP12 possa uscire dalla modalità deep sleep in automatico, i pin RST e D0 hanno bisogno di essere collegati. Lo Switch S1 permetterà di continuare ad utilizzare il Chip per la fase di programmazione, se collegati D0 e RST permanentemente, infatti, non sará possibile eseguire upload del firmware.

Deep Sleep e risparmio energetico

La modalità Deep Sleep permette al Chip di spegnere: la sezione radio WiFi, il System Clock e la CPU, mantenendo peró attivo l’RTC. In deep sleep, l’assorbimento del Chip calerà drasticamente, raggiungendo picchi di appena 20 uA. Il nostro sensore di temperatura smart acquisirà una autonomia

L’uscita dalla modalitá Deep Sleep, comunemente definita wake up, consiste nel reset del Chip (collegamento del pin RST a GND) e puó avvenire in automatico (a tempo, usando lo stesso pin D0), oppure attraverso un trigger esterno. In questo articolo vedremo come mandare il Chip in deep sleep, eseguendo il wake up sistematicamente ad intervalli regolari.

Wemos D1 connessione per Deep Sleep
Collegando il pin D0 al pin RST, ESP12 puó effettuare il wake up automatico

Come programmare il sensore di temperatura smart

La IDE di sviluppo che uso Visual Studio Code (lo puoi scaricare gratuitamente da questo link), in abbinamento a Platform.IO (ugualmente gratuito, scaricabile da questo link) diventa uno strumento fantastico per chi decide di progettare e programmare SOC.

Puoi scaricare il codice sorgente direttamente dal nostro repository GitHub:

Scarica il codice sorgente

Analizziamo il codice ed evidenziamo le parti fondamentali, partendo dal file di configurazione platformio.ini:

configurazione mediante platformio.ini

Una volta definite le porte per upload e monitor, é fondamentale definire le libreiue da cui dipende il progetto. Nel nostro caso sará neceasrio includere:

  • WiFiManager – per la gestione della connessione alla rete WiFi – link a GitHub
  • PubSubClient – per l’uso del protocollo MQTT – link a GitHub
  • Adafruit Unified Sensor – come libreria standard per i sensori Adafruit
  • Adafruit BME280 – per la gestione del sensore – link a GitHub

Impostare la connessione al WiFi

La prima cosa che il nostro sensore dovrá fare sará quella di collegarsi ad una WiFi nota. Per la connessione, sfruttando la libreria WiFiManager, impostiamo il nome del SSID e la chiave di accesso:

Impostare la connessione al WiFi
Codice di gestione della connessione WiFi mediante WiFiManager

Provando questa porzione di codice, il nostro dispositivo é giá in grado di collegarsi alla rete WiFi. Prossimi step: lettura temperatura e uso del servizio di MQTT.

Leggere la temperatura (e le altre informazioni) dal sensore BME280 usando la libreria Adafruit

Per permettere al nostro SOC di accedere ai dati del sensore BME280, sará necessario impostare la libreria Adafruit. La lettura dei dati (in questo caso la temperatura) avverrá utilizzando l’istanza dell’oggetto creato a partire dalla libreria:

Leggere la temperatura (e le altre informazioni) dal sensore BME280 usando la libreria Adafruit
Uso della libreria Adafruit BME280

Ultimo step, una volta collegati al WiFi e dopo aver collezionato le informazioni dal sensore, dobbiamo confezionare un pacchetto ed inviarlo sotto un determinato topic ad broker MQTT il cui IP sará giá noto (io sto usando una installazione di MosquittoMQTT su raspbian). Commentate qui sotto se volete avere una guida all’installazione.

Collegarsi ed inviare le informazioni al broker MQTT

Nel codice avremo bisogno di specificare l’IP del broker e, mediante la libreria pubsubclient, spedire il pacchetto dati ad un determinato topic.

Collegarsi ed inviare le informazioni al broker MQTT
Uso della libreria PubSubClient

ESP8266 e Deep Sleep: aumentiamo l’autonomia del sensore di temperatura smart

Una delle peculiaritá dei dispositivi smart, soprattutto quelli wireless (quindi con una propria fonte di alimentazione), é sicuramente l’autonomia. Per permettere al nostro sensore smart di essere alimentato mediante una batteria LiPo da una cella (3.7V) preferisco abbinare al modulo Wemos D1 la sua shield:

Schema di collegamento del battery shield wemos

Il vantaggio di usare lo shield Wemos é quello di avere il form factor del D1, con le cartteristiche di un modulo per la carica e l’uso di una LiPo. Il collegamento é molto semplice. Il Wemod D1 viene alimentato dai PIN laterali. La porta micro USB consente la ricarica della batteria LiPo, che verrá collegata al connettore appostio. I LED rosso e verde permetto la visualizzazione dello stato di carica della LiPo.

Come programmiamo l’ESP8266 per entrare in sleep mode ?

La parte di codice interessata sono praticamente queste due righe:

Come far entrare l’ ESP8266 in deep sleep mode

ESP é l’oggetto di gestione del SOC del framework, il metodo deepSleep() accetta come parametro il valore in microsecondi della durata dello sleep time, in questo caso 30 secondi (30 elevato alla 6). Il SOC, all’invocazione di questo metodo, passerá in deep sleep chiudendo WiFi, CPU e system clock. Passati 30 secondi da questo momento, il pin D0 verrá portato a livello basso e, collegato al pin RST, produrrá il reset del SOC.

Considerazioni finali

Come potrete aver notato, tutto il codice é stato implementato nella metodo setup(); se conoscete il framework Arduino, sicuramente vi starete chiedendo come mai il metodo loop() non viene mai usato. La ragione é molto banale ed e’ legata al ciclo operativo del sensore smart e al deep-sleep. All’avvio del modulo Wemos D1, il nostro codice svolgerá le funzioni principali, ovvero: si collega al WiFi, apre la connessione con il broker MQTT, colleziona il dato di temperatura interrogando il sensore BME280, invia il pacchetto al topic prescelto e va in deep-sleep mode per 30 secondi, dopodiché si auto-resetterá. Con il reset questo ciclo verrá ripetuto tante volte quanto la batteria consentirá.

I 30 secondi di deep-sleep sono pochi nel contesto reale. Per un sensore smart un aggiornamento anche di 2 minuti é piú che sufficiente per un uso generico (controllare la temperatura in un ambiente). Ma si puó decidere di modificare il comportamento e la cadenza delle letture agendo anche al contrario, quindi diminuendo il tempo di deep-sleep.

Aiutate VIxR.it!

Il nostro blog nasce dalla voglia di condividere in una chiave molto pragmatica, concetti su elettronica, programmazione e domotica. Ovviamente non intendiamo trarne ricavi oltre quelli necessari a coprire i costi di mantenimento della piattaforma. Se volete aiutarci, utilizzate i link di Amazon presenti negli articoli! Sará un piacere continuare a scrivere per voi.

Commentante qui sotto se avete domande o suggerimenti.

Alla prossima!

Link utili

Installa ed usa Mosquitto MQTT – https://vixr.it/installiamo-mosquitto-mqtt-broker-e-usiamolo-per-la-domotica-iot/

 

2 risposte

  1. Enrico ha detto:

    Ciao. Molto interessante questo progetto.
    Qual’è l’autonomia del sensore alimentato a battere?

  2. Fabrizio ha detto:

    Ciao, ma così collegato il sensore non è alimentato perennemente dalla batteria?
    O in deep sleep mode questa alimentazione è interrotta?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.