Der Luftdrucksensor BMP085 ist ein kleines Bauteil, womit der aktuelle Luftdruck in der Umgebung gemessen werden kann. Diese Werte können dann z. B. für eine Wetterprognose ausgewertet werden.Das kleine silberne Quadrat auf der Platine ist der Luftdrucksensor. Ein Temperatursensor ist ebenfalls bereits verlötet. Somit reicht allein der Sensor BMP085, um eine eigene Wetterstation zu bauen. Eine Anleitung zum anschließen eines Temperatursensors findest du ebenfalls auf meinem Blog.
Sensor anschließen
Dank seiner I²C-Schnittstelle und der Betriebsspannung von 1,8 V bis 3,6 V kann der BMP085 problemlos direkt an den Raspberry Pi angeschlossen werden. Die sechs Anschlüsse (Vcc, SDA, SCL, XCLR, EOC, GND) des Sensors müssen dazu nicht alle zwingend angeschlossen werden. XCLR und EOC dürfen offen bleiben oder können mit einem GPIO verbunden werden (siehe weiter unten). Die anderen Anschlüsse sollten wie folgt angeschlossen werden:
- Vcc an Pin 1 (3,3 V)
- SDA an Pin 3 (GPIO 2 / SDA)
- SCL an Pin 5 (GPIO 3 / SCL)
- GND an Pin 6 (Ground)
Software vorbereiten
Nun müssen die Kernelmodule aktiviert werden. In der Datei „/etc/modules“ müssen folgende Module hinzugefügt werden.
i2c-bcm2708 i2c-dev
In der Datei „/etc/modprobe.d/raspi-blacklist.conf“ muss der Eintrag „blacklist i2c-bcm2708“ auskommentiert bzw. entfernt werden.
#blacklist i2c-bcm2708
Anschließend, falls noch nicht installiert, müssen noch die erforderlichen Python-Module installiert werden.
sudo apt-get install python-smbus i2c-tools
Nach einem Neustart des Raspberry Pi werden die Module sauber geladen und der Befehl
i2cdetect -y 1
kann ausgeführt werden. Die Zahl muss dabei der Revision eures Raspberry Pi angepasst werden (Revision 1 = 0; Revision 2 = 1). Nach dem Ausführen sollte soetwas erscheinen:
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- 77
Der Sensor wird auf Adresse 0x77 angezeigt.
Software installieren
Damit die Rohdaten nicht selbst übersetzt werden müssen, verwende ich Adafruit Python BMP. Diese Bibliothek wird nun auf den Raspberry Pi in das Verzeichnis „/var/“ heruntergeladen:
cd /var/ git clone https://github.com/adafruit/Adafruit_Python_BMP.git
Nun kann der Sensor mit einem Beispielscript getestet werden.
cd Adafruit_Python_BMP/examples/ python simpletest.py
Funktioniert alles, erscheint eine Ausgabe wie diese:
Temp = 25.20 *C Pressure = 100999.60 Pa Altitude = 114.10 m Sealevel Pressure = 101154.00 Pa
In meinem Pi Control findest du ein passendes Plugin, um dir die Werte in einer Übersicht und Statistik anzeigen zu lassen.
XCLR und EOC
Diese beiden Pins müssen nicht angeschlossen werden. Zur Vollständigkeit möchte ich diese aber noch kurz erklären. Der XCLR ist ein Eingang am BMP085, wird auf diesem ein mindestens 1 µs dauernden HIGH-Level angesetzt, wird der Sensor resettet. Der EOC ist ein Ausgang am BMP085, dieser gibt ein HIGH-Level von sich, wenn das Ende eines Messvorgangs erreicht ist. EOC = End of Conversion.
Danke an Torsten Zahmow, der mir den Sensor kostenlos zur Verfügung gestellt hat.
Nachdem ich alles wie beschrieben installiert habe, wird in dem Plugin „Luftdruck“ eine Fehlermeldung ausgegeben. Es konnten keine Daten ausgelesen werden. Der Pfad stimmt und der Sensor ist auch ordnungsgemäß angeschlossen weil das Beispielprogramm saubere Werte liefert.
Was könnte noch falsch sein.
Mit freundlichen Grüssen
Heinz-Rolf
Hallo Heinz-Rolf,
was für eine Fehlermeldung bekommst du den angezeigt? Bei mir lautet der Pfad z. B. „/var/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/“. Sieht er bei dir ebenso ähnlich aus?
Gruß
Willy
Der Fehler lautet wie folgt: „Leider ist ein Fehler aufgetreten! Es konnten keine Werte abgefragt werden. Bitte überprüfe den Pfad zur Bibiliothek und ob der Sensor ordnungsgemäß angeschlossen ist.“
Der Pfad sieht so aus : /var/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085
Das Beispielscript Adafruit_BMP085_example.py liefert folgende Werte:
Temperature: 21.10 C
Pressure: 1002.09 hPa
Altitude: 93.16
also eigendlich alles ok.
Vielen Dank.
Navigiere bitte mal über die Konsole zum Pi Control, in den Ordner resources/plugins/air_pressure/includes und führe folgenden Befehl aus:
python get_pressure.py "/var/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/" 0
Gruß
Willy
Traceback (most recent call last):
File „get_pressure.py“, line 7, in
bmp = BMP085(0x77, 3)
File „/var/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/Adafruit_BMP085.py“, line 52, in __init__
self.i2c = Adafruit_I2C(address)
File „/var/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/Adafruit_I2C.py“, line 43, in __init__
self.bus = smbus.SMBus(busnum if busnum >= 0 else Adafruit_I2C.getPiI2CBusNumber())
IOError: [Errno 13] Permission denied
Ich habe den Befehl nochmal mit sudo ausgeführt. hier das Ergebnis :
21.30| 1002.22| 1010.10
Danke. Ich werde gleich ein Update bereitstellen, welches das Problem behebt.
Gruß
Willy
Habe gerade ein Update des Plugins veröffentlicht. Du kannst es unter „Plugins“ > „Nach Plugins suchen“ > „Luftdruck“ > „Aktualisieren“ aktualisieren.
Sollten immer noch Probleme auftreten, schreibe mir bitte. Danke.
Gruß
Willy
Alles supi !!!! Vielen Dank für die superschnelle Hilfe.
Schönes Wochenende noch.
Mit freundlichen Grüssen
Heinz-Rolf
Bei mir kommt ebenfalls ein Permission denied, als root kann ich es jedoch problemlos ausführen…
Traceback (most recent call last):
File „/usr/share/nginx/www/pic/resources/plugins/air_pressure/includes/get_pressure.py“, line 6, in
bmp = BMP085(0x77, 3)
File „/opt/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/Adafruit_BMP085.py“, line 52, in __init__
self.i2c = Adafruit_I2C(address)
File „/opt/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/Adafruit_I2C.py“, line 43, in __init__
self.bus = smbus.SMBus(busnum if busnum >= 0 else Adafruit_I2C.getPiI2CBusNumber())
IOError: [Errno 13] Permission denied
$ sudo python /usr/share/nginx/www/pic/resources/plugins/air_pressure/includes/get_pressure.py „/opt/Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085“ 0
23.10| 951.63| 951.63
Konnte meinen Fehler beheben. Lag daran das ich meinen SSH User umbenannt habe nach der Installation von Pi Control… leider kam im UI keine Fehlermeldung, sondern nur ein 500er. 🙁
Leider bekomme ich den BMP085 nicht zum laufen
Obwohl i2cdetect -y 1 den Sensor anzeigt
/var/Adafruit-Raspberry-Pi-Python-Code ist zwar vorhanden aber bis auf ein git verzeichnis und eine readme datei leer
cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_BMP085/
python Adafruit_BMP085_example.py
funktioniert also nicht da kein Adafruit_BMP085 Verzeichnis vorhanden ist
Laut readme hat sich alles was den Code für den Raspberry betrifft geändert.
Das Tutorial müsste mal angepasst werden da es so nicht mehr funktioniert
Kann man bis das soweit ist die fehlenden Dateien als Zip hier zur Verfügung stellen ?
z.B. die python Adafruit_BMP085_example.py
Hallo Norbert,
die Entwickler haben die einzelnen Module ausgelagert. Das passende Modul für den BMP085 findest du jetzt hier: https://github.com/adafruit/Adafruit_Python_BMP
Die Anleitung wird natürlich angepasst. Danke für den Hinweis.
Gruß
Willy