BME280 (Temperatur, Feuchtigkeit, Luftdruck) – ESP32 Tutorial

 


 

Einleitung

In diesem Tutorial zeigen wir dir Schritt für Schritt, wie du den BME280 mit einem ESP32 aufbaust und programmierst. Du lernst, wie du die erforderlichen Komponenten miteinander verbindest, den Schaltungsaufbau realisierst und den ESP32 in der Arduino IDE programmierst. Wir erklären dir ausführlich den Code und zeigen dir, wie du die Anwendung in Betrieb nimmst. Am Ende dieses Tutorials bist du in der Lage, eigene Umgebungsdaten mit dem BME280 zu erfassen.

 

 

Verschaltung

Teile

1x ESP32
1x BME280 Sensor
4x Verbindungskabel

Bibliotheken

Adafruit_BME280

Code

 

Übersicht

Für unser Projekt, einen BME280 mit einem ESP32 zu betreiben, benötigst du nur wenige Komponenten. Der BME280 ist ein vielseitiger Sensor, der nicht nur Temperatur, sondern auch Luftfeuchtigkeit und Luftdruck messen kann – perfekt also für detaillierte Umgebungsdaten. Der ESP32 ist die ideale Wahl als Mikrocontroller, da er WLAN-Fähigkeiten direkt integriert hat, was uns später ermöglicht, die gesammelten Daten einfach ins Internet zu senden.
Hier ist eine Auflistung der benötigten Teile:

1x ESP32
1x BME280 Sensor
4x Verbindungskabel

 

Pinout des BME280

Der BME280 Sensor ist sehr übersichtlich und kommt mit nur vier Pins aus. Diese Pins sind für die Stromversorgung und die Kommunikation mit deinem ESP32 Mikrocontroller zuständig. Die Kommunikation läuft über das I2C-Protokoll, was bedeutet, dass du nur zwei Datenleitungen für den Austausch von Informationen benötigst.
Hier ist eine kurze Erklärung der einzelnen Pins:

VIN: Dies ist der Spannungseingang für den Sensor.
GND: Dies ist der Masseanschluss.
SCL: Dies ist die Takleitung für die I2C-Kommunikation (Serial Clock Line).
SDA: Dies ist die Datenleitung für die I2C-Kommunikation (Serial Data Line).

Auf der Vorderseite des BME280-Moduls findet sich einerseits der tatsächliche BME280-Sensor. Zudem finden sich hier auch Kontakte, mit welchen die I2C-Adresse geändert werden kann.
Klassisch ist die I2C Adresse auf 0x76 eingestellt. Durch eine Änderung des Kontakts kann diese auf 0x77 geändert werden. Das ist zum Beispiel wichtig, wenn man mehrere BME280-Sensoren verwenden möchte.

Auf der Rückseite des Moduls finden sich Kondensatoren und Widerstände. Außerdem findet sich hier ein 3,3V Pegelwandler, damit das Modul auch mit höheren externen Spannungen betrieben werden kann.

 



 

Temperatur, Feuchtigkeit, Luftdruck, Höhe – Messwerte des BME280

Der BME280 ist ein vielseitiger Sensor, der nicht nur Temperatur, sondern auch Luftfeuchtigkeit und Luftdruck präzise messen kann. Aus den Luftdruckwerten lässt sich zudem die Höhe ableiten. Hier erfährst du mehr über die Messbereiche und Genauigkeiten der einzelnen Werte:

 

Temperatur messen
Der BME280 kann Temperaturen von -40°C bis 85°C messen. Im Bereich von 0 bis 65°C beträgt die Genauigkeit ±1,0°C; außerhalb dieses Bereichs sinkt die Genauigkeit auf ±1,5°C. Beachte, dass diese Temperaturmessung intern zur Kalibrierung der Luftdruck- und Feuchtigkeitssensoren verwendet wird. Da sich der Sensor selbst erwärmt, ist die gemessene Temperatur in der Regel etwas höher als die tatsächliche Temperatur. Sollte dies für dein Projekt entscheidend sein, vergleiche die gemessene Temperatur mit der tatsächlichen Temperatur und wende gegebenenfalls einen Offset an.
Feuchtigkeit messen
Der BME280 kann die relative Feuchtigkeit in einem Bereich von 0 bis 100% mit einer Genauigkeit von ±3% messen. Laut Datenblatt kann der Sensor bei Temperaturen von 0 bis 60°C bis zu 100% Feuchtigkeit messen. Die maximal messbare Feuchtigkeit nimmt jedoch bei extrem hohen und niedrigen Temperaturen ab.

 

