Raspberry Pi BMP180 Luftdruck Sensor
Um an den Raspberry Pi einen Luftdruck Sensor anzuschließen habe ich mich für den Sensor BMP180 (GY-68) entschieden und diesen auch gleich fertig als Platine gekauft. Der Sensor liefert neben dem Luftdruck ebenfalls die Temperatur. Jumper Kabel habe ich hier noch zusätzlich bestellt da im Paket keine enthalten waren. Ebenfalls muss man leider löten können, da das Gegenstück zu den Jumperkabeln zwar bei liegt, es aber nicht an die Platine gelötet ist. Auch die Jumper Kabel sind für weitere Einsatzzwecke nutzbar.
Achtung: Der Sensor zeigt den absoluten Luftdruck an, nicht den umgerechneten Luftdruck auf Normal Null (Meereshöhe), den man im Wetterbericht sieht. Deshalb ist der Sensorwert niedriger. Mehr Infos sind hier nachzulesen:
Hier die Links zu den Produkten:
- AZDelivery GY-68 BMP180 Barometrischer Luftdruck und Temperatur Sensor
- AZDelivery Jumper Wire Kabel 3 x 40 STK. je 20 cm M2M/ F2M / F2F für Arduino und Raspberry Pi Breadboard inklusive E-Book!
Einen Vergleich verschiedener Temperatur Sensoren findet ihr hier:
Anschluss des Sensors am GPIO
hier die Belegung des GPIO Boards direkt von https://www.raspberrypi.org/documentation/usage/gpio/
Ihr bekommt die aktuelle Pin Belegung eines jeden Raspberry Pi mit dem Tool pinout
:
Unser AZDelivery BMP180 hat vier Anschlüsse VIN
GND
SCL
SDA
, wir schließen nun folgendes zusammen:
Raspberry Pi GPIO Pin | BMP180 Pin |
---|---|
1 (3v3 power) | VIN
|
6 (Ground) | GND
|
5 (GPIO3 / SCL) | SCL
|
3 (GPIO2 / SDA) | SDA
|
Es kann hier gerne was den 3v3
und den GND
Anschluss angeht variert werden.
Aktivierung des i2c Interface
Um den Sensor zu verwenden müssen wir als erstes das i2c Interface Aktivieren, dies geht ganz simple mittels raspi-config
raspi-config
dort gehen wir dann nach:
5 Interfacing Options Configure connections to peripherals
-->
P5 I2C Enable/Disable automatic loading of I2C kernel module
-->
<Yes>
Dann verlassen wir die raspi-config
und installieren unsere Software Pakete für das i2c Interface:
apt install -y python3-smbus i2c-tools
nun können wir testen ob alles OK ist und der Sensor erreichbar ist:
lsmod | grep i2c_
sollte nun die geladeneren Module ausspucken:
i2c_bcm2835 16384 0 i2c_dev 20480 0
und i2cdetect -y 1
den Sensor anzeigen (77
):
0 1 2 3 4 5 6 7 8 9 a b c d e f00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- 77
nachdem der Sensor nun korrekt angeschlossen und die Module geladen sind, kommen wir dazu den Wert des Sensors auszulesen.
Auslesen der Daten des Sensors
Zuerst installieren wir die benötigte Adafruit Library:
apt install python3-pip -y
pip3 install --user Adafruit-BMP
dann können wir mittels dem folgenden Skript die Werte des Sensors auslesen:
Download hier möglich: https://github.com/alaub81/rpi_sensor_scripts/raw/main/bmp180.py
/usr/local/sbin/bmp180.py
#!/usr/bin/python3
import Adafruit_BMP.BMP085 as BMP085
sensor = BMP085.BMP085()
print('Temp = {0:0.2f} *C'.format(sensor.read_temperature()))
print('Pressure = {0:0.2f} hPa'.format(sensor.read_pressure()/100))
print('Altitude = {0:0.2f} m'.format(sensor.read_altitude()))
dann noch dem Script das Execute Recht geben:
chmod +x /usr/local/sbin/bmp180.py
und einfach starten:
bmp180.py
der Output sollte dann so aussehen:
Temp = 21.20 *C Pressure = 989.40 hPa Altitude = 200.57 m
Senden der Daten an MQTT Broker
Möchte man die Daten des BMP180 Sensors an einen MQTT Broker senden um sie dann zum Beispiel mit openHAB auszulesen, kann man dies mit einem Python Script machen Dafür muss man zu allererst noch die paho-mqtt
library nach installieren:
apt install -y python3-paho-mqtt
# oder via pip3
pip3 install --user paho-mqtt
Das folgende Script liest dann die Sensor Daten aus und sendet sie einmalig an den MQTT Broker.
Download hier möglich: https://github.com/alaub81/rpi_sensor_scripts/raw/main/bmp180-mqtt.py
/usr/local/sbin/bmp180-mqtt.py
#!/usr/bin/python3
# Import required Python libraries
import Adafruit_BMP.BMP085 as BMP085
import paho.mqtt.client as mqtt
import time
import ssl
# set the variables
broker='FQDN / IP ADDRESS'
port=8883
publish_topic="house/pi-bmp180"
clientid='python-mqtt-bmp180'
username='mosquitto'
password='password'
insecure=True
qos=1
retain_message=True
# do the stuff
# define BMP180 Sensor
sensor = BMP085.BMP085()
#MQTT Connection
client=mqtt.Client(clientid)
client.username_pw_set(username, password)
client.tls_set(cert_reqs=ssl.CERT_NONE) #no client certificate needed
client.tls_insecure_set(insecure)
client.connect(broker, port)
client.loop_start()
client.publish("{}/temperature".format(publish_topic),"{:.2f}".format(sensor.read_temperature()),qos,retain_message)
client.publish("{}/pressure".format(publish_topic),"{:.2f}".format(sensor.read_pressure()/100),qos,retain_message)
client.publish("{}/altitude".format(publish_topic),"{:.2f}".format(sensor.read_altitude()),qos,retain_message)
client.disconnect()
client.loop_stop()
dann noch dem Script das Execute Recht geben:
chmod +x /usr/local/sbin/bmp180-mqtt.py
Möchte man das Ganze zum Beispiel alle Minute haben, kann man das Script einfach als cronjob laufen lassen.
/etc/cron.d/mqtt
# sends data from BMP180 Sensor to MQTT Broker * * * * * root /usr/local/sbin/bmp180-mqtt.py >/dev/null 2>&1
Git Repository
Alle Skripte die zu den Raspberry Pi Sensoren gehören findet ihr in diesem Repository: