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
oder0x77
– 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
-
Falsche I²C-Adresse → zwischen
0x76
und0x77
prüfen (SDO-Strap, Bibliotheks-Beispiel). - 5-V-Logik ohne Level-Shifter → nur Breakouts mit Regler/Level-Shift an 5-V-MCUs verwenden.
- Kein gemeinsames GND → Messwerte „springen“. Immer gemeinsame Masse verbinden.
- Zu aggressives Filter → träge Anzeige. Filterkoeffizient bei dynamischen Anwendungen reduzieren.
- 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 (Eigenerwärmung reduzieren)
Fazit
Mit dem BME280 bekommst du drei wichtige Klima-Parameter aus einem Bauteil. Mit sauberer Verdrahtung, passenden Messeinstellungen 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.
- Tags: 0x76 0x77 Arduino Barometer BME280 CircuitPython Datenlogger ESP32 Höhe I2C IIR-Filter IoT Kalibrierung Luftdruck Luftfeuchte MicroPython Oversampling Raspberry Pi Pico Seelevel-Druck Sensor SPI Temperatur Wetterstation
0 Kommentare