Luftdruck messen
Der BME280 kann den Luftdruck zwischen 300 Pa und 1100 hPa mit einer absoluten Genauigkeit von ±1 hPa messen. Im Temperaturbereich von 0 bis 65°C wird die volle Genauigkeit erreicht, was zu einer Höhenmessung von etwa ±1 Meter führt. Außerhalb dieses Bereichs sinkt die Genauigkeit auf 1,7 hPa.

 

Höhe / Elevation berechnen
Der BME280 kann den Luftdruck so präzise messen (geringes Höhenrauschen von 0,25 m), dass er auch als Höhensensor mit einer Genauigkeit von ±1 Meter verwendet werden kann.
Bevor wir fortfahren, ist es wichtig, den Unterschied zwischen absoluter und relativer Höhe zu verstehen. Der Begriff „absolute Höhe“ bezieht sich auf die Höhe über dem Meeresspiegel (MSL), während „relative Höhe“ sich auf die Höhe über dem Boden (AGL) bezieht.
Beachte, dass der BME280 die Höhe nicht direkt messen kann, sondern diese mithilfe von Luftdruckmessungen schätzt. Da der BME280 sehr gut darin ist, den Luftdruck zu messen, kann er die relative Höhe genau berechnen. Wenn du beispielsweise die Höhe eines Objekts auf einem Tisch kennst und es auf den Boden stellst, zeigt der BME280 eine Abnahme der Höhe um etwa 60 cm (2 Fuß) an.
Wenn du jedoch versuchst, die absolute Höhe zu messen, wird es etwas komplizierter, da der BME280 den aktuellen Luftdruck auf Meereshöhe kennen muss. Um eine genaue absolute Höhenmessung zu erhalten, wird im Beispielcode die Konstante SEA_LEVEL_PRESSURE bereitgestellt, die du mit dem aktuellen Luftdruck auf Meereshöhe an deinem Standort aktualisieren solltest.

 



 

Hardware Aufbau / Verkabelung / Schaltungsaufbau

Der Aufbau der Hardware für unseren BME280 Temperatursensor mit dem ESP32 ist denkbar einfach und schnell erledigt. Du musst lediglich vier Verbindungen zwischen dem ESP32 und dem BME280 herstellen, um die Stromversorgung und die I2C-Kommunikation zu gewährleisten. Achte darauf, dass du die Pins korrekt verbindest, damit die Datenübertragung reibungslos funktioniert.
Verbinde den 3,3V-Pin deines ESP32 mit dem Vin-Pin des BME280. Den GND-Pin des ESP32 schließt du an den GND-Pin des Sensors an. Für die I2C-Kommunikation verbindest du den D22-Pin des ESP32 mit dem SCL-Pin des BME280 und den D21-Pin des ESP32 mit dem SDA-Pin des Sensors.

ESP32 3,3V → BME280 Vin-Pin

ESP32 GND → BME280 GND

ESP32 D22 → BME280 SCL-Pin

ESP32 D21 → BME280 SDA-Pin

Eine korrekte und sorgfältige Verdrahtung ist entscheidend, damit dein ESP32 die Signale des BME280 ordnungsgemäß empfangen kann. Sobald du diese Verbindungen erfolgreich hergestellt hast, bist du bereit, mit der Programmierung fortzufahren. Im nächsten Abschnitt werden wir detailliert besprechen, wie du die benötigte Bibliothek einbindest und den Code für deinen BME280 Sensor programmierst.

 



 

Software Programmierung des BME280 mit dem ESP32

Nachdem der Hardware-Aufbau erfolgreich abgeschlossen ist, widmen wir uns jetzt der Programmierung deines ESP32. In diesem Abschnitt gehen wir detailliert auf die wesentlichen Schritte zur Codeerstellung ein und erläutern die wichtigsten Funktionen, die du verwenden wirst.

Schritt 1: IDE Projekt
Zuerst öffnest du die Arduino-IDE und erstellst ein neues Projekt. Falls du die Arduino-IDE noch nicht installiert hast, findest du unter folgendem Link eine Anleitung dazu:

>

