Temperatur, Luftfeuchtigkeit und Druck messen: BME280 mit Python am Raspberry Pi
Wenn du mit einem Raspberry Pi arbeitest und dich für Umweltdaten interessierst, bietet der BME280 Sensor eine präzise Lösung zur Messung von Temperatur, Luftfeuchtigkeit und Luftdruck. Dieser Artikel führt dich durch die notwendigen Schritte, um den Sensor mit Python auszulesen.
Warum der BME280?
Der BME280 Sensor ist bekannt für seine Genauigkeit und Zuverlässigkeit. Er ist ideal für Wetterstationen, Heimautomatisierungsprojekte und überall dort, wo präzise Umweltdaten benötigt werden. Trotz seiner Vorteile, wie kompakte Größe und geringer Stromverbrauch, kann die Installation für Anfänger eine Herausforderung sein.
Vorbereitung
Zum Auslesen des BME280 Sensors auf dem Raspberry Pi mit Python benötigst du folgende Komponenten:
- Raspberry Pi (jedes Modell sollte funktionieren, ich nutze aktuell den Raspberry Pi 4)
- Netzteil mit einem USB-C Stecker
- wenn du keinen Raspberry Pi 400 oder den Raspberry Pi nicht im Headless-Betrieb nutzen willst, benötigst du neben einem Monitor natürlich auch noch eine Tastatur und Maus
- BME280 Sensor
- ein Breadboard und entsprechende Kabel zum Testen, wenn du noch keines hast, empfiehlt sich gleich ein entsprechendes Set
- optional eine GPIO Kabel Erweiterungsplatine, da diese die Arbeit etwas erleichtert
Stelle sicher, dass ein Betriebssystem (z.B. Raspberry Pi OS) installiert ist und dein Pi über eine Internetverbindung verfügt, um die benötigten Bibliotheken herunterzuladen.
Wenn du noch keinen Raspberry Pi eingerichtet hast, dann schaue dir doch einmal meinen Beitrag “Ersteinrichtung eines Raspberry Pi mit Raspberry Pi OS” an. Solltest du mit dem Begriff Headless-Betrieb nichts anfangen können oder mehr darüber wissen wollen, dann schau dir einmal meinen Beitrag “Raspberry Pi für den Headless-Betrieb ohne Monitor, Tastatur und Maus installieren” an.
Aktivierung der I2C-Schnittstelle
Für den BME280 Sensor, der über das I2C-Protokoll kommuniziert, muss die I2C-Schnittstelle auf dem Raspberry Pi aktiviert werden.
Um I2C auf dem Raspberry Pi zu aktivieren, öffne die Raspberry Pi Konfiguration über ein Terminal-Fenster und gib folgenden Befehl ein.
1 |
sudo raspi-config |
Navigiere mit den Pfeiltasten zu den Schnittstellenoptionen (Interface Options) und wähle in dem erscheinenden Untermenü die Option “I2C” aus. Anschließend bestätigst du, dass die I2C-Schnittstelle aktiviert werden soll.
Nach der Aktivierung wirst du eventuell aufgefordert, den Raspberry Pi neu zu starten. Bestätige dies, damit die Änderungen übernommen werden.
Nach dem Neustart ist die I2C-Schnittstelle aktiviert und du kannst den BME280 Sensor über die I2C-Pins des GPIO-Headers mit dem Raspberry Pi verbinden und kommunizieren lassen.
Konfiguration des BME280 mit Python auf einem Raspberry Pi
Verdrahtung:
Verbinde VCC des Sensors mit 3.3V des Raspberry Pi (Pin 01), GND mit GND (z.B. Pin 06), SDA mit SDA (Pin 03) und SCL mit SCL (Pin 05). Die korrekte Verdrahtung ist entscheidend für die Funktion.
Installation der Bibliotheken
1. Öffne ein Terminal und führe die folgenden Befehle aus:
1 2 3 4 |
sudo apt-get update sudo apt-get install python3-pip sudo pip3 install smbus2 sudo pip3 install bme280 |
ACHTUNG!
Die derzeit offiziell bereitgestellte Bibliothek für die Beitragserstellung, die mit “sudo pip3 install bme280” installiert wird, ist fehlerhaft. Daher solltest du folgenden Befehl zu Installation einer früheren Version ausführen:
1 |
pip install pimoroni-bme280==0.0.2 |
Solltest du das Paketinstallationsprogramm PIP für Python bislang nicht installiert haben, kannst du dies mit folgendem Befehl nachholen:
1 |
sudo apt-get install python3-pip |
Eine Übersicht über wichtige und häufig verwendete Befehle stelle ich dir auf einem kleinen Spickzettel für Raspberry Pi OS Befehle zur Verfügung.
2. Python-Skript:
Erstelle ein Skript, um die Daten auszulesen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/usr/bin/python # coding=utf-8 # Python Version 3 # bme280_datenerfassung.py #------------------------- # Importieren der benötigten Module import smbus2 from bme280 import BME280 # BME280 Sensor initialisieren bus = smbus2.SMBus(1) bme280 = BME280(i2c_dev=bus) # Ausgabe der Messwerte print(f"Temperatur: {bme280.get_temperature()}°C") print(f"Luftfeuchtigkeit: {bme280.get_humidity()}%") print(f"Luftdruck: {bme280.get_pressure()} hPa") # Ausgabe der Messwerte auf 2 Nachkommastellen print(f"Temperatur: {bme280.get_temperature():.2f}°C") print(f"Luftfeuchtigkeit: {bme280.get_humidity():.2f}%") print(f"Luftdruck: {bme280.get_pressure():.2f} hPa") # Ausgabe der Messwerte auf 2 Nachkommastellen und Umrechnung in Fahrenheit print(f"Temperatur: {bme280.get_temperature() * 9/5 + 32:.2f}°F") print(f"Luftfeuchtigkeit: {bme280.get_humidity():.2f}%") print(f"Luftdruck: {bme280.get_pressure():.2f} hPa") # Ende des Programms print("Programmende") |
Nach Ausführung des Skripts werden die Sensordaten angezeigt.
Fazit
Der BME280 Sensor bietet eine einfache Möglichkeit, umfangreiche Umweltdaten zu sammeln. Mit einem Raspberry Pi und etwas Python kann man schnell und einfach auf diese Daten zugreifen und sie für verschiedene Projekte nutzen.
Bereitgestellte Dateien und Links
Die Fritzing Projektdatei steht auch auf meiner Fritzing Projektseite auf diesem Blog zum Download zur Verfügung.
Wenn du dir das Abtippen oder Kopieren des Codes sparen möchtest, steht dir der Code als Textdatei zum Download bereit.
Gib im Terminal folgenden Befehl ein, dieser lädt die Textdatei herunter und speichert diese als Python-Datei ab.
1 |
wget -O messprogramm.py https://webnist.de/downloads/bme280_datenerfassung.txt |
Hallo,
danke für die gute Dokumentation.
Die Temperatur wird bei mir jedoch – reproduzierbar – ca. 3°C (3 Grad Celsius) zu hoch angezeigt ggü. “richtigem” Thermometer.
Kann das sein? Und wie kann man das ggf. im python Schript korrigieren?
LG
Roland
Hallo Roland,
vielen Dank für Dein Feedback. Es ist durchaus möglich, dass der Sensor nicht ganz korrekte Werte liefert. Die Korrektur im Skript ist möglich. Ersetze den Code nach dem Block # BME280 Sensor initialisieren mit:
# Differenzwert für die Temperaturanpassung (hier 3°C weniger)
temp_anpassung = 3
# Ausgabe der Messwerte mit Temperaturanpassung
print(f”Temperatur: {bme280.get_temperature() – temp_anpassung }°C”)
print(f”Luftfeuchtigkeit: {bme280.get_humidity()}%”)
print(f”Luftdruck: {bme280.get_pressure()} hPa”)
# Ausgabe der Messwerte auf 2 Nachkommastellen mit Temperaturanpassung
print(f”Temperatur: {bme280.get_temperature() – temp_anpassung:.2f}°C”)
print(f”Luftfeuchtigkeit: {bme280.get_humidity():.2f}%”)
print(f”Luftdruck: {bme280.get_pressure():.2f} hPa”)
# Ausgabe der Messwerte auf 2 Nachkommastellen und Umrechnung in Fahrenheit mit Temperaturanpassung
print(f”Temperatur: {(bme280.get_temperature() – temp_anpassung) * 9/5 + 32:.2f}°F”)
print(f”Luftfeuchtigkeit: {bme280.get_humidity():.2f}%”)
print(f”Luftdruck: {bme280.get_pressure():.2f} hPa”)
# Ende des Programms
print(“Programmende”)
Viele Grüße
Wolfgang
Kleiner Hinweis, alle Kommentare werden moderiert.
Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.