BME280 und BMP280 mit Python3 auslesen

  • Ich habe mir mal die Mühe gemacht, ein Script aus dem Netz zu klauen und auf Python3 umzuschreiben, damit man sich nicht noch mit Python2 rumschlagen muss:

    bmp280_auslesen.py

    Code
    #!/usr/bin/env python3
    import bme280_python3
    temperatur,druck, x = bme280_python3.readBME280All()
    print ("Temperatur : ", temperatur, "°C")
    print ("Luftdruck: ", int(druck), "hPa")

    Ausführbar machen mit chmod +x bmp280_auslesen.py

    Ergebnis:

    Code
    Temperatur :  18.42 °C
    Luftdruck:  978 hPa

    bme280_python3.py

    Der BME280 kann auch noch die Luftfeuchtigkeit messen, kostet aber bissl mehr.

    Bezugsquelle:

    https://de.aliexpress.com/item/33052320902.html

    Man kann natürlich auch die bme280_python3.py ausführbar machen und direkt aufrufen.

    Ausgabe ist in dem Fall:

    Code
    Chip ID     : 96
    Version     : 0
    Temperatur :  18.4 °C
    Luftdruck :  978 hPa
    Luftfeuchtigkeit : 53.46 %
  • Bin mal so frei deinen Code bisschen zu korrigieren


    • Einrückungen mit 4 Leerzeichen
    • Funktionsnamen klein und mit Unterstrich
    • Konstanten groß schreiben
    • 2 Funktionen mit 2 Leerzeilen trennen
    • Zwischen == jeweils zuvor und danach ein Leerzeichen
    • Zwischen Variablen einer Rückgabe ein Leerzeichen
      temperature,pressure,humidity = readBME280All() -->> temperature, pressure, humidity = readBME280All()
    • Variablen in Funktionen werden klein geschrieben
    • Bei return kannst du auch ohne () mehrere Werte zurückgeben, das wird sowieso zum Tuple
    • Zwischen Operatoren und Vairablen/Zahlen gehört ein Leerzeichen
    • Wenn man Variablen nummieriert, bietet es sich an eine Liste zu verwenden, das hab ich jetzt aber nicht korrigiert
  • https://www.jetbrains.com/pycharm/


    Zum einen kann man bei PyCharm (und auch vielen anderen Editoren) auch Tab verwenden, die wandeln das dann automatisch in 4 Leerzeichen um.

    Auch gibts dort einen Punkt mit "Auto Indent Lines"

    Leider gab es keinen Punkt die Groß Kleinschreibung für alle automatisch zu beheben, die musste ich alle einzeln anklicken

    Auch gibts hier eine schöne Übersicht wo was nicht passt


  • Hey, erstmal vielen Dank für den Code... Habe genau sowas schon länger gesucht.

    Jetzt habe ich ihn kopiert und ausgeführt mit

    Code
    while True:
        print(main())

    und bekomme immer diesen Fehler:

    Code
    line 8
    bus = smbus.SMBus(1)
    No such file or directory

    Kannst du mir bitte sagen was ich da machen muss?

  • Das ist keine Python Fehlermeldung. Benutzt du überhaupt Python, oder probierst du das gerade mit der Shell direkt auszuführen? Wie sieht das Kommando in der Shell und das *komplette* Skript von *dir* aus?

  • Das ist keine Python Fehlermeldung. Benutzt du überhaupt Python, oder probierst du das gerade mit der Shell direkt auszuführen? Wie sieht das Kommando in der Shell und das *komplette* Skript von *dir* aus?

    hey, wie ich beschreiben habe hab ich einfach das Skript kopiert und unten noch

    Python
    #!/usr/bin/env python3
    import smbus
    import time
    from ctypes import c_short
    from ctypes import c_byte
    ...


    Code
    while True:
        print(main())

    hinzugefügt.

    Ich habe das ganze in PyCharm laufen lassen, da ich später in mein anderes Programm integrieren möchte :)

  • Hallo,


    was erhoffst du dir davon, dass du dem Skript diese Zeilen hinzugefügt hast?


    Du hast PyCharm auf deinem Raspberry oder hast du den Sensor an deinen PC anschließen können oder verstehe ich dich gerade falsch?


    So wie ich den ersten Beitrag von fred0815 und das Skript interpretiere kann man es kopieren, speichern, Sensor anschließen und wenn die Module installierst sind sollte es funktionieren.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Habe mir vor wenigen Tagen PyCharm auf meinem Raspberry installiert, da ich mit was anderem leider einfach nicht klarkomme

  • Hallo,


    öffne mal eine neue, leere Datei. Kopiere in diese den Code von fred0815 bzw. die verbesserte Version von Hofei und speichere sie zum Beispiel unter '/home/pi/Documents/' mit dem Name 'bme280_sensor.py'


    Dann öffne ein Terminal, falls du das bis jetzt ohne Terminal erledigt hast. Jetzt gibst du folgendes ein:

    chmod +x /home/pi/Documents/bme280_sensor.py

    python3 /home/pi/Documents/bme280_sensor.py


    Jetzt sollten die Sensorwerte im Terminal erscheinen. Wenn das funktioniert kannst du den Code auf dein Projekt anpassen.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • vielen dank für die Antwort, allerdings kommt bei mir immer die Fehlermeldung

    Code
    File "/home/pi/Documents/bme280_sensor.py", line9, in <module>
        BUS = smbus.SMBus(1)
    FileNotFoundError: [Errno2] No such file or directory 

    kann es vielleicht sein, dass ich es falsch verkabelt habe?

  • Also bei mir läuft es selbst mit falschen Einrückungen im Code durch:

    Ausgabe:

    Code
    Temperatur :  19.29 °C
    Luftdruck :  984 hPa
    Luftfeuchtigkeit : 46.49 %

    Ist der smbus installiert / aktiviert ?

    Code
    python-smbus - Python bindings for Linux SMBus access through i2c-dev
    python3-smbus - Python 3 bindings for Linux SMBus access through i2c-dev
  • Also bei mir läuft es selbst mit falschen Einrückungen im Code durch:

    Ausgabe:

    Code
    Temperatur :  19.29 °C
    Luftdruck :  984 hPa
    Luftfeuchtigkeit : 46.49 %

    Ist der smbus installiert / aktiviert ?

    Code
    python-smbus - Python bindings for Linux SMBus access through i2c-dev
    python3-smbus - Python 3 bindings for Linux SMBus access through i2c-dev

    vielen dank, ich habe mittlerweile auch herausgefunden woran es liegt, allerdings habe ich keine Ahnung wie ich das fixen sollte

  • Vorraussetzung ist natürlich, dass I2C mit sudo raspi-config aktiviert wurde, smbus mit sudo apt install python3-smbus installiert wurde, GND, SDA an BCM 2, SCL an BCM 3,und 3,3 Volt verbunden sind.

    i2cdetect -l listet dir den Bus auf, den kannst du dann auslesen, mit i2cdetect -y 1

    Standardmäßig sollte der BME280 76 als Adresse haben.

    smbus.SMBus(1) für neuere Pis, smbus.SMBus(0) für die älteren.

    Sollte es dann immernoch Probleme geben, sieh mal in /etc/modules und in die /etc/modprobe.d/*.conf.

    Nochmal als BME280_Schleife.py :

  • Hallo,


    was ist den dein Ziel? Willst du den Luftdruck in einer bestimmten Höhe bestimmen?

    Also du gibst zum Beispiel xx Meter über Meeresspiegel ein und nimmst eine Referenztemperatur(z.B. die des BME280) und es wird dir der Luftdruck ausgegeben?


    Suche gerade nach einer Verwendung für das was du vorhast und komme nicht drauf ^^


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Hallo Fred0815,


    schau doch mal in meinen Thread zum BME280 aus dem letzten Jahr. Da sind eigentlich alle Formeln drin, um die vollen Möglichkeiten des BME280 auszuschöpfen. Soweit ich mich entsinnen kann, ist es damit möglich, die Höhe auf 2,3 cm genau zu bestimmen.

    Soweit ich mich entsinne, spuckt der Sensor nicht den aktuellen Druck aus, sondern den auf 0m über NN zurückgerechneten (also den sog. meteorologischen) Druck. Den musst Du immer auf die aktuelle Höhenlage umrechnen. Deswegen steht in meinem Quellcode auch die Höhenlage - nur dadurch kann ich den aktuellen Druck am Messort erhalten.


    Beste Grüße 20+ km nordwärts


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Edited once, last by Andreas ().

  • Wollte die Temperatur messen und im Notfall eine Frostwarnung an mich per Email schicken...

    Hat sich aber erledigt :)