Nachdem du die Arduino-IDE gestartet hast, legst du ein neues Projekt an, indem du auf „Datei“ und dann auf „Neu“ klickst. Daraufhin öffnet sich ein neues Sketch-Fenster, in das du deinen Code eingeben kannst.

Schritt 2: Bibliothek einbinden
Um die Daten des BME280 auszulesen, musst du eine passende Bibliothek in deine Arduino-IDE integrieren. Gehe dazu in der Menüleiste auf „Sketch“ und wähle „Bibliothek einbinden“ aus. Klicke anschließend auf „Bibliotheken verwalten…“.
Hier suchst du nach der Bibliothek „Adafruit_BME280“ und installierst sie. Diese Bibliothek stellt alle notwendigen Funktionen bereit, um die Temperatur-, Feuchtigkeits- und Druckdaten deines BME280 Sensors zu erfassen und auszulesen.

[Code2]

Schritt 3: Initialisierung
Vor dem void setup()-Abschnitt deklarieren wir wichtige Variablen und Objekte, die für die Kommunikation mit dem BME280 und die Speicherung der Messwerte benötigt werden. Die Zeile #include bindet die notwendige Bibliothek ein. #define SEALEVELPRESSURE_HPA (1013.25) definiert einen Referenzwert für den Luftdruck auf Meereshöhe, der für die Höhenberechnung verwendet wird. Adafruit_BME280 bme; erstellt ein Objekt namens bme, über das wir später auf die Sensorfunktionen zugreifen. Schließlich deklarieren wir float Variablen für Temperatur, Luftfeuchtigkeit, Druck und Höhe, um die gelesenen Werte zu speichern.
[Code3]

Schritt 4: Void Setup
Im void setup()-Bereich initialisieren wir die serielle Kommunikation und den BME280 Sensor selbst. Serial.begin(9600); startet den seriellen Monitor mit einer Baudrate von 9600, sodass du die Messwerte später auf deinem Computer sehen kannst. bme.begin(0x76); initialisiert den BME280 Sensor und gibt dabei die I2C-Adresse 0x76 an, unter der der Sensor erreichbar ist. Dieser Schritt ist entscheidend, damit der ESP32 korrekt mit dem Sensor kommunizieren kann.
[Code4]

Schritt 5: Loop Setup
Der void loop()-Abschnitt enthält den Hauptteil des Programms, der kontinuierlich ausgeführt wird. Hier liest der ESP32 die aktuellen Werte vom BME280 Sensor aus. bme.readTemperature(), bme.readHumidity(), bme.readPressure() und bme.readAltitude() sind die Funktionen, die die jeweiligen Messwerte abrufen und in die vorher definierten Variablen schreiben. Anschließend werden diese Werte über den seriellen Monitor ausgegeben, um sie sichtbar zu machen. Eine kleine Pause von delay(1000); sorgt dafür, dass die Messwerte einmal pro Sekunde aktualisiert werden.
[Code5]

 

Gesamter Code

Hier zur besseren Übersicht der gesamte Programmier-Code für deinen BME280 und ESP32:
[Code6]

 

Ausführung / Anwendung des BME280 mit dem ESP32

Nachdem du den Code in die IDE eingegeben hast, muss er nun kompiliert und auf deinen ESP32 übertragen werden, damit die Daten des BME280 Sensors ausgelesen werden können. Hier ist die Vorgehensweise:
Schritt 1: Kompilieren (Haken)
Klicke in der Arduino-IDE auf das Häkchen-Symbol (Verifizieren/Kompilieren). Dieser Schritt prüft deinen Code auf Fehler und übersetzt ihn in eine maschinenlesbare Form.
Schritt 2: Hochladen (Pfeil)
Als Nächstes klickst du auf den Pfeil nach rechts (Hochladen). Dadurch wird der kompilierte Code auf deinen ESP32 übertragen. Achte darauf, dass dein ESP32 korrekt über USB mit deinem Computer verbunden ist und der richtige COM-Port in der Arduino-IDE ausgewählt ist.
Schritt 3: Serieller Monitor öffnen
Sobald der Upload abgeschlossen ist, öffne den Seriellen Monitor. Diesen findest du in der oberen rechten Ecke der Arduino-IDE als Lupen-Symbol.
Schritt 4: Werte werden angezeigt
Auf dem Seriellen Monitor sollten nun die vier Messwerte deines BME280 Sensors angezeigt werden: Temperatur, Luftfeuchtigkeit, Luftdruck und die ungefähre Höhe.