Tutorial come programmare Arduino per misurare pressione atmosferica, umidità e temperatura con il sensore Bosch BME280.
BME280 cos’è e come funziona
BME280 è la sigla di un piccolo sensore prodotto dalla Bosch che è in grado di misurare la pressione atmosferica, la temperatura dell’aria e la sua umidità. Il sensore trasforma i segnali ambientali in dati digitali che vengono scambiati per mezzo di impulsi digitali con un micro-controllore.
A seconda della shield utilizzata lo scambio di dati può avvenire con il protocollo I2C, oppure con il protocollo SPI.
Nella immagine che riporto trovi le specifiche tecniche e le prestazioni di questo sensore integrato. E’ da notare il ridottissimo consumo di corrente che è di 3,6 uA.

Come programmare Arduino + BME280
Per programmare e ricevere i dati digitali dal sensore Bosch BME280 dobbiamo collegare il sensore ai pin di una scheda Arduino Uno, Mega o MKR Zero. Puoi utilizzare il sensore anche con altre schede con processori come ESP8266, STM32, con la stessa IDE di Arduino a patto che hai installato i relativi core.
Prima di programmare una scheda Arduino, o equivalente, devi collegare la schedina shield dove è montato il sensore.
come collegare e schema elettrico BME280 breakout board
Questo è il collegamento elettrico per una schedina shield che comunica i dati con protocollo I2C. Il sensore deve essere alimentato a 3,3 Volt. Se la shield ha il regolatore di tensione allora puoi usare anche 5 Volt.
Se lo colleghi ad una Arduino UNO allora i segnali I2C di clock vanno collegati dal pin Analog A5 al pin del sensore chiamato SCK. Il pin dei dati seriali SDA va collegato al pin Analog A4.





librerie Arduino per sensore BME280
I dati digitali provenienti dal sensore non sono direttamente convertiti in dati utilizzabili e pertanto serve una libreria che faccia questo per noi.
Nella IDE di Arduino vai nel menu Sketch -> Include libreria e digita BME280.

ti appare una nuova finestra dove trovi una lista di librerie sviluppate per scambiare dati con il sensore BME280.

Se usi la libreria Adafruit ricordati di avere anche la libreria generica Adafruit_sensor, che ti dovrebbe chiedere in automatico quando installi la libreria BME280.
Chiudi la IDE di Arduino per memorizzare i cambiamenti delle librerie.
Questa è una libreria modificata da quella di Adafruit che ha delle funzioni dirette per acquisire le misure. Vale la pena darci un occhio.
Link alla Libreria BME280 Arduino di Cactus-io
Questa che ti segnalo è un programma che non ha bisogno di librerie. L’ho provato e funziona. Ho notato però che la misura di pressione “si muove” nel tempo troppo velocemente, per cui penso che ci sia qualche problema. Lo trovi al link che ti riporto:
programma arduino BME280 senza uso di librerie
Questo è un progetto che utilizza un Arduino Uno e un EPD da 4,7 inch. Dovrai avere altre librerie di Adafruit, ma offre dei caratteri interessanti e delle icone del tempo, quale sole o nuvole, integrate nel programma e con caratteristiche vettoriali. Qui di seguito il link al progetto su github:
programma Arduino Uno + BME280 con caratteri grafici

programma di prova
Questo che ti riporto è un programma di prova che puoi copiare ed incollare su un un nuovo sketch di Arduino. Devi fare attenzione all’indirizzo del sensore che può essere 0x77 per le schede Adafruit o anche 0x76 per altre schede. Se utilizzi questa libreria in modalità I2C e contemporaneamente utilizzi un dispositivo che usa la SPI potrebbe non funzionare.
/*
* Complete Project Details https://randomnerdtutorials.com
*/
#include <Wire.h>
//#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Se usi I2C allora commenta queste 4 righe
// #define BME_SCK 13
// #define BME_MISO 12
// #define BME_MOSI 11
// #define BME_CS 10
#define SEALEVELPRESSURE_HPA (1013.25)
Adafruit_BME280 bme; // attiva la I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI
unsigned long delayTime;
void setup() {
Serial.begin(115200);
Serial.println(F("BME280 test"));
bool status;
// default settings for Adafruit BME280 address = 0x77
// (you can also pass in a Wire library object like &Wire2)
status = bme.begin (0x76); // metti 0x77 se la scheda è Adafruit
if (!status) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
Serial.println("-- Default Test --");
delayTime = 1000;
Serial.println();
}
void loop() {
printValues();
delay(delayTime);
}
void printValues() {
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println(" *C");
// Convert temperature to Fahrenheit
Serial.print("Temperature = ");
Serial.print(1.8 * bme.readTemperature() + 32);
Serial.println(" *F");*/
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
}
Arduino + ESP8266 + BME280
I programmi e le librerie che funzionano con le schede Arduino funzionano senza modifiche anche sul modulo ESP8266, per cui non dovresti aver bisogno di niente in aggiunta a quello già detto.
Se il programma di prova funziona correttamente aprendo il monitor seriale vedrai apparire i dati come da immagine sotto. Ovviamente la temperatura, umidità e pressione variano con il tempo ed il luogo per cui vedrai dei numeri diversi dai miei.

Arduino + ATtiny 25/45/85 + BME280
Ti riporto un interessante progetto che utilizza una libreria semplificata per utilizzare i piccoli microprocessori della serie ATtiny di Atmel. E’ riuscito ad utilizzare un display Oled a colori insieme al sensore BME280.

Il link a questa libreria è:
Link libreria Arduino ATtiny85 con BME280
Dove acquistare BME280
Ci sono molti posti dove acquistare questo sensore, ma ti cito solo quelli che penso ti possono fornire un sensore BME280 originale e non un clone.
Adafruit BME280 – ottimo se vuoi contribuire con progetti open source
PiMoroni BME280 – ottimo se ti piace il look
WaveShare BME280 – ottimo se ti piace il prodotto cinese
Quanto è costato scrivere questo articolo?
Ho utilizzato circa 2 giorni per trovare le informazioni, provare le librerie e verificare il loro funzionamento.
Dedico con piacere il mio tempo libero per scrivere articoli che spero ti saranno utili.
Se vuoi aiutarmi con le spese del sito internet puoi guardare gli oggetti che seguono e se ti serve qualcosa e la trovi al prezzo giusto comprala. A te non costa niente in più, a me viene data una piccola commissione.
Grazie per tutto quello che potrai fare per aiutarmi a continuare a scrivere articoli.
Guarda Sedia Ergonomica Gamer

Guarda Action Cam

Guarda Smart Watch Fitness

Guarda Saldatore Portatile a batterie

Guarda Arduino UNO Starter Kit

Guarda KIT Saldatore + Tester

Guarda LED Neopixel

Credits & Links
datasheet BME280 – sensore pressione umidità temperatura
Immagine collegamento elettrico Arduino Uno con I2C