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
- 1 x Wemos D1 Mini (ESP8266) – https://amzn.to/34KSnnl
- 1 x Sensore GY-BME 280 – https://amzn.to/2Ldy5Lx
- 1 x Battery Shield per Wemos D1 mini – https://amzn.to/37Zvleo
- 1 x Microswitch – https://amzn.to/33NiCrQ
- 1 x Batteria Lipo 1 Cella 3.7 V – https://amzn.to/2rNC0rw
- Cavetti per prototipi – https://amzn.to/33PIELn
- Saldatore per stagno – https://amzn.to/35WBLJn
- Stagno 0.5mm – https://amzn.to/2LisyU0
Software Utilizzato
- Microsoft Visual Studio Code – https://bit.ly/2RfplbB
- PlatformIO – https://bit.ly/2sGXbfn
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
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.
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:
Analizziamo il codice ed evidenziamo le parti fondamentali, partendo dal file di configurazione 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:
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:
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.
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:
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:
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/
Ciao, mi chiamo Alessandro Lanni. Sono un professionista nel settore IT, ho iniziato la carriera da sviluppatore nel 2002. Mi appassiona l’elettronica amo condividere il know-how: “Cercare risposte e’ meglio che fare domande”
2 risposte
Ciao. Molto interessante questo progetto.
Qual’è l’autonomia del sensore alimentato a battere?
Ciao, ma così collegato il sensore non è alimentato perennemente dalla batteria?
O in deep sleep mode questa alimentazione è interrotta?