Raspberry Pi BH1750 Helligkeitssensor
Um an den Raspberry Pi einen Helligkeitssensor anzuschließen habe ich mich für den Sensor BH1750 (GY-302) entschieden und diesen auch gleich fertig als Platine gekauft. 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. Die Sensoren kommen direkt im dreier Pack. Auch die Jumper Kabel sind für weitere Einsatzzwecke nutzbar.
Hier die Links zu den Produkten:
- AZDelivery 3 x GY-302 BH170 Licht Sensor Helligkeitsensor für Arduino und Raspberry Pi
- AZDelivery Jumper Wire Kabel 3 x 40 STK. je 20 cm M2M/ F2M / F2F für Arduino und Raspberry Pi Breadboard inklusive E-Book!
Anschluß des Sensors am GPIO
hier die Belegung des GPIO Boards direkt von https://www.raspberrypi.org/documentation/usage/gpio/
Auf der Konsole könnt ihr es so auslesen:
Unser AZDelivery GY-302 Platine (BH1750) hat fünf Anschlüsse VCC
GND
SCL
SDA
ADDR
, wir schließen nun folgendes zusammen:
Raspberry Pi GPIO Pin | BH1750 Pin |
---|---|
1 (3v3 power) | VCC
|
6 (Ground) | GND
|
5 (GPIO3 / SCL) | SCL
|
3 (GPIO2 / SDA) | SDA
|
14 (Ground) | ADDR
|
Es kann hier gerne was den 3v3 und den Ground Anschluss angeht variert werden. Es darf nur kein 5v power sein!
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 nonint do_i2c 0
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 (23
):
0 1 2 3 4 5 6 7 8 9 a b c d e f00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- 23 -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
nachdem der Sensor nun korrekt angeschlossen und die Module geladen sind, kommen wir dazu den Wert des Sensors auszulesen.
Auslesen der Daten des Sensors
Um die Daten nun auszulesen und korrekt im lux Format anzuzeigen kann folgendes Python Script verwendet werden:
/usr/local/sbin/bh1750-smbus.py
#!/usr/bin/python3
import smbus
import time
DEVICE = 0x23
POWER_DOWN = 0x00
POWER_ON = 0x01
RESET = 0x07
bus = smbus.SMBus(1)
def convertToNumber(data):
result=(data[1] + (256 * data[0])) / 1.2
return (result)
def readLight(addr=DEVICE):
data = bus.read_i2c_block_data(addr,0x20)
return convertToNumber(data)
def main():
lightLevel=readLight()
print (format(lightLevel,'.2f') + " lux")
if __name__=="__main__":
main()
gibt man diesem das execute Recht:
chmod +x /usr/local/sbin/bh1750-smbus.py
Und führt das Script aus:
bh1750-smbus.py
Sollte man folgende Ausgabe sehen:
91.67 lux
Auslesen der Daten des Sensors mittels Adafruit Bibliothek
Als erstes installieren wir mit pip
die adafruit-circuitpython-bh1750
Bibliothek nach:
apt install python3-pip
pip3 install --user adafruit-circuitpython-bh1750
nun erstellen wir einfach ein kleines Skript:
/usr/local/sbin/bh1750.py
#!/usr/bin/python3
import board
import adafruit_bh1750
i2c = board.I2C()
sensor = adafruit_bh1750.BH1750(i2c)
print("%.2f Lux" % sensor.lux)
dann noch das execute Recht:
chmod +x /usr/local/sbin/bh1750.py
Und das Script ausführen:
bh1750.py
Sollte man folgende Ausgabe sehen:
91.67 Lux
Senden der Daten an MQTT Broker
Möchte man die Daten des BH1750 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 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/bh1750-mqtt.py
/usr/local/sbin/bh1750-mqtt.py
#!/usr/bin/python3
# Import required Python libraries
import paho.mqtt.client as mqtt
import board
import adafruit_bh1750
import time
import ssl
# set the variables
broker='FQDN / IP Address'
port=8883
publish_topic="house/pi-bh1750"
clientid='python-mqtt-bh1750'
username='mosquitto'
password='password'
insecure=True
qos=1
retain_message=True
# do the stuff
# define BH1750
i2c = board.I2C()
lightsensor = adafruit_bh1750.BH1750(i2c)
#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("{}/lux".format(publish_topic),"{:.2f}".format(lightsensor.lux),qos,retain_message)
client.disconnect()
client.loop_stop()
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 BH1750 Sensor to MQTT Broker * * * * * root /usr/local/sbin/bh1750-mqtt.py >/dev/null 2>&1
Git Repository
Alle Skripte die zu den Raspberry Pi Sensoren gehören findet ihr in diesem Repository: