![](https://it.emcelettronica.com/wp-content/uploads/2019/01/stazione-meteo-680x340.jpg)
L'ESP32 è una piattaforma di sviluppo versatile e molto conveniente. Essa è adatta a tutti i tipi di progetti di automazione domestica. Qui presentiamo un'applicazione specifica per una stazione meteorologica costruita con l'ESP32. I dati elaborati sono resi disponibili online.
Introduzione
Le caratteristiche della stazione meteorologica proposta sono di tutto rispetto:
- misura la temperatura, la direzione del vento e la sua velocità, l'umidità, la pressione dell'aria e le precipitazioni;
- è possibile implementare un sensore opzionale per particelle fini;
- presenza di porte aggiuntive per altri dispositivi;
- supporta Thingspeak e senseBox;
- può essere configurata su una pagine Web interna dell'ESP32;
- funziona con un pannello solare, una batteria da 12 V o un adattatore da 8-28 VCC.
La stazione meteorologica con ESP32 rileva e misura i tradizionali parametri meteorologici: la temperatura, la direzione del vento e relativa velocità, l'umidità, la pressione dell'aria e le precipitazioni. Con un sensore adatto, come il Nova Fitness SDS-011 [1] (PM2,5, risoluzione 0,3 ug/m3), può anche misurare la concentrazione di particelle fini. Il sensore Bosch FME280 [2] è usato per misurare la temperatura, l'umidità e la pressione dell'aria. Per la velocità del vento, la direzione e le precipitazioni si usa un kit per stazione meteo. L'ESP32 effettua le misurazioni e carica i dati elaborati su Thingspeak [3] o senseBox [4]. Thingspeak è un database online gestito da Mathworks, dove si possono caricare i dati e visualizzare grafici. I dati possono anche essere elaborati con Matlab. SenseBox agisce, invece, come una sorta di mappa temporale open-source. Gli utenti che hanno un kit senseBox o compatibile senseBox possono caricare i propri dati e renderli disponibili a tutti.
L'Hardware
La stazione meteorologica si basa sull'ESP32 Pico Kit V4 (vedi schema di figura 1), che gestisce tutti i compiti necessari. Per permettere la connessione del sensore e il montaggio si utilizza un involucro impermeabile (Fibox PC 100/60 HT). I sensori di vento e di pioggia sono collegati alla scheda tramite dei connettori RJ45, mentre il sensori BME280 e SDS011 sono collegati attraverso i connettori JST XH. Il sensore BME280 utilizza il bus I2C mentre l'SDS011 utilizza una porta UART. Sono state implementate anche due porte aggiuntive sulla scheda per consentire l'utilizzo di eventuali sensori supplementari. La prima porta aggiuntiva è un connettore I2C Grove per i moduli Grove [5, 6]. La seconda è una porta FTDI che alimenta una connessione UART. Il circuito può essere alimentato a 12 V con una batteria al piombo. Se si volesse utilizzare un pannello solare da 12 V per caricare la batteria, c'è una utile funzione integrata: l'ESP32 può chiudere un relè quando la batteria è scarica e aprilo quando la batteria è di nuovo completamente carica. L'ESP32 utilizza un partitore di tensione con valori delle resistenze pari a 470 kohm e a 100 kohm, per poter misurare la tensione della batteria e adattare i punti iniziali e finali per la sua ricarica.
Il LED3 indica lo stato di carica della batteria. Si utilizza un semplice FET (T1) come buffer per pilotare il relè. Il diodo D3 agisce come un soppressore e annulla i picchi di tensione della bobina del relè e protegge T1 contro il danneggiamento. Il resistore R10 limita la corrente di base, mentre R7 limita la corrente attraverso LED3, così come i resistori R8 e R9 per LED2 e LED1. Il convertitore DC/DC (IC1) abbassa la tensione di alimentazione a 5 V. Esso è molto più efficiente di un regolatore di tensione 7805 standard, quindi è la scelta migliore per circuiti a batteria. Sulla scheda ESP32, la tensione di alimentazione di 5 V viene convertita a 3,3 V grazie a un regolatore di tensione 1117. Il diodo D4 protegge l'ESP32 da qualsiasi sovratensione della batteria (tramite divisione della tensione con R11/R12), mentre il condensatore C4 sopprime il rumore stabilizzando la tensione della batteria. I resistori da R4 a R6 sono resistenze di pull-up, necessarie per il corretto funzionamento delle relative linee di segnale.
Sensori di pioggia e vento
Il sensore di pioggia è composto da un piccolo vassoio che si riempie di acqua piovana. Quando è pieno,
si inclina e chiude un interruttore monitorato da ESP32. Secondo la scheda tecnica, ogni versamento del vassoio corrisponde a 0,33 mm di precipitazione. Il sensore del vento è costituito da una banderuola e da un anemometro per misurarne la velocità. La resistenza interna della banderuola cambia a seconda della direzione del vento. La figura 2 mostra il layout della bussola per le varie direzioni. Si è affiancato un resistore da 10 kΩ (R2) con la resistenza variabile dal vento per costituire un divisore di tensione. La tensione cambia quando la banderuola del vento modifica la sua direzione e ciò può essere misurato dall'ESP32. L'anemometro ha un interruttore a lamella e genera due impulsi per ogni rotazione. Secondo la scheda tecnica, la velocità del vento, in m/s, è uguale alla frequenza degli impulsi (in Hz) moltiplicato 0.33. La frequenza di rotazione è calcolata moltiplicando l'intervallo di tempo tra due impulsi (in secondi) per 2 (due pale per rotazione), quindi la frequenza di rotazione può essere calcolata con l'inverso di tale intervallo di tempo. Se si moltiplica il valore per 0.66, si ottiene la velocità del vento, espressa in metri al secondo. La velocità del vento in km/h può essere calcolata moltiplicando la velocità in m/s per 3.6. In poche parole, 1 rps corrisponde a una velocità del vento di 2,4 km/h.
Caricamento del software
Per caricare il software sull'ESP32, si deve prima installare l'ESP32 core di Arduino [7]. Quindi si deve installare il tool per il download SPIFFS al fine di scaricare una pagina Web sul file system di ESP32 [8]. Una volta che tutto è stato installato correttamente, è possibile selezionare ESP32 Pico Kit nel menù "schede" e scaricare la pagina Web e lo sketch.
Componenti elettronici
L'elenco sotto proposto mostra i componenti elettronici utilizzati. La figura 3 propone la silkscreen del circuito, mentre la figura 4 mostra il circuito montato.
- Resistenze
- R1-R4 = 10 kohm
- R5, R6 = 4.7 kohm
- R7-R9 = 220 ohm
- R10 = 1 kohm
- R11 = 470 kohm
- R12 = 100 kohm
- Condensatori
- C1 = 10 uF, 50V
- C2 = 1 uF, 10V
- C3, C4 = 100 nF
- Semiconduttori
- D1-D3 = 1N4007
- D4 = BAT85
- IC1 = Convertitore DC/DC 5V, 5W, R-78E5.0-1.0
- LED1, LED2 = giallo 3 mm
- LED3 = rosso 3 mm
- T1 = BS170
- Varie
- K1, K2 = connettori a pila 17 pin, passo 0,1"
- K3 = connettore a 4 pin, passo 0,1"
- K4 = connettore a 4 pin, passo 0,1"
- K5 = connettore a 6 pin, passo 0,1"
- K6, K7 = jack TJ11
- K8 = connettore verticale
- K9 = connettore a 7 pin, passo 0,1"
- RE1 = relé ALDP105
- S1 = pulsante 6 mm
- BME280 sensore precipitazioni e vento I2C
- Opzionale = sensore di particelle fini
Il software
Come accennato in precedenza, la stazione meteorologica è controllata dall'ESP32. È possibile configurarla su una pagina Web ospitata direttamente dall'ESP32. All'avvio, il dispositivo tenta di connettersi alla rete configurata. Se esso non ci riesce, ESP32 avvia il server Web che ospita la pagina di configurazione. Il server Web può anche essere avviato manualmente premendo il pulsante sulla scheda mentre si accende l'alimentazione o premendo il pulsante EN sul modulo ESP32. Se l'utente non ha eseguito alcuna operazione sulla pagina di configurazione per dieci minuti, ESP32 si riavvia e si connette alla rete configurata. Nella pagina di configurazione è possibile visualizzare le misurazioni correnti e la tensione della batteria. E', inoltre, possibile configurare le impostazioni di rete e quelle di caricamento. Le impostazioni di rete includono l'SSID (nome della rete), che può essere selezionato da un elenco, e la password. Le impostazioni di caricamento includono i tasti API richiesti per Thingspeak e senseBox, nonché l'intervallo di caricamento. Per ottenere l'accesso alla pagina Web, è necessario connettersi alla rete ESP32 fornita. Quindi si può aprire la pagina Web all'indirizzo IP 192.168.4.1. Si tenga presente che con gli smartphone (ad esempio Android) occorre disabilitare temporaneamente la connessione dati, perché essi commutano automaticamente su tale possibilità se non rilevano una connessione Internet valida tramite WiFi. In tal caso la pagina di configurazione non sarà disponibile. La pagina web è composta da un singolo file HTML, che a sua volta consiste di tre sezioni. Lo "style", in alto, definisce l'aspetto della pagina, il "body" contiene la struttura e il contenuto della pagina e lo "script" definisce la funzionalità della pagina. Perché la pagina web funzioni correttamente, il javascript nel browser web deve essere abilitato. La comunicazione tra la pagina Web e l'ESP32 viene eseguita tramite una "XMLHttpRequest asincrona" nella pagina stessa. Quando essa viene caricata, è generata una richiesta HTTP e inviata all'ESP32. Quest'ultimo riceve tale richiesta e invia una risposta alla pagina con le impostazioni o i valori richiesti. Ad esempio, quando si preme il pulsante "Invia" sulla pagina web, viene inviata una richiesta con i valori inseriti.
Ultimi dettagli
Per caricare i dati, è necessario che l'ESP32 possa accedere alla rete domestica (o altre reti). Per impostare i sensori, si deve anche tenere conto di alcuni requisiti specifici. Ad esempio, non è una buona scelta l'installazione dei sensori di precipitazioni vicino a un muro. Per tali operazioni è sufficiente il proprio buon senso.
senseBox
Un kit senseBox rende semplice la configurazione della propria stazione di sensori. Il parametri misurati possono essere caricati su opensensemap.org, dove le misure provenienti da svariati senseBox o altri dispositivi compatibili possono essere consultati. Per registrare i dati della propria stazione meteo, si deve prima creare un account su opensensemap.org e poi si può aggiungere un senseBox. E' possibile scegliere il tipo senseBox desiderato all'atto della creazione dell'account, oppure configurare la stazione inserendo i parametri misurati, le unità di misura e i tipi di sensore (vedi figura 5). Occorre creare manualmente un account per la Stazione meteorologica EPS32. Dopo essersi registrati, si riceveranno un ID per la stazione e un ID per ciascun sensore. Quindi si devono inserire tali identificativi nella pagina di configurazione della stazione meteo EPS32. Poi è possibile caricare i dati rilevati.
![Figura 5: sul sito opensensemap.org si possono gestire i sensori per la propria stazione meteorologica](https://it.emcelettronica.com/wp-content/uploads/2019/01/sensebox.jpg)
Figura 5: sul sito opensensemap.org si possono gestire i sensori per la propria stazione meteorologica
Thingspeak
Thingspeak è un database online gratuito di Mathworks in cui è possibile caricare i dati. Per il suo utilizzo è necessario creare un canale e un campo associato per ciascun parametro misurato (vedi figura 6). Dopo aver creato il canale, si riceverà una chiave API di scrittura che deve essere inserita nella pagina di configurazione della stazione meteorologica. In figura 7 è possibile osservare alcune fasi della messa a punto della stazione.
![Figura 6: per l'uso di Thingspeak si deve creare un nuovo canale per l'applicazione e inserire i tipi di dati nelle caselle corrispondenti. Quindi si riceverà una chiave API da utilizzare nel software dell'applicazione](https://it.emcelettronica.com/wp-content/uploads/2019/01/thingspeak.jpg)
Figura 6: per l'uso di Thingspeak si deve creare un nuovo canale per l'applicazione e inserire i tipi di dati nelle caselle corrispondenti. Quindi si riceverà una chiave API da utilizzare nel software dell'applicazione
>>>Leggi anche: Una stazione meteo con la Flip&Click per l’analisi e la previsione
Web Links
[1] Inovafitness: www.inovafitness.com/en/a/chanpinzhongxin/95.html
[2] BME280 (Mouser): www.elektor.com/bme280-mouser-intel-i2c-version-160109-91
[3] Thingspeak: https://thingspeak.com
[4] Sensebox: https://sensebox.de/en
[5] Seeedstudio products at Elektor: www.elektor.com/seeedstudio
[6] Seeedstudio Grove: www.seeedstudio.com/s/grove.html
[7] Github for Arduino-Esp32: https://github.com/espressif/arduino-esp32
[8] Github for Arduino Esp32fs plugin: https://github.com/me-no-dev/arduino-esp32fs-plugin
![Scarica subito una copia gratis](https://it.emcelettronica.com/wp-content/uploads/2020/03/banner-firmware2.0-blog.png)
Con poche modifiche, la stazione si può implementare anche con ESPertino, essendo il processore uguale. Davvero un bel progetto.
Ottima applicazione per il versatile modulo ESP32. Thingspeak è un’ottima piattaforma cloud per l’IoT, nel corso Embedded di EOS Academy ho dedicato una lezione all’utilizzo di Thingspeak con dati acquisiti da sensori e ESPertino.
Buon pomeriggio,
chiedo scusa , io ne sto realizzando una con i moduli Sharp (Dust sensor), e BME280 di Seed studio e SGP30 sempre di SEED studio.
Ho utilizzato un ATmega2560 e sono riuscito a ricavare tutti i dati e comunicare via I2C con i 2 sensori ( Quello sharp ha un rilevamento analogico ).
Se collego la scheda Espertino , non mi comunica via I2C , purtroppo non ho istallato le librerie, Espertino perche’ non ho capito cosa vuol dire quel passaggio di dare un comando Pyton da una cartella di file….io non ho nemmeno Pyton installato.
Il motivo sara’ quello ….oppure non e’ compatibile ESP32 con le schede di SEED studio ?
Ad esempio, anche con ATmega2560, una scheda , mi sembra SGP30, non funziona con la libreria proposta da SEED , non comunica……invece funziona con la libreria di Adafruit.
In pratica questi sensori ….non dovrebbero avere un indirizzo univoco fornito dal produttore ed essere compatibili come comunicazione I2C con tutte le librerie ?
Grazie
Chiedo ancora scusa,
adesso ho provato ad ordinare i moduli ESP32 ESP32-DEVKITC-32D.
Costano poco e ho trovato un tutorial che spiega l’interfacciamento con BME280……pero’ modulo Adafruit…..se ne trovano di simili.
Purtroppo per SGP30 ( TVOC ) non si trova niente con ESP32.
Buon pomeriggio,
ho risolto il problema ….purtroppo devo dire che con la scheda Espertino non mi funziona l’interfacciamento ai moduli Seed : BME280 e SGP30 ( Comunicano in I2C)
e le librerie Seed e Adafruit.
Ho risolto il tutto utilizzando il modulo esp32 devkitc v4.
Credo che sia un problema dovuto al fatto che non ho installato le librerie per Espertino ….utilizzavo la configurazione del modulo generico ESP32 dev module.
Adesso devo trasmettere tutti i dati rilevati via Bluetooth ad una centralina con LCD grafico a colori da 4,3″, utilizzando l’Esp32 configurato come Server.
Qualcuno conosce qualche modellodi LCD da 4,3″ o 5 , utilizzabile con interfaccia SPI o I2c e relativa libreria ? Altrimenti mi tocca usare un ATmega2560 per pilotare in modalita’ parallela l’LCD e ricevere poi via seriale i dati dell’Esp32 configurato come Client.
Saluti
Salve Maurizio
Andrebbe bene un NEXTION NX4827T043 è un display TouchScreen da 4.3″ 480×272 pixel e a 64K 65536 colori retroilluminato con interfacciamento seriale.
Il produttore sul sito fornisce anche gratuitamente software per la programmazione della grafica, ovvero pulsanti icone, immagini grafiche: https://nextion.tech/nextion-editor/#_section1
Link del datasheet : https://nextion.tech/datasheets/nx4827t043/
Link per l’acquisto su AMAZON : https://www.amazon.it/dp/B07FD94BQW
Saluti.
Grazie mille,
buona giornata
Complimenti , è un bel progetto.
E’ possibile avere i sorgenti per realizzare questa stazione meteo?
grazie
Salve Paolo, puoi cercare tra i file nella sezione “web links”.
Grazie.