Werbung

Arduino Lektion 44: BME280 Temperatur, Luftfeuchtigkeit und Luftdruck Sensor

In diesem Tutorial möchte ich den digitalen Temperatur, Luftfeuchtigkeit und Luftdruck Sensor BME280 vorstellen. Dieser Sensor wurde mir vom Onlineshop Makershop.de kostenlos für dieses Review zur Verfügung gestellt.

BME280 - Temperatur, Luftfeuchtigkeit und Luftdruck Sensor
BME280 – Temperatur, Luftfeuchtigkeit und Luftdruck Sensor

Technische Daten des BME280

  • Abmaße (L x B) – 14mm x 10mm
  • Betriebsspannung – 1.8V bis 5V
  • Schnittstelle – I2C
  • Messbereiche
    • Temperatur -40°C bis +85°C
    • Luftdruck 300hPa bis 1100hPa ±0.25%
    • Luftfeuchtigkeit ±3% relative Genauigkeit, ≤ 2% Hysterese
Werbung

Anschluss

Der Sensor BME280 verfügt über 4 Pins welche wiefolgt an den Arduino UNO angeschlossen werden:

BME280 Arduino UNO
 VIN  5V
GND GND
SCL analoger PIN A5
SDA analoger PIN A4

Schaltung

In diesem Kapitel möchte ich nun eine kleine Schaltung mit dem BME280 und einem Display für die Ausgabe der Werte erzeugen.

Wenn du diese Schaltung nachbauen möchtest so benötigst du:

  • 1x Arduino Nano
  • 1x Sensor BME280
  • 4x Breadboard Kabel
  • 1x Breadboard 400 Pin

Schaltung BME280 Sensor am Arduino Nano
Schaltung BME280 Sensor am Arduino Nano

BME280 Bibliothek

Für den Sensor gibt es eine Bibliothek von Adarfuit welche über die Arduino IDE installiert werden kann. Wie genau das funktioniert habe ich im nachfolgenden Video gezeigt.

Installieren der Adafruit Bibliothek für den Sensor BME280 in der Arduino IDE
Dieses Video ansehen auf YouTube.

Zusätzlich wird noch die Bibliothek Adafruit Sensor benötigt. Diese kann leider nur vom GitHub Repository https://github.com/adafruit/Adafruit_Sensor geladen werden.

Leider hat diese Bibliothek mit meinem Arduino Nano nicht funktioniert daher habe ich zur Bibliothek von http://cactus.io gewechselt. Hier musste ich im Beispiel nur die I2C Adresse „0x76“ auskommentieren. Und es funktionierte von Anhieb sehr gut.

Ausgabe BME280 Sensor
Ausgabe BME280 Sensor

Quellcode

Beispiel zur Bibliothek von http://cactus.io

Den nachfolgenden Quellcode habe ich von der Seite http://cactus.io/hookups/sensors/barometric/bme280/hookup-arduino-to-bme280-barometric-pressure-sensor kopiert und deutsche Texte verpasst. Das Beispiel erzeugt auf dem seriellen Monitor eine Ausgabe.

/***************************************************************************
  This is a library for the BME280 humidity, temperature & pressure sensor
  Designed specifically to work with the BME280 Breakout board
  – --> http://www.adafruit.com/products/2650
  This sketch only supports the I2C bus for connection.
 ***************************************************************************/

#include <Wire.h>
#include "cactus_io_BME280_I2C.h"

BME280_I2C bme(0x76);  // I2C using address 0x76

void setup() {
  Serial.begin(9600);
  Serial.println("BME280 Luftdruck, Luftfeuchtigkeit, Temperatur Sensor | cactus.io"); 
  Serial.println("-----------------------------------------------------------------");
  Serial.println("");

  if (!bme.begin()) {
    Serial.println("Es konnte kein BME280 Sensor gefunden werden!");
    Serial.println("Bitte überprüfen Sie die Verkabelung!");
    while (1);
  }

  bme.setTempCal(-1);
  
  Serial.println("Luftdruck\tLuftfeuchtigkeit\t\tTemperatur(Celsius)\t\tTemperatur(Fahrenheit)");
}

