GY-BME280 Barometric sensor for temperature, humidity and air pressure - AZ-Delivery

GY-BME280 Barometrischer Sensor für Temperatur, Luftfeuchtigkeit und Luftdruck  

Hinter dem heutigen Adventskalendertürchen Nummer 11 finden Sie den Sensor BME280 gleich im 5er-Paket. Mit ihm können die Temperatur (-40 bis +85 °C), die Luftfeuchtigkeit (0 bis 100 %RH) und der Luftdruck (300 bis 1100 hPa) gemessen werden. Er kann mit 3,3V sowie mit 5V betrieben werden. Es handelt sich hierbei um die Variante mit I²C-Schnittstelle. Dafür benötigt die Komponente eine Adresse. Diese ist standardmäßig 0x76. Über die drei Lötpads unterhalb des kleinen Metallkästchens (das den eigentlichen Sensor darstellt), kann die Adresse auf 0x77 verändert werden:

 

Zwischen dem linken und mittleren Pad sollte eine (schlecht sichtbare) Verbindung bestehen. Diese muss mit einer scharfen, feinen Klinge getrennt werden. Anschließend muss dann das mittlere mit dem rechten Pad verbunden werden.

Wenn Sie sich nicht sicher sind, welche Adresse eingestellt ist, nutzen Sie einen I2C-Scanner-Sketch in der Arduino-IDE. Die Wire-Bibliothek (die für die I²C-Schnittstelle zuständig ist), liefert solch einen Sketch mit. Laden Sie ihn auf Ihren Mikrocontroller und schließen den Sensor wie folgt an:


oder:


Die Sensoren werden mit Headerpins geliefert, die allerdings noch angelötet werden müssen.

Die I²C-Pins der einzelnen Mikrocontroller lauten wie folgt:

µC

SDA

SCL

Nano

A4

A5

Uno

A4 oder SDA (GPIO19)

A5 oder SCL (GPIO18)

Mega

20

21

Leonardo / Micro

2

3

ESP32

GPIO 21

GPIO 22

ESP8266

GPIO 4 (D2)

GPIO 5 (D1)


Wie Sie einen Nano, Uno, ESP8266 oder ESP32 in Betrieb nehmen und einen Sketch ausführen, wissen Sie bereits aus den vergangenen Kalendertürchen.

Im Seriellen Monitor sollte dann folgendes angezeigt werden:


Der Sensor wurde mit der I²C-Adresse 0x76 erkannt. Wir können also mit ihm kommunizieren.

Um nun die Sensordaten für Temperatur, Luftfeuchtigkeit und Luftdruck zu erhalten, nutzen wir eine der Bibliotheken, die über den Bibliotheksverwalter installiert werden können. Es bietet sich an, die Adafruit BME280 Bibliothek zu verwenden:

 


Hinweis: Sie benötigt zusätzlich die Adafruit Unified Sensor Bibliothek, die normalerweise gleich mit installiert wird. Zumindest sollte man einen Hinweis darauf erhalten.

Sie finden nach der Installation unter Datei->Beispiele->Adafruit BME280 Library den Sketch bme280test.

Passen Sie dort die Baudrate für den Seriellen Monitor im setup() an:

Serial.begin(115200);

Es ist möglich, dass der Sensor so noch nicht erkannt wird:

 

 

Dann ergänzen Sie bitte folgende Zeile:

status = bme.begin();

in:

status = bme.begin(0x76, &Wire);

Geben Sie hier die Adresse ein, die Sie mit dem I²C-Scanner ermittelt haben.

Sie sollten nach dem erneuten Upload folgende Ausgabe erhalten:

 

 

Temperatur, Luftdruck und Luftfeuchtigkeit können nun ermittelt werden. Wie Sie sehen, wird noch ein weiterer Wert ausgegeben. Dabei handelt es sich um die Höhe über dem Meeresspiegel (Approx. Altitude). An meinem Standort sollten dort allerdings ca. 40 m angezeigt werden. Um das zu korrigieren, müssen Sie herausfinden, welcher Luftdruck in Ihrer Umgebung herrscht. Diese Angaben liefern die Wetterstationen in Ihrer Nähe. Besuchen Sie dafür z.B. die Webseite des Wetterdienstes und suchen dort über die Postleitzahl Ihren Standort. Klicken Sie dann auf den Reiter "Messwerte". In der Tabelle finden Sie die Spalte "Luftdruck". Kopieren Sie diesen Wert und fügen Ihn in den Quellcode in folgende Zeile (oben) ein:

#define SEALEVELPRESSURE_HPA (1013.25)

Meine aktuellen Wetterdaten zeigen einen Luftdruck von 1017.5 hPa. Füge ich diesen Wert in die Zeile ein:

#define SEALEVELPRESSURE_HPA (1017.5)

Erhalte ich die korrekte Höhe, auf der ich mich befinde:

 

 

Um herauszufinden, ob dieser Wert stimmt, können Sie z.B. diese Webseite besuchen und dort Ihren Standort eingeben. Es wird Ihnen dann neben den Koordinaten auch die Höhe über Meeresspiegel angegeben. Der Luftdruck ändert sich ständig. Der Wert sollte daher regelmäßig aktualisiert werden.

Wenn Sie sich intensiver mit der barometrischen Höhenmessung beschäftigen möchten, könnte u.a. dieser Artikel für Sie interessant sein.

