Donnerstag, 22. August 2019

Raspberry Pi - Sensor BME280 Temperatur, Luftfeuchtigkeit, Luftdruck

Nachdem ich mit dem Ergebnis vom DHT22 Sensor nicht zufrieden war, erfolgt mit dem BME280 von Bosch ein erneuter Versuch.

Der Sensor BME280 misst Temperatur, Luftfeuchtigkeit, Luftdruck und Höhe. In dem Beitrag stelle ich die Anbindung und das Auslesen des Sensors vor.



Wie auch beim Anschluss des OLED Display (SSD1306) https://sebastianhemel.blogspot.com/2018/05/raspberry-pi-oled-display-ssd1306-i2c.html erfolgt auch die Ansteuerung des BME280 per I2C. Daher müssen auch hier die folgenden Einträge hinzugefügt werden:

sudo nano /etc/modules

i2c-bcm2708
i2c-dev


Jetzt muss noch die Konfigurationsdatei angepasst werden:
sudo vi /boot/config.txt

dtparam=i2c_arm=on #entfernen
dtparam=i2s=on     #entfernen
dtparam=i2c1=on

Jetzt muss noch ein reboot erfolgen, damit die Einstellungen übernommen werden:
sudo reboot 

Jetzt kann der Sensor analog dem OLED Display angeschlossen werden:


Damit man jetzt die Verbindung testen kann, sollte noch das folgemde Packet installiert werden:
sudo apt-get install i2c-tools

Mit dem folgenden Befehl kann überprüft werden, ob die Verbindung zum Sensor (Adressen 0x76 oder 0x77) Display funktioniert bzw. verbunden ist:
i2cdetect -y 1

Mit Hilfe des folgenden Scripts von Matt Hawkins, kann man den Sensor direkt abfragen (ggf. muss noch sudo apt-get install python-smbus -y installiert werden) oder auch die Befehle in seinen eigenen Python Scripts verwenden.

wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bme280.py
python bme280.py

import bme280
...
temperature,pressure,humidity = bme280.readBME280All()
print "Temperature : ", temperature, "C"
print "Pressure : ", pressure, "hPa"
print "Humidity : ", humidity, "%"



Um die Daten jetzt auch im OLED I2C Display anzeigen zu können, habe ich folgende Methode hinzugefügt:

def GetTempBME280():
    temperature,pressure,humidity = bme280.readBME280All()
    print "Temperature : ", temperature, "C"
    print "Pressure : ", pressure, "hPa"
    print "Humidity : ", humidity, "%"
    time.sleep(0.2)
    value = "{:5.1f} °C {:.0f} %".format(float(temperature), float(humidity))
    value = unicode(value, 'utf-8')

    return value


wget http://www.shemel.de/download/raspberry/OLEDdisplayTempBME280.py


Alternativ kann man den Sensor auch mit der RPi.bme280 library ansteuern.
sudo pip install RPi.bme280

4 Kommentare:

  1. Und wie sieht dein Vergleichsfazit aus?

    AntwortenLöschen
  2. Also ich persönlich kann wirklich nur den Sensor BME280 empfehlen. Läuft seit fast 3 Jahren sehr zuverlässig!
    Der DHT22 macht da deutlich mehr Probleme und liefert auch nicht so genaue Werte.

    AntwortenLöschen
  3. Bei mir ist immer Luftfeuchtigkeit 0,00% warum ?

    Alle anderen Werte sind Normal und vorhanden

    AntwortenLöschen
  4. Wurde schon mal ein anderer Sensor getestet? Ich hatte auch schon mal das Problem, dass er direkt ab Werk defekt war.

    AntwortenLöschen