Raspberry Pi Luftdruck messen
In dem Artikel geht es darum mit dem Raspberry Pi Luftdruck messen zu können. Im letzten Post habe ich euch gezeigt wie man einen BMP085 Sensor an den I2C Bus der GPIO Schnittstelle anschließt. Nun zeige ich euch wie ihr den Sensor in Python ansprechen und die Messwerte auslesen könnt.
Raspberry Pi Luftdruck messen
Für unsere Messung benötigen wir I2C. I2C ist eine serieller Datenbus über diesen man mit angeschlossenen I2C fähigen Geräten und Sensoren kommunizieren kann. Alle I2C fähigen Geräte werden dabei an einem I2C Datenbus angeschlossen, welcher aus zwei Leitungen besteht:
- SCL (Taktleitung)
- SDA (Datenleitung)
I2C ist ein so genannter Master-Slave-Bus. Wer von euch noch ältere PCs zuhause stehen hat kennt das eventuell. Am seriellen Bus konnte man früher Festplatten und CD Laufwerke anhängen, wobei aber immer nur ein Gerät Master sein durfte. Der Master gibt bei I2C den Takt vor (SCL) in dem Daten (SDA) gelesen werden, die passiven Slaves müssen diesen einhalten.
Durch I2C ist die komplette Kommunikation geregelt. Also wer Master ist, wer den Takt vorgibt, wie das Format der Übertragung (Protokoll) lautet und wie man die einzelnen angeschlossenen Geräte und Sensoren adressiert. Uns als Anwender interessiert das alles nur bedingt. Wir wollen direkt unseren Sensor ansprechen und den Raspberry Pi Luftdruck messen.
I2C aktivieren
Um mit dem BMP085 Sensor kommunizieren zu können benötigen wir I2C. Der Raspberry Pi hat zwei Pins (GPIO 2 und GPIO 3) mit denen man über I2C kommunizieren kann, jedoch ist I2C standardmäßig deaktiviert. Das bedeutet, dass diese beiden Pins „normale“ GPIO Pins sind. Wie man am Raspberry Pi I2C aktivieren kann habe ich bereits gezeigt. Für eine erfolgreiche Messung sollten die dort genannten Schritte gemacht werden.
Luftdruck messen
Der erste Schritt ist herauszufinden an welcher Adresse im I2C Bus wir unseren Sensor finden. Das funktioniert mit folgendem Kommando:
sudo i2cdetect -y 1
Der Sensor wurde korrekt unter der Adresse 0x77 gefunden.
Software
Zuerst müssen alle notwendigen Programme und Bibliotheken installiert werden:
sudo apt-get install git build-essential python-dev python-smbus
Adafruit hat im Bereich der Raspberry Pi Sensoren tolle Vorarbeit geleistet und über GitHub stellen sie ihren SourceCode zur Verfügung. Auch beim Luftdruck Sensor wird man fündig. Ohne nun weiter ins Detail zu gehen laden wir uns das Git erzeichnis herunter und testen den angeschlossenen Sensor:
git clone https://github.com/adafruit/Adafruit_Python_BMP.git cd Adafruit_Python_BMP sudo python setup.py install
Wir laden das Git Repository herunter und führen das Python Installationsskript aus, welches alles notwendige installiert und konfiguriert. Das ist zwar etwas langweilig, aber da schon alles fertig implementiert ist wäre es den Aufwand nicht wert, wenn man die einzelnen Schritte alle selber manuell durchführt.
Es gibt auch ein Testskript mit dem man die Messwerte vom Sensor auslesen und darstellen kann. Wenn wir dieses ausführen sollte es bereits korrekte Werte liefern.
cd examples sudo python simpletest.py
Bei meinem Test lieferte der Sensor folgende Ausgabe:
Die aktuelle Wetterlage wird durch den Sensor recht gut angegeben. Neben der Temperatur und den Luftdruck wird auch die Seehöhe bestimmt. Die 288 Meter kommen schon recht gut hin, laut Wikipedia sollten es 295 Meter sein. Nach der Topologie des Orts sind die 295 Meter wohl ein Durchschnittswert und die 288 Meter der korrekte Wert am Messpunkt.
Python Skript im Detail
Um am Raspberry Pi Luftdruck messen zu können benötigt man ein Python Skript. Das Skript ist recht einfach aufgebaut, man kann in wenigen Zeilen Code die Messwerte ausgeben:
import Adafruit_BMP.BMP085 as BMP085 sensor = BMP085.BMP085() print 'Temp = {0:0.2f} *C'.format(sensor.read_temperature()) print 'Pressure = {0:0.2f} Pa'.format(sensor.read_pressure()) print 'Altitude = {0:0.2f} m'.format(sensor.read_altitude()) print 'Sealevel Pressure = {0:0.2f} Pa'.format(sensor.read_sealevel_pressure())
Zuerst wird das BMP085 Python Script von Adafruit eingebunden. Danach holen wir uns eine Instanz der BMP085 Klasse und speichern diese in der sensor Variable. Über diese Instanz können wir dann mit ein einzelnen Methoden read_temperature(), read_pressure(), read_altitude() und read_sealevel_pressure() können die Werte gelesen werden. Diese werden mit dem print Befehl direkt auf der Konsole ausgegeben.
Nähere Infos findet man im Order Adafruit_BMP in der BMP085.py Datei. Dort ist die BMP085 Klasse in Python implementiert.
Fazit
Am Raspberry Pi Luftdruck messen geht recht einfach. Nachdem der Sensor korrekt verkabelt ist können wir über den seriellen I2C Bus die Werte vom Sensor auslesen. Neben Temperatur und Luftdruck kann auch die Seehöhe bestimmt werden.
Welche Werte konnten ihr mit dem Sensor ermitteln?
Hallo,
gibt es die Möglichkeit diese Website auch über rss feeds zu lesen?
ja klar: http://developer-blog.net/feed/
Hat nicht funktioniert. Hier die Fehlermeldung:
ImportError: No module named Adafruit_PureIO.smbus