En plus des capteurs de température et d'humidité, il existe un capteur d'éclairement en tant que capteur facile à utiliser. L'unité peut être mesurée en lux. Cette fois, nous avons préparé le capteur d'éclairement numérique Adafruit TSL2561. Il existe également un capteur humain qui utilise les rayons infrarouges comme capteur optique. Il semble que vous puissiez faire quelque chose comme l'IoT lorsqu'il est utilisé en combinaison.
Le câblage de la maquette est une version Arduino sur le site lern d'Adafruit, mais peut être trouvé sur TSL2561 Luminosity Sensor.
Si le câblage réussit, vous pouvez vérifier l'adresse 0x39.
$ i2cdetect -y 1
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: -- -- -- -- -- -- -- --
Python 2
Le pilote pour obtenir les données du bus I2C est [Adafruit_I2C.py] de Python dans le référentiel Adafruit-Raspberry-Pi-Python-Code. ](Https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code/blob/master/Adafruit_I2C/Adafruit_I2C.py) est utilisé. Ce pilote fonctionne avec Python 2, qui est installé par défaut sur le Raspberry Pi.
$ cd ~/python_apps
$ git clone https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
$ cd Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C
Python 3
Quick2Wire est également utilisé dans RPi-Light-Sensor Je vais. Je n'ai pas installé Python 3 sur Raspberry Pi, je vais donc préparer un virtualenv et l'utiliser la prochaine fois.
Le programme pour mesurer l'éclairement de TSL2561 est [TSL2561.py](https: // github.) Dans le forum de TSL2561 et Raspberry Pi. com / seanbechhofer / raspberrypi / blob / master / python / TSL2561.py) est introduit.
De plus, Raspberry Pi Hacks a tsl2561-lux.py. -lux.py) est publiée. Les deux ont presque le même code, mais cette fois je téléchargerai tsl2561-lux.py
depuis le dépôt rpihacks dans le répertoire ʻAdafruit_I2C` et l'utiliserai.
$ cd ./Adafruit_I2C
$ wget https://raw.githubusercontent.com/spotrh/rpihacks/master/tsl2561-lux.py
$ chmod +x tsl2561-lux.py
Même si vous commentez la fin de tsl2561-lux.py
, il peut être appelé de l'extérieur en tant que module.
~/python_apps/Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/tsl2561-lux.py
...
#oLuxmeter=Luxmeter()
#print "LUX HIGH GAIN ", oLuxmeter.getLux(16)
#print "LUX LOW GAIN ", oLuxmeter.getLux(1)
#print "LUX AUTO GAIN ", oLuxmeter.getLux()
Malheureusement, le nom du fichier contient des traits d'union, donc Python ne peut pas l'importer tel quel. Remplacez par un trait de soulignement pour créer un lien symbolique.
$ ln -s tsl2561-lux.py tsl2561_lux.py
Créez tsl2561.py
comme point d'entrée pour mesurer l'éclairement en utilisant la classe Luxmeter.
~/python_apps/Adafruit-Raspberry-Pi-Python-Code/Adafruit_I2C/tsl2561.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from time import sleep
from tsl2561_lux import Luxmeter
if __name__ == "__main__":
while True:
tsl=Luxmeter()
sensor_value = tsl.getLux()
print(sensor_value)
sleep(5)
Exécutez le programme qui mesure l'éclairement à des intervalles de 5 secondes. L'unité est le lux. Les données présentent des variations, probablement à cause de la mesure instantanée.
$ chmod u+x tsl2561.py
$ ./tsl2561.py
1691.71324345
961.73944068
1274.95548759
690.479479419
14.30208
0
11.50656
388.866054431
1316.01531121
0
0
Illuminez le capteur avec l'application de lampe de poche de l'iPhone pour augmenter votre apparence. La prochaine fois, j'essaierai d'acquérir des données stables en mesurant dans une pièce noire.
19088.793866
0
0
UPDATE 2015-05-25
J'ai modifié le programme pour le publier sur MQTT lorsqu'il dépasse 500 lux. L'intervalle de mesure est également raccourci à 3 secondes.
~/meshblu/publish.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from time import sleep
from tsl2561_lux import Luxmeter
import paho.mqtt.client as mqtt
import json
def sensor():
sensor = W1ThermSensor()
celsius = sensor.get_temperature()
return celsius
def on_connect(client, userdata, rc):
print("Connected with result code " + str(rc))
def on_publish(client, userdata, mid):
print("publish: " + str(mid))
def main():
client = mqtt.Client(client_id='',clean_session=True,
protocol=mqtt.MQTTv311)
client.username_pw_set("{username}","{password}")
client.connect("{mqtt_broker_host}", 1883, 60)
client.on_connect = on_connect
client.on_publish = on_publish
tsl=Luxmeter()
while True:
sensor_value = tsl.getLux()
print(sensor_value)
if sensor_value > 500.0:
message = json.dumps(dict(trigger="on"))
client.publish("data",message)
sleep(3)
if __name__ == '__main__':
main()
J'ai déménagé dans une pièce sombre et l'ai testé. Une mesure précise est possible lorsque l'éclairement est stable et sombre. Il semble être 0 si l'éclairement change trop. J'ai lentement rapproché la lumière de l'iPhone et l'ai publiée deux fois.
$ python ./publish.py
1.42263737647
1.42263737647
1.42263737647
1.42263737647
1.42263737647
1.42263737647
1.42263737647
781.750737506
publish: 1
1212.30526902
publish: 2
2.45526898227
1.48479374557
119.459947915
287.1274
45.49168
0
0
1.45533948132
1.41892978382
1.41892978382