Auslesen eines BMP180 ohne Adafruit-Bibliothek

  • Hallo zusammen,

    nachdem wir/ich jetzt einen funktionierenden BMP180 habe(n), soll er ausgelesen werden. Im Datenblatt findet sich auf Seite 15 ein sogar für mich verständliches Diagramm, wie der Auslesevorgang abzulaufen hat. Weiterhin finde ich dieses Tutorial recht hilfreich sowie das Python-Script zum Auslesen der Temperatur.

    Was ich kann: Ich kann mit Python in die Register der Sensors schreiben und sie auslesen und ich begreife auch, welchem Zweck das dient.
    Was ich nicht kann / nicht begreife: Wie verarbeite ich den Inhalt der Register weiter? Was mir schleierhaft ist: Wenn ich das obige Python-Script richtig interpretiere, liest es immer nur ein 8-Bit-Register aus, obwohl das Datenblatt doch wegen der Länge von 16 Bit zwei "benachbarte" Register für jeden auszulesenden Wert vorsieht.

    Ich möchte versuchen ohne das Adafruit-Modul klarzukommen, vielleicht hat ja ein Mitforent die Geduld mit zu erklären, wie ich vorgehen muss..?

    Vielen Dank!
    Philipp

  • So, jetzt hab ich mir mal den Link von Chris angeschaut und mir zusammen mit dem Datenblatt mein Python-Script zusammengestöpselt. Was soll ich sagen... irgendwie ist da ein ganz perfider Wurm drin. Die Werte, die ich für die Druckmessung bekomme sind etwas - tatsächlich nur "etwas" - daneben. 942hPa sind zwar noch irgendwo im "atmosphärisch Erwartbaren" aber doch verdammt niedrig (wetter.com meldet 1014hPa). Hatte jemand so ein Problem schon mal?

    Das andere, was sich mir nicht erschließt, ist die Ermittlung des kompensierten Drucks. Natürlich ist der Rechenweg abhängig vom Sensor, der so eine Art Black Box ist und die Kompensationswerte ändern sich wohl von Sensor zu Sensor. Aber - gemäß Datenblatt ist der Korrekturwert B6, der für die Druckermittlung benötigt wird temperaturabhängig. Wie kann das sein? Eigentlich ist eine Druckmessung ja nicht temperaturabhängig. Oder muss der Sensor selbst temperaturkompensiert werden?

    Kann mir jemand auf die Sprünge helfen?
    Philipp

  • Zeit mal dein Script.

    Soweit ich weiß muss man dem Sensor ein wenig Zeit geben sich zu initialisieren und zu schnelles auslesen kann die Werte auch verfälschen also erhöh einfach mal den Messintervall. Ein Abstand von einer Sekunde zwischen Temperatur und Druck-Messung wäre ebenfalls angebracht, ebenso wie

    Einen Unterschied von 942hPa zu 1014hPa @wetter.com sehe ich aber auch nicht als dramatisch, zum einen kann die Wetterstation von wo wetter.com die Werte kriegt einige km von dir entfernt sein, zum anderen sind die deshalb auch nicht bei dir zuhause ;)

  • Hallo Meigrafd,

    danke für Deine Antwort. Sei mir nicht böse, wenn ich in einem Punkt widerspreche - 942hPa wären dramatisch, das sind Druckverhältnisse, da macht man sich nicht mehr Sorgen um einzelne Dachziegel sondern um das ganze Hausdach...

    Hier mein Script, sehr nett, dass Du es durschaust....

  • Hast Du Dir das -> hier <- schon mal angeschaut?
    Ist schon eine Weile her, aber ich glaube, das hatte ich seinerzeit auch "zu Fuß" programmiert ...

    //EDIT:
    Und ja ... wenn ich (vor 45 Jahren oder so) in Physik richtig hingehört habe, dann ist der Druck von Gasen durchaus auch temperaturabhängig ... ;)

    cu,
    -ds-

  • Hallo Dreamshader,

    Deinen Beitrag hatte ich Vorfeld gesehen, bin aber nicht so ganz damit klar gekommen. Ich knie mich später am Abend nochmal rein.

    Ich gebe Dir Recht, dass Druck insofern temperaturabhängig ist, dass sich der Druck eines geschlossenen Systems bei konstantem Volumen bei Temperaturänderung ebenfalls ändert (p*V/T=const.). Aber - 1014hPa bei -2°C sind genauso 1014hPa bei +20°C. In meiner Wohnung sollte im Moment annähernd der selbe Druck herrschen, wie draußen. In diesem Fall ist die Temperatur eigentlich unerheblich, es sei denn das Messgerät selbst ist temperaturempfindlich, dann müsste es temperturkompensiert werden.

    Ich meld mich, wenn ich etwas Verwertbares in Deinem Beitrag gefunden habe...
    Philipp

  • Naja ... das ist so eine Standard-Berechnung (die ich mir auch nur bei adafruit ausgeliehen habe) ...
    Genau so spielt ja der Luftdruck auf Meereshöhe irgend eine Rolle (der afaik in der Berechnung auch nur als "so ungefähr" angegeben wird).
    Ich habe irgendwann gar nicht mehr versucht, das alles zu verstehen, was da berechnet wird (ich muss ja auch nicht immer alles verstehen ;) ).

    Ich fand die Werte jedenfalls relativ plausibel ...

    cu,
    -ds-

  • Für den BMP085 und BMP180 gibt's ein Kernelmodul bmp085_i2c, das leider nicht im Raspbian-Kernel enthalten ist (aber falls man eh einen eigenen Kernel baut, kann man das ja mit dazu nehmen).

    Man muss nur die Adresse bekanntgeben:

    Code
    echo bmp085 0x77 > /sys/bus/i2c/devices/i2c-1/new_device

    und schon kann man in /sys/bus/i2c/devices/1-0077/pressure0_input und /sys/bus/i2c/devices/1-0077/temp0_input die Werte auslesen.

  • Kernel Module werden heutzutage nur noch selten statisch in den Kernel eingebunden. Die meisten lassen sich dynamisch laden.

    Allerdings sehe ich nicht den Unterschied ob man nun ein extra Kernel Module verwendet oder die Adafruit-Bibliothek :s

    Es gibt etliche Ansätze direkt über I2C und den entsprechenden Registern mit dem BMP Module zu kommunizieren, um nur mal einige zu nennen:
    http://www.gtkdb.de/index_36_2473.html
    http://kampis-elektroecke.de/?page_id=4303
    http://forum.pilight.org/Thread-BMP085-i2c?page=3
    https://www.john.geek.nz/2012/08/readin…a-raspberry-pi/
    https://code.google.com/p/webiopi/wiki/SENSOR

    Und der TE nannte ja auch schon ein Python Script.

  • Erst mal vielen Dank für die Link Sammlung!
    Ich bin eigentlich daran interessiert den BMP180 ohne Adafruit Bibliothek mit Python auszulesen.
    Bleiben zwei Links übrig.
    Hab den Code von Kampis-elektroecke heruntergeladen und probiert, aber leider sind die Ergebnisse, naja - irgendwie daneben:

    Zitat

    ----------------------------------------
    Temperatur: 59.3 C
    Luftdruck: 883.366 hPa
    Altitude: 1142.23
    ----------------------------------------


    das mag daran liegen dass ich ein anderes Modul verwende (siehe Anhang) als der Author des Codes. Hab mich nicht weiter damit beschäftigt. Vielleicht weiss ja jemand was da falsch läuft.

    Dann hab ich den Code von http://www.gtkdb.de/index_36_2473.html probiert und voila! es funktioniert!
    Was hier aber definitiv fehlt ist die Formel um den gemessenen Druck auf Mehreshöhe umzurechnen. Noch schnell eine Funktion dazu geschrieben und ein paar Verbesserungen eingebaut, fertig.
    Hab das Modul bmp180lib.py getauft.
    bmp180_test_no_ada.py ist ein Beispiel wie die Klasse in ein Python Skript eingebunden werden kann.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!