void loop() {
    bme.readSensor(); 
 
    Serial.print(bme.getPressure_MB()); Serial.print("\t\t");    // Pressure in millibars
    Serial.print(bme.getHumidity()); Serial.print("%\t\t\t\t");
    Serial.print(bme.getTemperature_C()); Serial.print(" °C\t\t\t");
    Serial.print(bme.getTemperature_F()); Serial.println(" °F");
    
    delay(2000);
}

Beispiel – Ausgabe auf einem 0,9″ OLED Display

Sensor BME280 mit Taster und 0,91" OLED Display
Sensor BME280 mit Taster und 0,91″ OLED Display

Für diese Schaltung benötigst du:

  • einen Taster
  • einen 10KOhm Widerstand (als PullDown)
  • ein 0,91″ OLED Display
  • einen Arduino Nano
  • 12 Breadboard Kabel
  • ein 400 PIN Breadboard
  • ein BME280 Sensor
Schaltung BME280 mit OLED_Display und Taster
Schaltung BME280 mit OLED_Display und Taster

Quellcode

#include <Wire.h>
#include "cactus_io_BME280_I2C.h"

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

#define BTN_UP 9

int statusBtnUp = 0; //Status des Tasters
int index = 1; // Zählvariable

BME280_I2C bme(0x76);  // I2C using address 0x76

void setup() {
  Serial.begin(9600);

  //Setup für den BME280 Sensor
  if (!bme.begin()) {
    Serial.println("Es konnte kein BME280 Sensor gefunden werden!");
    Serial.println("Bitte überprüfen Sie die Verkabelung!");
    while (1);
  }
  bme.setTempCal(-1);
  
  //Setup für das Display
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(1000);
  display.clearDisplay();

  //Setup für den Button
  pinMode(BTN_UP,INPUT);
}
 
void loop() {
    bme.readSensor();

    statusBtnUp = digitalRead(BTN_UP);
    Serial.println(statusBtnUp);
    
    if(statusBtnUp == HIGH && index <3){ 
      index = index+1;
    } else if (statusBtnUp == HIGH && index ==3){
      index = 1;
    }

   switch(index){
     case 1: zeigeTemperatur(); break; 
     case 2: zeigeLuftfeuchtigkeit(); break;
     case 3: zeigeLuftdruck(); break;
   }    
}

void zeigeTemperatur(){
  String tempC = String(bme.getTemperature_C())+"C";
  displayText("Temperatur", tempC);
}

void zeigeLuftfeuchtigkeit(){
  String humidity = String(bme.getHumidity())+"%";
  displayText("Luftfeuchtigkeit", humidity);
}

void zeigeLuftdruck(){
   String pressure = String(bme.getPressure_MB())+" mPa";
   displayText("Luftdruck", pressure);
}

void displayText(String row1, String row2){
  delay(1000);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(row1);
  display.setCursor(0,10);
  display.println(row2);
  display.display();
  display.clearDisplay();
}

Video

Sensor BME280 mit 0,91" OLED Display am Arduino Nano
Dieses Video ansehen auf YouTube.

 

 

Werbung

