Lorsque j'essaye d'utiliser le module compatible I2C du capteur d'éclairement TSL2561, je trouve cela gênant. Il repose sur un certain nombre de modules Python et, pour une raison quelconque, l'exemple de programme comporte des centaines de lignes.
http://qiita.com/masato/items/1dd5bed82b19477b45d8 http://shimobayashi.hatenablog.com/entry/2015/07/27/001708
Je pensais que s'il s'agissait d'un capteur compatible I2C, je devrais pouvoir l'écrire simplement avec le module smbus.
https://github.com/aike/SimpleTSL2561.py
SimpleTSL2561.py
#!/usr/bin/python
#
# SimpleTSL2561.py by aike
# licenced under MIT License.
#
import smbus
import time
class SimpleTSL2561:
def __init__(self, address=0x39):
self.bus = smbus.SMBus(1)
self.address = address
self.write8(0x80, 0x03) # 0x03=PowerON 0x00=PowerOFF
def write8(self, reg, value):
try:
self.bus.write_byte_data(self.address, reg, value)
except IOError, err:
print "IO Error"
def readU16(self, reg):
try:
result = self.bus.read_word_data(self.address,reg)
return result
except IOError, err:
print "IO Error"
return 0
def setParam(self, param):
# param gain integral
# 0 x 1 13.7 ms
# 1 x 1 101 ms
# 2 x 1 402 ms (default)
# 3 x 16 13.7 ms
# 4 x 16 101 ms
# 5 x 16 402 ms
if param >= 3:
param = param - 3 + 16
self.write8(0x81, param)
def readData(self):
return self.readU16(0xAC)
if __name__ == "__main__":
tsl = SimpleTSL2561()
while True:
print tsl.readData()
time.sleep(1)
J'ai lu la fiche technique pour découvrir pourquoi l'exemple de programme est compliqué.
・ La lumière visible et la lumière infrarouge peuvent être détectées. ・ Deux types de sensibilité, 1x et 16x, peuvent être sélectionnés. ・ Le temps d'intégration peut être sélectionné entre 13,7 ms / 101 ms / 402 ms
・ La valeur des données acquises n'est pas proportionnelle à la valeur de lux, et un coefficient de conversion pour chaque cas est requis. ・ TSL2561 est à peu près divisé en deux types, les séries T, FN, CL et CS, et leurs coefficients sont différents.
C'est pourquoi un programme qui peut obtenir des valeurs lux précises pour tous les TSL2561 a un nombre raisonnable de lignes. Si vous souhaitez uniquement prendre en charge votre propre matériel, vous n'avez pas besoin de deux types de traitement de conversion et un seul type suffit. En premier lieu, s'il s'agit d'une application courante telle que "allumer la lumière quand il fait noir", le processus de conversion de la valeur de lux peut être omis en tant que lumière visible uniquement, de sorte qu'il peut être écrit aussi court que le programme ci-dessus.
De plus, Adafruit_I2C.py est un wrapper fin pour smbus, donc c'est plutôt bien sans lui.
Recommended Posts