Raspberry Pi BMP180 Luftdruck Sensor

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen
GY-68 BMP180.jpg.webp

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:

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:

GPIO-Pinout-Diagram-2.png

Unser AZDelivery BMP180 hat vier Anschlüsse VIN GND SCL SDA, wir schließen nun folgendes zusammen:

Verkabelung
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  f

00: -- -- -- -- -- -- -- -- -- -- -- -- -- 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: /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.

/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

Quellen