Raspberry Pi TSL2561 Helligkeitssensor

Aus Laub-Home Wiki

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:

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

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

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