13 Gedanken zu „Arduino Lektion 44: BME280 Temperatur, Luftfeuchtigkeit und Luftdruck Sensor

  • 8. Februar 2019 um 22:21
    Permalink

    Vielen Dank für diese Infos. Auch bei mir funktionierte Adafruit Code nicht. Mit dem Cactus Code alles bestens.
    Habe dann nochmal Adafruit ausprobiert und nachdem ich die Adresse in dem header file „Adafruit_BME280.h“ von 0X77 in 0X76 geändert hatte, funktionierte es.

    Antwort
  • 8. Mai 2019 um 14:13
    Permalink

    Hallo zusammen,

    ich suche nach einem ähnlichen Projekt, werde aber leider nicht fündig.

    Folgende Situation: In jedem Raum befindet sich ein Raumtermostat, welches 3 der 5 verlegten Kabel benötigt. Die Kabel sind jeweils vom Raumtermostat in den zentralen Heizungsverteiler verlegt. Dort könnte man also die übrigen 2 Kabel jeweils mit einer anderen Spannung etc. versorgen.
    Ich möchte gern in allen Zimmern die Temperatur und Luftfeuchte messen. Hinter dem Raumtermostat ist jeweils eine Unterputzdose verbaut und ausreichend Platz für die übrige Technik. Am Raumtermostat möchte ich dann 2 LED (1x gelb und 1x rot) betreiben, welche mit lokal anzeigen, dass die Luftfeuchte zu hoch ist.
    Zentral möchte ich dann die Daten via ESP? an mein FHEM senden um dort damit weiter zu arbeiten.

    Könnte sich jemand das mal anschauen.

    Vielen Dank im Vorraus
    Grüße Marcus

    Antwort
  • 21. Juli 2019 um 21:51
    Permalink

    SDA -> Analog 4 (nicht 5)
    SCL -> Analog 5 (nicht 4)

    Antwort
    • 22. Juli 2019 um 10:15
      Permalink

      Hi,

      danke für den Hinweis, da ist mir wohl ein kleiner Fehler unterlaufen.
      Habe ich sofort korrigiert.

      Gruß,

      Stefan Draeger

      Antwort
  • 3. Oktober 2019 um 13:55
    Permalink

    laut datenblatt bme280 verträgt dieser 1.71 V bis 3.6 V. Ein anschluss an 5V ist irgendwann fatal…

    Antwort
    • 3. Oktober 2019 um 14:22
      Permalink

      Hi,

      danke für dein Kommentar, es gibt 2 Modelle von dem BME280 Sensor, einmal wie du beschrieben hast bis max. 3,6V und einmal bis 5V so wie in diesem Fall.

      Gruß,

      Stefan Draeger

      Antwort
      • 19. November 2019 um 08:34
        Permalink

        Genauer gesagt: Es gibt den Sensor nicht in zwei Versionen – aber das Shild gibt es in unterschiedlichen Beschaltungen – für 3,6V oder für 5V.

        Antwort
  • 11. März 2020 um 23:19
    Permalink

    Sehr schön beschrieben – Danke!
    habe es 1 zu 1 nachgebaut und mit der „neuen“ 280-Cactus-Bibliothek sind die Werte ziemlich genau!
    habe nur eine Frage bzw. Bitte: was muss man umstellen, dass „der Wert“, also nur die Zahl am Display formatfüllend ist?
    hab mich mit den OLEDs noch nicht so viel befasst
    Danke im voraus

    Antwort
  • 19. April 2020 um 22:08
    Permalink

    Hallo Stefan,
    GRATULATION ! Endlich einmal ein Projekt, wo auch „blutige anfänger“ wie ich sich herantrauen.
    Gibt es irgendwann einmal eine Version wo alle 3 Werte (Temp. / hPa / %) auf einmal untereinander angezeigt werden ?

    Gruß
    Michael

    Antwort
    • 20. April 2020 um 19:23
      Permalink

      Hi Michael,

      alle 3 Werte untereinander würde ähnlich funktionieren wie nur 2 Werte.

      Ich bringe dir dazu mal ein separaten, kurzen Beitrag.

      Gruß,

      Stefan Draeger

      Antwort
  • Pingback:Werte eines BME280 Sensors auf einem Display anzeigen - Technik Blog

  • 19. Mai 2020 um 16:17
    Permalink

    Hi,
    geht bei mir auch mit Adafruit_BME280 lib. Musste nur die Zeile
    status = bme.begin();
    in
    status = bme.begin(0x76);
    abändern.
    (Hardware ESP32)
    Gruß Norbert

    Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Werbung