Um Ihrer Kreativität ein wenig auf die Sprünge zu helfen, habe ich hier noch einige Projektideen im Zusammenhang mit dem BME280 Sensor. Natürlich als Thermometer, z.B. mit einem angeschlossenen Display. Vielleicht ein E-Paper-Display und einer geringen Aktualisierungsrate. Das spart Energie. Mit einem WLAN-fähigen Mikrocontroller können Sie die Werte auch online abrufen. Vielleicht besitzen Sie ein Gartenhäuschen und möchten von zu Hause aus die Klimatisierung überwachen. Sie können auch Experimente mit Unter- oder Überdruck durchführen, z.B. im Physikunterricht. Um die Höhenmessung zu nutzen, könnten Sie die Komponenten an einer Drohne oder einem Wetterballon befestigen. Achten Sie auf die korrekten Höhenberechnungen. Ich habe einmal eine Schaltung für eine Rakete gebaut, die die Telemetrie-Daten auf einer SD-Karte während des Fluges aufzeichnet.

Wenn Sie nun mehrere Experimente gleichzeitig mit nur einem Mikrocontroller überwachen möchten, wird es etwas problematisch. Wie Sie oben bereits gelesen haben, können nur zwei I²C-Adressen eingestellt werden. Somit könnte man auch nur zwei Sensoren verwenden. Es gibt die Möglichkeit, mit den Bibliotheken Softwire und SoftwareWire andere Pins für die I²C-Verbindung zu verwenden. Leider sind diese nicht mit den BME-Bibliotheken kompatibel.

Eine andere Möglichkeit ist, einen I²C-Multiplexer zu verwenden. Dort können acht Geräte angeschlossen werden. In meinem Halloween-Blogbeitrag hatte ich diesen bereits vorgestellt.

Hinweis: Denken Sie daran, dass die Kabellängen für die I²C-Verbindung stark eingeschränkt sind.

In den Beispielen für den ESP8266 ist ein HTTP-Server-Sketch enthalten. Den habe ich für diesen Fall so modifiziert, dass die Daten des BME280 angezeigt werden. Ich habe Teile des Quellcodes aus dem oben gezeigten bme280test-Sketch dort eingefügt. Als Server nutze ich einen ESP8266 D1 Mini:


Den aktualisierten Sketch können Sie hier herunterladen.

Tragen Sie dort Ihre WLAN-Daten für SSID und PASSWORT ein. Außerdem sollten Sie für die korrekte Höhenangabe den Luftdruck aktualisieren. Wenn Sie den Sketch hochgeladen haben, sehen Sie im Seriellen Monitor die IP-Adresse. Diese können Sie dann in einen Webbrowser eines Gerätes eingeben, das sich im gleichen WLAN-Netzwerk befindet. Es werden dann die Klimadaten ausgegeben:

 

Für die Ausgabe wird in der Funktion handleRoot() eine formatierte Zeichenkette zusammengesetzt. Für die Ausgabe des Grad-Zeichens und der Umlaute muss man auf die erweiterte ASCII-Tabelle zurückgreifen.

Um nun die Raspberry Pi User nicht auszuschließen, möchte ich noch kurz zeigen, wie der BME280 Sensor dort verwendet werden kann. Der Raspi verfügt ebenfalls über eine I²C-Schnittstelle, die allerdings in der raspi-config eingeschaltet werden muss:

sudo raspi-config

dann über die Interface Options I2C aktivieren und den Raspi neustarten.

Schließen Sie den Sensor wie folgt an:

 


Adafruit bietet eine Python-Bibliothek für den Raspi an, die man auf Github findet. Dort ist auch beschrieben, wie man sie installiert:

pip3 install adafruit-circuitpython-bme280

Python 3 und Pip müssen dafür installiert sein.

Anschließend können Sie ein Python-Script erstellen und den Beispielcode übertragen. Kommentieren Sie für die I²C-Adresse 0x76 die folgende Zeile ein, in dem Sie die Raute am Zeilenanfang entfernen:

bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c, address=0x76)

Die andere Zeile nutzt die Adresse 0x77 und muss dafür auskommentiert werden:

#bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)

In dieser Zeile tragen Sie wieder den aktuellen Luftdruck ein:

bme280.sea_level_pressure = 1013.25

Speichern Sie das Script z.B. als bme280test.py und starten es aus dem Terminal heraus:

python3 bme280test.py

Im aktuellen Raspbian Buster Desktop gibt es eine Python Entwicklungsumgebung namens Thonny Python. Darin kann man auch sehr einfach Scripte schreiben und ausführen.

Eine alternative Lösung für die Nutzung des BME280 am Raspberry Pi finden Sie hier.

 

Wir wünschen eine frohe Adventszeit.

Andreas Wolter

für AZ-Delivery Blog

Specials

1 comment

Hans-Henning Fleßner

Hans-Henning Fleßner

ich habe versucht, den BME mit einem ESP32 zu installieren. Benutzt habe ich Visual Studio Code mit PlatformIO. Ich habe die neueste Version der Adufruit Library (Version 2.2.2) geladen. Bei Übersetzen bringt der Compiler eine Fehlermeldung. Es geht um eine nicht erlaubte Typumwandlung in einer Datei , die im Namen “SPI” führt. Man verwendet aber für diesen Sensor I2C. Ich wollte dann aber nicht Stück für Stück auf alte Versionen zurückgehen. Ich bin gleich auf eine sehr alte Version (1.07) gegangen, mit des es geklappt hat, das Programm zu übersetzen.
Das Programm erkannte den Sensor nicht. Ein I2C-Scanner fand aber den Sensor unter der Adresse 0×76. Als ich das eigentliche Programm dann wieder geladen habe, wurde erstaunlicherweise der Sensor gefunden und alles funktioniert einwandfrei.

Leave a comment

All comments are moderated before being published

Recommended blog posts

  1. ESP32 jetzt über den Boardverwalter installieren - AZ-Delivery
  2. Internet-Radio mit dem ESP32 - UPDATE - AZ-Delivery
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1 - AZ-Delivery
  4. ESP32 - das Multitalent - AZ-Delivery