I
programmi presenti su questa pagina usano tutti dei
sensori con lo stesso scopo, sebbene con caratteristiche
leggermente diverse: la creazione di una stazione
meteorologica e/o il monitoraggio della qualità dell'aria. |
BMP/BME380 |
La trasposizione dei programmi con protocollo I2C per ESP01 a ESP8266 (ESP12E) |
In questa pagina troveremo una serie di programmi scritti per ESP01, che montando lo stesso processore di ESP8266, sono perfettamente compatibili. Sono forzatamente programmi semplici, perchè ESP01 ha solo due porte che possiamo sfruttare, ovvero GPIO0 e GPIO2, come si può vedere il questo programma: |
In questa porzione di programma si vede la dichiarazione delle porte usate per i relè, ovvero GPIO0 per RELAY1 e GPIO2 per RELAY2. Queste porte funzionano perfettamente anche su ESP8266, quindi non è necessario cambiare nulla nel programma, anche se potremmo sempre scegliere altre porte disponibili. |
Purtroppo non sempre tutto è così semplice. ESP01 supporta anche il protocollo I2C, e questo è molto utile, perchè permette di collegare più periferiche che usano questo stesso protocollo sulle medesime porte, per esempio un BMP280 e un display SSD1306. SDA (data) su ESP01 corrisponde a GPIO0, mentre SCL (clock) corrisponde a GPIO2, e come si vede nell'immagine a destra si vedono le due istruzioni necessarie per configurare correttamente una periferica, forzando l'uso delle due porte necessarie. |
Ma su ESP8266 le porte corrispondenti per il protocollo I2C sono diverse: GPIO5 per SCL e GPIO4 per SDA, che abitualmente sono già configurate nella libreria Adafruit_BMP280.h. Per cui il programma, per funzionare su ESP8266 usa la seguente sintassi: Come si nota, non è necessario dichiarare le porte in Wire.begin() e manca l'istruzione Wire.pins() |
|
Una stazione meteorologica con BMP280 |
BMP280
è un piccolo modulo, molto economico ma interessante,
infattiè in grado di rilevare la temperatura e la
pressione atmosferica, oltre che calcolare (anche se in
modo abbastanza impreciso) l'altezza sul livello del mare. I programmi sono abbastanza semplici, grazie alche alle librerie che s occupano della maggior parte dei calcoli. |
|
Il primo programma: una stazione
meteorologica con pagina web |
Il sensore BMP280 è un sensore che si connette al protocollo I2C, quindi anche con il piccolo ESP8266 può essere abbinato ad altri moduli che usino lo stesso protocollo e abbiano un indirizzo interno diverso, non ultimo un display OLED, per leggere direttamente le informazioni fornite. In particolare, BMP280 registra la temperatura, la pressione atmosferica e fa un calcolo (approssimativo) dell'altezza sul livello del mare. |
Il
sensore BMP280 va collegato all'alimentazione a 3,3v. Mentre "SCL" sarà collegata a GPIO5 (clock) e "SDA" si connetterà a GPIO4 (data). Mentre gli ultimi pin non saranno usati in questo progetto. |
La basetta sperimentale con il sensore BMP280 in scala 1:1. BMP280 è connesso allo zoccoloI2C2, adatto al protocollo I2C. |
Il
programma |
Il
primo progetto che presentiamo, avvia un web server e
mostra su di un qualsiasi browser di un PC, smartphone o
tablet, la temperatura, la pressione e l'altezza
approssimativa (slm) della propria località. Come prima cosa, è necessario verificare se si sono installate tutte le librerie necessarie. Verificando o lanciando la compilazione del programma, verranno visualizzate quelle eventualmente mancanti. In questo caso, provare prima di tutto a scaricarle attraverso la Ide di Arduino. Nel caso non si trovassero tutte, scaricarle dalla finestra che appare sulla destra. Nel caso di dubbio, controllare la pagina relativa alla gestione delle librerie |
Adafruit_BusIO.h Adafruit_sensor.h Adafruit_BMP280.h |
Di seguito, inserire la SSID (il nome esatto) della propria rete WiFi e la password di rete. |
L'altitudine
è un parametro calcolato in base alla pressione
atmosferica attuale presente a livello del mare, che varia
costantemente. Spesso è necessario variare questo
paramentro, affinchè l'altitudine mostrata sia compatibile
con quella del luogo in cui si è. |
Dopo aver caricato il programma, aprire il molitor seriale, attendere la connessione e prendere nota dell'indirizzo IP. |
Inserire
il modulo BMP280 sul connettore I2C2 facendo attenzione
alla polarità. Alimentare la basetta e dopo qualche
secondo, dopo che il modulo si sarà collegato alla rete
WiFi, aprire il browser inserendo il codice IP di cui si è
preso nota. E finalmente si aprirà la finestra con le informazioni, che verranno aggiornate con una certa frequenza. Nel caso il sistema venga alimentato a batteria, inserire un ritardo nell'aggiornamento, in modo da consumare meno corrente. Clicca qui per visualizzare il programma Clicca qui per scaricarlo in formato ".zip" |
|
Il secondo programma: una stazione meteorologica con pagina web a colori |
Questo secondo progetto è praticamente identico al precedente. L'unica piccola - ma simpatica - variazione è l'inserimento di tre iconcine relative alla temperatura, la pressione e l'altitudine calcolata. Tutte le informazioni date per il primo programma sono valide anche per questo, quindi la loro duplicazione sarebbero del tutto inutili. Ecco quindi l'immagine del secondo programma: Clicca qui per visualizzare il programma Clicca qui per scaricarlo in formato ".zip" |
|
Il terzo programma: una stazione meteorologicacon dispaly Oled |
Questo terzo programma è ancora un'evoluzione dei precedenti: infatti ho inserito nel progetto una routine per gestire un display OLED SSD1306 128x64 dot, che mostra i dati di temperatura, pressione e altezza approssimativa direttamente sullo schermo. In questo modo è possibile fruire delle informazioni anche in locale e in modo immediato, senza dover aprire un browser. Per tutte le informazioni sul programma, vedi le istruzioni relative al primo programma per BMP280. |
Il display OLED
|
Sia
BMP280 che il display SSD1306 usano il protocollo I2C,
perciò si possono collegare sulle stesse porte, sempre che
abbiano un indirizzo interno diverso. Entrambi sono alimentati a +3,3v. |
La basetta sperimentale in formato 1:1 BMP280 è posto su I2C2, mentre il display Oled si colloca su I2C3. |
Per poter gestire il display OLED, sono necessarie due ulteriori librerie: Adafruit_GFX.h Adafruit_SSD1306.h Naturalmente i dati possono sempre essere visualizzati anche sul proprio browser. Clicca qui per visualizzare il programma Clicca qui per scaricarlo in formato ".zip" |
Ho
trovato il video di questo progetto al seguente
link(esterno a etichaldiy):
https://www.youtube.com/watch?v=w7q7StBe2YE |
|
Una stazione meteorologica con BME280 |
Il
sensore BME280 si connette al protocollo I2C, quindi
anche con il piccolo ESP8266 può essere abbinato ad altri
moduli che usino lo stesso protocollo e abbiano un indirizzo
interno diverso, non ultimo un display OLED, per leggere
direttamente le informazioni fornite. E' molto facile confondere un BME280 con un BMP280. Essi sono molto simili, e spesso le sigle traggono in inganno. Quindi è necessario verificare con attenzione le caratteristiche, prima di acquistare. Ricordo in breve le caratteristiche dei due sensori: |
BME280: - temperatura - pressione - umidità |
BMP280: -temperatura -pressione - calcolo (apprssimativo) dell'altitudine |
Il sensore BME280 va collegato all'alimentazione a 3,3v. Mentre "SCL" sarà collegata a GPIO5 (clock) e "SDA" si connetterà a GPIO4 (data). Il display Oled, anch'esso sotto protocollo I2C, utilizza le stesse porte. Mentre gli ultimi pin non saranno usati in questo progetto. |
La basetta sperimentale con il sensore BME280 in scala 1:1. BMP280 è connesso allo zoccoloI2C2, adatto al protocollo I2C, e
il display Oled sullo zoccolo I2C3
|
Le
librerie necessarie: Wire.h viene utilizzata per il protocollo I2C; BME280I2C.h serve per la gestione del sensore BME280; U8g2lib.h permette la gestione del display Oled. |
BME280I2C.h Wire.h U8g2lib.h |
La
configurazione relativa al display Oled. Come si vede, usa la porta GPIO5 per clock (SDL) e GPIO4 per data (SDA). |
Le
variabili temp, hum, pres, restituiscono i valori di
temperatura, umidità e pressione. Però non possono essere
passati direttamente ai comandi per il display. In questa
routine dtosstrf converte un valore a virgola
mobile in stringa, che finalmente può essere stampata
sul display Oled. |
|
La basetta sperimentale in formato 1:1. In basso, all'estrema sinistra, il display oled; alla sua destra il sensore BME280. |
Clicca
qui per visualizzare il programma Clicca qui per scaricare il programma in formato ".zip" |
|
Una stazione meteorologica con BME680 |
BME680
è molto simile al BMP280, però rispetto a quest'ultimo
gestisce un parametro in più, fornendo le informazioni
tipici di una vecchia stazione meteorologica: ovvero
temperatura, umidità e pressione. Anche questo sensore è
molto piccolo ed economico. |
Il
sensore BME680 utilizza il protocollo I2C, per cui SCL
andrà collegato sulla porta GPIO5 (clock) e SDA si
collegherà a GPIO4 (data). |
La basetta sperimentale nel formato reale. Il sensore BMP680 è inserito sullo zoccolo I2C2 |
Lo sketch e la configurazione |
Come
prima cosa, è necessario verificare se si sono
installate tutte le librerie necessarie.
Verificando o lanciando la compilazione del
programma, verranno visualizzate quelle
eventualmente mancanti. In questo caso, provare
prima di tutto a scaricarle attraverso la Ide di
Arduino (sketch/include
library/manage library). Nel caso non si trovassero tutte, scaricarle dalla finestra che appare sulla destra. Nel caso di dubbio, controllare la pagina relativa alla gestione delle librerie. |
Wire.h Adafruit_Sensor.h Adafruit_BME680.h ESPAsyncWebServer.h |
Questo programma è abbastanza semplice nella sua implementazione. Come sempre quando ci si deve collegare alla rete WiFi, e quello di inserire il nome e la password di rete. |
Dopo aver caricato il programma su ESP8266, aprire il monitor seriale e prendere nota dell'indirizzo IP che il router gli avrà attribuito e prenderne nota. Es.: 192.168.1.51, come si vede nel riquadro bordato di roisso. Dopo qualche secondo, anche sul monitor seriale appaiono i dati rilevati dal sensore |
Inserire nel campo di ricerca del proprio brower (Chrome, Firebird, ecc.) l'indirizzo Ip di cui si è preso nota. Ecco come si presenta la visualizzazione dei dati rilevati dal sensore BMP680. Nel caso si visualizzassero da cellulare, i dati invece di essere due per colonna, saranno visualizzati in verticale , su di una singola colonna. Clicca qui per visualizzare il programma Clicca qui per scaricare il programma in formato ".zip" |
Si
possono trovare informazioni dettagliate su questo
progetto alla seguente pagina del sito
"randomnerdtutorials": https://randomnerdtutorials.com/esp8266-nodemcu-bme680-web-server-arduino/
Ringrazio come sempre randomnerdtutorials per la qualità e la cura dei progetti presentati. N.b.: il link sopra elencato conduce a una pagina esterna al nostro sito. |
|
Monitoraggio della qualità dell'aria con SGP30 |
Questo
programma, basato principalmente su di un minuscolo ma
interessantissimo SGP30,
oltre che un familiare DHT11 e un display Oled, fornisce
una notevole gamma di informazioni sulla qualità dell'aria:
non solo temperatura e umidità, ma anche le percentuali di
Anidride carbonica (CO2), di idrogeno (H2), di etanolo
(EtOH) e Composti organici volatili totali (TVOC). |
SGP30 |
Lo
schema elettrico del nostro progetto: SGP30 e il dispaly
SSD1306 utilizzano il protocollo I2C, e quindi sono
collegati sulle stesse porte dati, GPIO4 (data) e GPIO5
(clock). DHP11 invece si collega su GPIO0. Tutte le periferiche sono alimentate a +3,3v. |
La basetta sperimentale in formato reale. Il sensore di temperatura e umidità è posto su DG1; SPG30 (qualità dell'aria) è collegato a I2C2; Il display Oled SSD1306 è inserito su I2C3. |
Il
programma |
Come
sempre, è necessario di avere tutte le librerie necessarie;
inn casonegativo verificare se è possibile scaricarle con la
IDE di Arduino (sketch/#include libreria/gestione librerie),
oppure cercarle su internet; o scaricarle dalla finestra di
destra. |
Wire.h Adafruit_SGP30.h DHT.h Adafruit_GFX.h Adafruit_SSD1306.h |
IL
programma non presenta particolari difficoltà: vengono
inizializzate la varie periferiche e ogni secondo vengono
interrogati i due sensori (DHT11 e SGP30). Sia sul monitor
seriale che sul display SSD1306 vengono stampate le
misurazioni, ovvero: - la temperatura; - l'umidità; - la concentrazione di CO2 (anidrede carbonica); - la concentrazione di H2 (idrogeno); - la concentrazione di EtHO (etanolo) - la concentrazione di TVOC (composti organici volatili totali). |
|
Una stazione meteorologica con OpenWeatherMap |
Questo
progetto è diverso dal solito, perché prende le
informazioni direttamente da Internet, ma molto
interessante, perché su di un dispaly OLED SSD1306 128 x
64 mostra in sequenza su tre schermate l'ora esatta, le
previsioni meteo per tre giorni e infine la temperatura
della propria località. I dati vengono recuperati da un sito in cui va inserita - il più esattamente possibile - le coordinate in modo grafico) della località prescelta. |
Il display Oled SSD1306 utilizza il protocollo I2C, per cui SCL andrà collegato sulla porta GPIO5 (clock) e SDA si collegherà a GPIO4 (data). |
La basetta sperimentale in formato reale. Il display alloggia sullo zoccoloI2C3. |
Lo sketch e la configurazione |
Come
prima cosa, è necessario verificare se si sono
installate tutte le librerie necessarie. Verificando o
lanciando la compilazione del programma, verranno
visualizzate quelle eventualmente mancanti. In questo
caso, provare prima di tutto a scaricarle attraverso
la Ide di Arduino (sketch/include library/manage library). Nel caso non si trovassero tutte, scaricarle dalla finestra che appare sulla destra. Nel caso di dubbio, controllare la pagina relativa alla gestione delle librerie |
Json Streaming Parser ESP 8266 and 32 OLED ESP 8266 weather station |
Il programma è quello standard che si trova tra gli esempi della libreria ESP8266 weather station (se si desidera, lo si trova da File/examples/ESP8266 weather station/WeatherStationDemo). Esso richiede alcune personalizzazioni. La prima, come sempre quando ci si deve collegare alla rete WiFi, e quello di inserire il nome e la password di rete. Successivamente, è necessario definire il nostro fuso orario TZ (+1 rispetto a Greenwich) e l'ora legale (DST_MN = 60 per la stagione estiva. (riquadro blu). E inoltre inserire ogni quanti minuti si desidera l'aggiornamento dei dati 20 * 60, perché il calcolo è effettuato in secondi (riquadro verde). |
Le
righe contenute in questa finestra sono relative alle porte
a cui il dispolay Oled deve essere collegato. Sono contenute le informazioni per tre tipi di scheda: - ESP01 - ESP8266 - ESP8266 con display Oled integrato. Il base alla propria scheda, togliere le barre "//" di commento dove necessario (ricordarsi di commentare le altre). In questo esempio, stiamo usando una scheda ESP8266. |
Successivamente, è necessario inserire alcune informazioni, per ottenere le informazioni del tempo. Bisogna aprire il sito https://openweathermap.org/ eseguire il login (oppure se si accede per la prima volta registrarsi) e selezionare "My Api Key" e copiare la Api key ottenuta, che andrà inserita nel programma alla voce "OPEN_WEATHER_MAP_APP_ID". |
E finalmente, è necessario ottenere il codice della propria città , sempre sul sito https://openweathermap.org/ Nel campo di ricerca, inserire la città per cui vuoi ottenere le informazioni, e salvare il codice numerico(per esempio, 3171058 per Piacenza) che appare nel campo contenente l'indirizzo del sito |
Inserire il codice numerico nella linea evidenziata in rosso. Se si desidera, selezionare la lingua italiana, inserendo "it" nella linea individuata dalla linea blu. |
Ora si può compilare il programma e caricarlo sul nostro ESP8266, collegarlo al display OLED e verificare il funzionamento dello sketch, che trovo interessante e piacevole. Di seguito si possono vedere le tre schermate, che si susseguolo fluidamente sul display a distanza di qualche secondo. Clicca qui per visualizzare il programma Clicca qui per scaricare il programma in formato ".zip". |
Ho
trovato questo programma facendo ricerche su Youtube. Ecco
il link al video che ho utilizzato per creare questa pagina:
https://www.youtube.com/watch?v=s-djfoLxZKI Ringrazio colui che lo ha realizzato. |