BME280 verstehen – Temperatur, Luftfeuchte & Luftdruck im Maker-Projekt

BME280 verstehen – Temperatur, Luftfeuchte & Luftdruck im Maker-Projekt

BME280 verstehen: Temperatur, Feuchte & Druck präzise messen

Der BME280 kombiniert Temperatur, relative Luftfeuchte und Luftdruck in einem einzigen, kompakten Sensor. Er spricht I²C oder SPI und ist damit ideal für Wetterstationen, Raumklima-Logger oder Höhenmessungen im Maker-Projekt.


Überblick

  • Schnittstellen: I²C (Standard) oder SPI.
  • I²C-Adresse: 0x76 oder 0x77 – wählbar über den SDO-Pin (SDO=GND → 0x76, SDO=VDD → 0x77).
  • Logikpegel: Der nackte Sensor arbeitet mit 3,3 V-Logik; Breakout-Boards haben oft Regler/Level-Shifter für 5 V-Arduinos.
  • Betriebsarten: sleep, forced (Messung auf Abruf) und normal (kontinuierlich).
  • Messqualität: per Oversampling und IIR-Filter konfigurierbar (Trade-off zu Geschwindigkeit/Verbrauch).

Verdrahtung (I²C)

  • VCC → 3,3 V (bei 5-V-Boards nur Breakouts mit Regler nutzen)
  • GND → GND (gemeinsame Masse mit MCU)
  • SCL → MCU-SCL, SDA → MCU-SDA (Pull-Ups oft auf dem Breakout vorhanden)
  • SDO → wählt I²C-Adresse (siehe oben)
  • CSB → bei I²C auf VDD legen (SPI: als Chip-Select nutzen)

Konfiguration: Oversampling & IIR-Filter

Für rauschärmere Messungen erhöhst du das Oversampling (z. B. ×1…×16). Das IIR-Filter glättet Druckspitzen (z. B. beim Bewegen). Für schnelle Reaktionen wählst du kleine Filterkoeffizienten und geringes Oversampling; für ruhige, präzise Anzeigen erhöhst du beides.

Arduino-Beispiel (I²C, Adafruit-Library)

Installiere in der Arduino IDE die Adafruit BME280-Bibliothek + Abhängigkeiten. Standardadresse ist 0x76 oder 0x77.


#include <Wire.h>
#include <Adafruit_BME280.h>

Adafruit_BME280 bme;          // I²C
unsigned long delayMS = 1000;

void setup() {
  Serial.begin(115200);
  bool ok = bme.begin(0x76); // ggf. 0x77
  if(!ok) {
    Serial.println("BME280 nicht gefunden!");
    while(1);
  }
  // optional: See-Level-Druck für Höhenberechnung (hPa)
  // Passe den Wert an lokale Wetterdaten an.
}

void loop() {
  float T = bme.readTemperature();            // °C
  float P = bme.readPressure() / 100.0F; // hPa
  float H = bme.readHumidity();               // % rF

  // Einfache Höhenabschätzung (barometrische Formel, m)
  float p0 = 1013.25; // hPa, See-Level-Referenz
  float alt = 44330.0 * (pow(p0/P, 0.1903) - 1.0);

  Serial.print("T="); Serial.print(T);
  Serial.print(" °C, H="); Serial.print(H);
  Serial.print(" %, P="); Serial.print(P);
  Serial.print(" hPa, Alt="); Serial.print(alt);
  Serial.println(" m");
  delay(delayMS);
}
    

Python-Beispiel (CircuitPython/Blinka, I²C)

Auf Microcontrollern mit CircuitPython oder auf dem Raspberry Pi via Blinka kannst du die Adafruit-Bibliothek nutzen.


import board, busio
import adafruit_bme280

i2c = busio.I2C(board.SCL, board.SDA)
bme = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76)  # ggf. 0x77

# Referenz-See-Level-Druck (hPa) für Altitude-Berechnung
bme.sea_level_pressure = 1013.25

print("T = {:.2f} °C".format(bme.temperature))
print("H = {:.1f} %".format(bme.relative_humidity))
print("P = {:.2f} hPa".format(bme.pressure))
print("Alt = {:.1f} m".format(bme.altitude))
    

Höhenberechnung & See-Level-Druck

Die Höhe ergibt sich aus dem Verhältnis von gemessenem Druck zum See-level-Referenzdruck. Für genaue Ergebnisse passe den Referenzdruck regelmäßig an lokale Wetterdaten an (z. B. einer nahegelegenen Wetterstation); kleine Änderungen von wenigen hPa wirken sich bereits merklich auf die berechnete Höhe aus.

Fehlerquellen & Tipps

  1. Falsche I²C-Adresse → zwischen 0x76 und 0x77 prüfen (SDO-Strap, Bibliotheks-Beispiel).
  2. 5-V-Logik ohne Level-Shifter → nur Breakouts mit Regler/Level-Shift an 5-V-MCUs verwenden.
  3. Kein gemeinsames GND → Messwerte „springen“. Immer gemeinsame Masse verbinden.
  4. Zu aggressives Filter → träge Anzeige. Filterkoeffizient bei dynamischen Anwendungen reduzieren.
  5. Referenzdruck veraltet → Höhenwert driftet. Regelmäßig aktualisieren.

Checkliste

  • Adresse korrekt (0x76/0x77) & Bus läuft (I²C-Scan)
  • Gemeinsame Masse, richtige Pegel (3,3 V-Logik)
  • Oversampling/IIR passend zum Use-Case
  • See-level-Druck gesetzt, wenn Höhe wichtig ist
  • Gehäuse/Luftstrom beachten (Eigen­erwärmung reduzieren)

Fazit

Mit dem BME280 bekommst du drei wichtige Klima-Parameter aus einem Bauteil. Mit sauberer Verdrahtung, passenden Mess­einstellungen und korrektem Referenzdruck erhältst du stabile, reproduzierbare Ergebnisse – perfekt für Wetter- und IoT-Projekte.

Tipp: Für Raumklima genügt meist I²C mit Oversampling ×1–×4 und moderatem IIR-Filter. Für Höhenmessung unterwegs lohnt höheres Oversampling und regelmäßige Referenzdruck-Updates.

0 Kommentare

Kommentieren

Bitte beachten Sie, dass Kommentare vor ihrer Veröffentlichung genehmigt werden müssen.