Raspberry Pi TSL2561 Helligkeitssensor
Um an den Raspberry Pi einen Helligkeitssensor anzuschließen habe ich mich für den Sensor tsl2561 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:
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:
Unsere TSL2561 Platine hat fünf Anschlüsse VCC
GND
SCL
SDA
ADDR
, wir schließen nun folgendes zusammen:
Raspberry Pi GPIO Pin | TSL2561 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 (39
):
0 1 2 3 4 5 6 7 8 9 a b c d e f00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- -- 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 mittels Adafruit Bibliothek
Als erstes installieren wir mit pip
die adafruit-circuitpython-tsl2561
Bibliothek nach:
apt install python3-pip
pip3 install --user adafruit-circuitpython-tsl2561
nun erstellen wir einfach ein kleines Skript:
/usr/local/sbin/tsl2561.py
#!/usr/bin/python3
import board
import adafruit_tsl2561
i2c = board.I2C()
sensor = adafruit_tsl2561.TSL2561(i2c)
# Set high gain mode.
# 0 is low gain 1 is high gain
sensor.gain = 1
# Set integration time.
# A value 0 is 13.7ms, 1 is 101ms, 2 is 402ms, and 3 is manual mode.
sensor.integration_time = 2
print('Lux: {}'.format(sensor.lux))
print('Broadband: {}'.format(sensor.broadband))
print('Infrared: {}'.format(sensor.infrared))
print('Luminosity: {}'.format(sensor.luminosity))
dann noch das execute Recht:
chmod +x /usr/local/sbin/tsl2561.py
Und das Script ausführen:
tsl2561.py
Sollte man folgende Ausgabe sehen:
Lux: 29.561694166424235 Broadband: 74 Infrared: 13 Luminosity: (74, 13)
Senden der Daten an MQTT Broker
Möchte man die Daten des TSL2561 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 python3-systemd
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/tsl2561-mqtt.py
/usr/local/sbin/tsl2561-mqtt.py
#!/usr/bin/python3
# Import required Python libraries
import paho.mqtt.client as mqtt
import board
import adafruit_tsl2561
import time
import ssl
# set the variables
broker='FQDN / IP Adresse'
port=8883
publish_topic="house/pi-tsl2561"
clientid='python-mqtt-tsl2561'
username='mosquitto'
password='password'
insecure=True
qos=1
retain_message=True
# do the stuff
# define BH1750
i2c = board.I2C()
sensor = adafruit_tsl2561.TSL2561(i2c)
# Set high gain mode.
# 0 is low gain 1 is high gain
sensor.gain = 1
# Set integration time.
# A value 0 is 13.7ms, 1 is 101ms, 2 is 402ms, and 3 is manual mode.
sensor.integration_time = 2
#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()
#print('Lux: {}'.format(sensor.lux))
#print('Broadband: {}'.format(sensor.broadband))
#print('Infrared: {}'.format(sensor.infrared))
#print('Luminosity: {}'.format(sensor.luminosity))
lux = sensor.lux
if lux == None:
lux = 0
client.publish("{}/lux".format(publish_topic),"{}".format(lux),qos,retain_message)
client.publish("{}/broadband".format(publish_topic),"{}".format(sensor.broadband),qos,retain_message)
client.publish("{}/infrared".format(publish_topic),"{}".format(sensor.infrared),qos,retain_message)
client.publish("{}/luminosity".format(publish_topic),"{}".format(sensor.luminosity),qos,retain_message)
time.sleep(2)
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 TSL2561 Sensor to MQTT Broker * * * * * root /usr/local/sbin/tsl2561-mqtt.py >/dev/null 2>&1
Git Repository
Alle Skripte die zu den Raspberry Pi Sensoren gehören findet ihr in diesem Repository: