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.

Prestazioni e caratteristiche tecniche del sensore di pressione umidità e temperatura BME280

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.

Schema elettrico collegamento Arduino BME280 con comunicazione I2C
Schema elettrico collegamento Wemos e BME280 con comunicazione I2C
Schema elettrico collegamento ESP8266 e BME280 con comunicazione I2C
Per abilitare la I2C collegare CSB al +3V3. Address = 0x76 quando pin SD0 non collegato.
Schema elettrico BME280 SparkFun breakout board

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.

Dati che appaiono sulla seriale con il programma di test Adafruit BME280

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

Sedia Ergonomica Gamer
Cliccando sull’immagine e acquistando una sedia ergonomica gamer aiuti il blog

Guarda Action Cam

Action Cam WiFi
Cliccando sull’immagine e acquistando una Action Cam WiFi aiuti attivamente il blog

Guarda Smart Watch Fitness

Smart Watch Fitness
Cliccando sull’immagine e acquistando un Smart Watch Fitness aiuti il blog

Guarda Saldatore Portatile a batterie

Saldatore Portatile per elettronica
Cliccando sull’immagine e acquistando un saldatore portatile aiuti il blog

Guarda Arduino UNO Starter Kit

Arduino UNO Starter Kit
Cliccando sull’immagine e acquistando un Arduino UNO Starter Kit aiuti il blog

Guarda KIT Saldatore + Tester

Kit Saldatore + Tester Elettronica
Cliccando sull’immagine e acquistando un Kit Saldatore + Tester Elettronico aiuti il blog

Guarda LED Neopixel

LED RGB Neopixel
Cliccando sull’immagine e acquistando un LED RGB Neopixel aiuti il blog

Credits & Links

datasheet BME280 – sensore pressione umidità temperatura

Immagine collegamento elettrico Arduino Uno con I2C

Immagine collegamento elettrico ESP8266 con I2C

Tutorial BME280

Technoblogy AVR & Arduino projects

Autore dell'articolo: Lucio Sciamanna