Misura con precisione temperatura e pressione atmosferica usando il sensore BMP280 e una scheda ESP32: guida completa a collegamenti, caratteristiche e integrazione con ESPHome e Home Assistant.
Il sensore BMP280 è un modulo digitale di pressione barometrica e temperatura sviluppato dalla Bosch Sensortec, progettato per applicazioni di sensing ambientale in dispositivi mobili e sistemi embedded. È un’evoluzione del suo predecessore BMP180, con prestazioni migliorate, minori consumi e un’accuratezza superiore. Grazie alla sua compatibilità con protocolli di comunicazione standard come I²C e SPI, è facilmente integrabile con microcontrollori come Arduino, Raspberry Pi ed ESP32.
Il BMP280 trova impiego in una vasta gamma di progetti: dal monitoraggio meteorologico domestico, a strumenti di misurazione dell’altitudine, fino ad arrivare a sistemi portatili di rilevamento ambientale. La sua capacità di misurare con precisione la pressione atmosferica consente, tra le altre cose, di stimare l’altitudine relativa. Inoltre, grazie al sensore interno di temperatura, è possibile ottenere dati ambientali completi con un singolo dispositivo compatto ed efficiente.
- Acquistala su Aliexpress: https://s.click.aliexpress.com/e/_omEhKbg
Specifiche tecniche
Il BMP280 è un sensore digitale che offre misurazioni precise sia della pressione barometrica che della temperatura ambientale. La comunicazione con i microcontrollori avviene tramite interfaccia I²C o SPI, rendendolo estremamente versatile per una varietà di piattaforme hardware. Uno dei suoi punti di forza è la risoluzione della pressione, che può arrivare fino a 0.16 Pa in modalità ultra-high resolution, permettendo di rilevare variazioni altimetriche minime, fino a pochi centimetri.
Il range di misurazione della pressione va da 300 hPa a 1100 hPa, ovvero valori compatibili con la maggior parte delle applicazioni atmosferiche, dal livello del mare fino a circa 9000 metri di altitudine. La temperatura può essere misurata in un intervallo che va da -40 °C a +85 °C, con una precisione tipica di ±1°C. Sebbene non sia progettato come termometro di precisione, fornisce comunque letture affidabili per scopi generali.
Un altro vantaggio significativo è il basso consumo energetico: il sensore consuma solo 2.7 µA in modalità a bassa potenza, e fino a un massimo di 720 µA in modalità a prestazioni elevate. Questo lo rende perfetto per sistemi alimentati a batteria e dispositivi IoT che devono funzionare per lunghi periodi senza manutenzione.
Il BMP280 opera tipicamente a 3.3V, quindi è fondamentale assicurarsi che venga alimentato correttamente per evitare danni. Alcune versioni del modulo dispongono di un regolatore di tensione interno e possono essere alimentate anche a 5V, ma è sempre bene verificare le specifiche del singolo breakout board utilizzato.
Collegamenti con ESP32
Per utilizzare il BMP280 con una scheda ESP32, è possibile scegliere tra le interfacce I²C o SPI. In questo esempio ci concentreremo sulla connessione tramite I²C, che richiede meno cavi e consente di collegare più dispositivi sullo stesso bus. Colleghiamo il VCC del BMP280 ai 3.3V della ESP32, il GND del BMP280 al GND della ESP32, poi SDA del BMP280 al GPIO4 della ESP32 e SCL del BMP280 al GPIO0 della ESP32.
Codice
Andiamo a creare un nuovo device su ESPHome e chiamiamolo BMP280. Saltiamo per il momento la connessione e selezioniamo la scheda che dobbiamo programmare (ESP32).
Una volta creato, clicchiamo su EDIT per modificare il codice.
Questo è il codice per configurare una ESP32 per leggere i dati da un sensore BMP280 e inviarli a Home Assistant tramite ESPHome. Il dispositivo sarà accessibile in rete tramite Wi-Fi e potrà essere aggiornato via OTA (Over-The-Air) senza bisogno di connessione fisica. Potete scaricarlo a questo LINK.
All’inizio, il codice definisce il nome del dispositivo, sia quello tecnico (“bmp280”) che quello più leggibile per Home Assistant (“BMp280”).
esphome:
name: bmp280
friendly_name: BMP280
Poi si specifica che il microcontrollore utilizzato è un ESP32 e che il firmware verrà compilato usando il framework Arduino, che è più semplice e supportato rispetto ad altre alternative come ESP-IDF.
esp32:
board: esp32dev
framework:
type: arduino
Il codice attiva il logger, che serve a registrare gli eventi e inviare messaggi di debug. Inoltre, viene attivata l’API di ESPHome, che permette a Home Assistant di comunicare con il dispositivo in modo sicuro grazie a una chiave di crittografia.
logger:
api:
encryption:
key: "BOy4aTaxBr+9gCemH0Txfv7S5Cx1y42pOD7fyF08kLI="
Per evitare di dover collegare il dispositivo fisicamente ogni volta che si vuole aggiornare il firmware, viene attivata la modalità OTA (Over-The-Air), con una password di sicurezza. Inoltre, è presente la funzione captive portal, che permette di riconfigurare il Wi-Fi direttamente da un browser in caso di problemi di connessione.
captive_portal:
ota:
- platform: esphome
password: "4fe1480fd218cdbca6b8e218f7a2e2b3"
Per collegarsi alla rete, il codice usa le credenziali Wi-Fi salvate nei secrets di ESPHome (file separato non visibile nel codice). Se la connessione fallisce, il dispositivo crea un hotspot Wi-Fi di emergenza (“Bmp280 Fallback Hotspot”) con una password predefinita, in modo che sia possibile riconfigurarlo.
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Bmp280 Fallback Hotspot"
password: "FZ2Sn7q2Uh5g"
Trattandosi di un sensore che lavora su interfaccia I2C, questa sezione configura la comunicazione I2C tra l’ESP32 ed il sensore BMP280, impostando il pin GPIO4 dell’ESP32 come linea SDA ed il pin GPIO0 come linea SCL. La funziona scan abilita la scansione automatica dei dispositivi connessi al bus I2C, verificando quali dispositivi I2C sono collegati e il loro indirizzo.
i2c:
sda: 4
scl: 0
scan: true
id: bus_i2c
Il sensore viene integrato impostando la comunicazione con I2C, definendo poi le misurazione per Temperatura (in gradi Celsius) e Pressione (in hPa). Impostiamo l’indirizzo di lettura come 0x76, tuttavia nel caso non venisse identificato, potete cambiarlo in 0x77. Settiamo l’accuratezza alla seconda cifra decimale e chiediamo al sensore di ripetere la lettura ogni 2 secondi.
sensor:
- platform: bmp280_i2c
i2c_id: bus_i2c
address: 0x76 # Se non funziona, prova 0x77
temperature:
name: "Temperatura BMP280"
unit_of_measurement: "°C"
accuracy_decimals: 2
pressure:
name: "Pressione BMP280"
unit_of_measurement: "hPa"
accuracy_decimals: 2
update_interval: 2s
Salvate e verificate con Validate se il codice è stato scritto correttamente.
Collegate la ESP32 al computer tramite cavo USB, e cliccate su Install.
Conclusa l’installazione, integriamo il device su Home Assistant. Dovrebbe essere arrivata una notifica sulla plancia. In ogni caso, per integrarlo andate su Impostazioni -> Dispositivi e servizi e apparirà il dispositivo BMP280 da integrare.
Autorizzate la configurazione ed otterrete quanto segue.