Cette fois, c’est un détecteur de luminosité qui est utilisé. L’utilisation de celui-ci est différente du détecteur de sons dans la méthode utilisée, car ce capteur n’utilise pas une broche GPIO, mais le bus I2C. Le capteur (BH1750FVI) fournit une valeur allant de 1 à 65535 lux (lx), les données sont accessibles à l’adresse 0x5C du bus I2C.
Voici à quoi ressemble ce capteur dans votre mallette, il est situé juste au-dessus du détecteur de son utilisé dans la leçon 5.

Commutateurs :
La position des commutateurs est sans importance, car on utilise le bus I2C.
Le logiciel
Cet exemple utilisera une classe python, il est repris du site raspberry-spy.co.uk, dont l’auteur est Matt Hawkins.
De plus, la version proposée utilise la librairie smbus (classe SMBus), qui est un sous-ensemble de la librairie I2C.
Le pseudo-code :
- Importation des librairies
- Contrôle la bonne utilisation du bus SMBus
- Définition d’une classe LigntSensor
- Dans une boucle infinie (arrêt avec CTRL-C)
- Affiche la lumière lue
- Attente
En python :
#import necessary libraries
import RPi.GPIO as GPIO
import time
import smbus
#check RPI card revision
if(GPIO.RPI_REVISION == 1):
bus = smbus.SMBus(0)
else:
bus = smbus.SMBus(1)
#The LightSensor class
class LightSensor():
def __init__(self):
#define some constants from the datasheet
self.DEVICE = 0x5c #default device I2C address
self.POWER_DOWN = 0x00 #no active state
self.POWER_ON = 0x01 #power on
self.RESET = 0x07 #reset data register value
#start measurement at 4 Lux
self.CONTINUOUS_LOW_RES_MODE = 0x13
#start measurement at 1 Lux
self.CONTINUOUS_HIGH_RES_MODE_1 = 0x10
#start measurement at 0.5 Lux
self.CONTINUOUS_HIGH_RES_MODE_2 = 0x11
#start measurement at 1 Lux
#device is automatically set to power down mode after measurement
self.ONE_TIME_HIGH_RES_MODE_1 = 0x20
#start measurement at 0.5 Lux
#device is automatically set to power down mode after measurement
self.ONE_TIME_HIGH_RES_MODE_2 = 0x21
#start measurement at 4 Lux
#device is automatically set to power down mode after measurement
self.ONE_TIME_LOW_RES_MODE = 0x23
def convertToNumber(self, data):
#Simple function to convert 2 Bytes of data
#into a decimal number
return ((data[1] + (256 * data[0])) / 1.2)
def readLight(self):
data = bus.read_i2c_block_data(self.DEVICE,self.ONE_TIME_HIGH_RES_MODE_1)
return self.convertToNumber(data)
#main code
def main():
sensor = LightSensor()
try:
while True:
print("Light Level : " + str(sensor.readLight()) + " lx")
time.sleep(0.5)
except KeyboardInterrupt:
pass
if __name__ == "__main__":
main()