Sensore BME280: temperatura, umidità e pressione con ESP32

Il sensore BME280 di Bosch Sensortec misura temperatura, umidità e pressione atmosferica in un chip da 2,5 × 2,5 mm. Nasce come evoluzione del BMP180, di cui riprende le misure di pressione e temperatura, e aggiunge l’umidità. AdriRobot lo ha esaminato nel dettaglio, dallo schema del modulo a una prova con ESP32-C3 SuperMini e display OLED.

Cosa misura il sensore BME280

Modulo con sensore BME280 visto dal lato dei componenti e dal retro, con i pin VIN, GND, SCL e SDA
Il modulo BME280 visto davanti e dietro (foto: AdriRobot)

Il BME280 è un sensore digitale MEMS. Integra gli elementi che convertono le grandezze fisiche in valori digitali. Quindi il microcontrollore deve soltanto configurarlo e leggere i dati sul bus. Le interfacce sono due. La I²C è la più comoda con Arduino ed ESP32. La SPI è utile quando il bus I²C non è disponibile o servono più prestazioni.

La pressione serve anche a stimare l’altitudine. Il sensore però misura solo la pressione. La quota la calcola il microcontrollore, con una formula che usa una pressione di riferimento. Di conseguenza il risultato dipende da quel riferimento, che il meteo fa variare.

  • alimentazione del modulo: da 1,8 a 5 V;
  • temperatura: da -40 a +85 °C, risoluzione 0,01 °C, precisione ±1 °C;
  • umidità: da 0 a 100% RH, risoluzione 0,008%, precisione ±3%;
  • pressione: da 300 a 1100 hPa, risoluzione 0,18 Pa, precisione tipica ±1 hPa;
  • indirizzo I²C: 0x76 con SDO basso, 0x77 con SDO alto;
  • dimensioni: circa 13,3 × 10,6 × 3,5 mm, peso 0,5 g.

BME280, BMP180, BMP280 e BME680

Bosch produce un’intera famiglia di sensori barometrici. BMP180 e BMP280 misurano pressione e temperatura. Il BME280 aggiunge l’umidità, per questo è molto usato nelle stazioni meteo, e a 1 Hz assorbe circa 3,6 µA. Il BME680 arriva a quattro informazioni. Oltre a temperatura, pressione e umidità, rileva una misura legata ai composti organici volatili. Serve per valutare la qualità dell’aria.

Lo schema del modulo

Il modulo non contiene solo il sensore Bosch. Lo schema si divide in tre parti: alimentazione, adattamento dei livelli logici I²C e circuito del sensore. Un regolatore LDO 662K ricava i 3,3 V per il sensore, con tre condensatori di filtro. Due convertitori di livello con transistor BSS138, integrati in un chip 2N7002DW, adattano le linee SDA e SCL. Ogni lato ha le sue resistenze di pull-up da 10 kΩ.

Grazie a questa circuiteria il modulo si collega anche a microcontrollori con tensioni superiori. Il sensore, infatti, non riceve mai quella tensione sui suoi pin. Inoltre il pin SDO sceglie l’indirizzo: a massa vale 0x76, a 3,3 V vale 0x77. Sul modulo la scelta passa da tre piazzole, su cui va deposta una goccia di stagno. Di default il collegamento è a massa. Perciò due BME280 sullo stesso bus richiedono indirizzi diversi.

Prova con ESP32-C3 SuperMini e display OLED

Schema di collegamento del sensore BME280 e del display OLED a una ESP32-C3 SuperMini su breadboard
Sensore e display condividono le linee SDA e SCL (schema: AdriRobot)

Nella prova il BME280 e un display OLED da 0,96 pollici SSD1306 condividono il bus I²C della ESP32-C3 SuperMini. Hanno indirizzi diversi, perciò convivono senza problemi. I collegamenti usano GPIO 8 come SDA e GPIO 9 come SCL.

Poi servono le librerie Adafruit BME280 (versione 2.3.0 nel progetto) e Adafruit SSD1306 (versione 2.5.17). Il Gestore librerie installa anche le dipendenze: Adafruit BusIO, Unified Sensor e GFX. Nell’IDE Arduino si sceglie la scheda ESP32C3 Dev Module. AdriRobot consiglia inoltre di attivare USB CDC On Boot ed Erase All Flash Before Sketch Upload.

Lo sketch verifica che display e sensore rispondano. Poi, ogni due secondi, legge temperatura, umidità e pressione. Calcola anche l’altitudine, con 1013,25 hPa di riferimento, e mostra tutto sul display e sul monitor seriale. Il BME280 non richiede taratura, perché i coefficienti di calibrazione sono memorizzati dal produttore e li usa la libreria. Per un’altitudine più precisa conviene però impostare la pressione locale al livello del mare.

Sensore BME280 e display OLED collegati a una ESP32-C3 SuperMini su breadboard, con i valori misurati sullo schermo
Il sensore BME280 e il display OLED sul bus I2C della ESP32-C3 SuperMini (foto: AdriRobot)

Il modulo è a catalogo FuturaShop come BME280, sensore di pressione, umidità e temperatura. Per un progetto completo con più sensori e una dashboard web, c’è la stazione meteo ESP32 con dashboard web live.

Fonte: l’articolo originale di AdriRobot include il confronto completo tra i sensori Bosch, lo schema elettrico e lo sketch.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Menu