Raspberry Pi BH1750 Helligkeitssensor

Aus Laub-Home.de Wiki
Zur Navigation springen Zur Suche springen
BH1750.jpg

Um an den Raspberry Pi (hier Version 4B) 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:


Anschluß des Sensors am GPIO

hier die Belegung des GPIO Boards direkt von https://www.raspberrypi.org/documentation/usage/gpio/

GPIO-Pinout-Diagram-2.png


Unser AZDelivery GY-302 Platine (BH1750) hat fünf Anschlüsse VCC GND SCL SDA ADDR, wir schließen nun folgendes zusammen:

Verkabelung
Raspberry Pi GPIO Pin DHT22 AM2302 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

dort gehen wir dann nach:

5 Interfacing Options  Configure connections to peripherals  

-->

P5 I2C         Enable/Disable automatic loading of I2C kernel module

-->

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

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

#!/usr/bin/python
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.py

Und führt das Script aus:

bh1750.py

Sollte man folgende Ausgabe sehen:

91.67 lux

Quellen