Wenn ich versuche, das I2C-kompatible Modul des Beleuchtungsstärkesensors TSL2561 zu verwenden, finde ich es problematisch. Es basiert auf einer Reihe von Python-Modulen, und aus irgendeinem Grund enthält das Beispielprogramm Hunderte von Zeilen.
http://qiita.com/masato/items/1dd5bed82b19477b45d8 http://shimobayashi.hatenablog.com/entry/2015/07/27/001708
Ich dachte, wenn es ein I2C-kompatibler Sensor wäre, könnte ich ihn einfach mit dem smbus-Modul schreiben können.
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)
Ich habe das Datenblatt gelesen, um herauszufinden, warum das Beispielprogramm kompliziert ist.
・ Sowohl sichtbares Licht als auch Infrarotlicht können erfasst werden. ・ Es können zwei Empfindlichkeitstypen ausgewählt werden, 1x und 16x. ・ Die Integrationszeit kann zwischen 13,7 ms / 101 ms / 402 ms gewählt werden
・ Der Wert der erfassten Daten ist nicht proportional zum Wert von Lux, und für jeden Fall ist ein Umrechnungskoeffizient erforderlich. ・ TSL2561 ist grob in zwei Typen unterteilt, T-, FN-, CL-Serie und CS-Serie, und ihre Koeffizienten sind unterschiedlich.
Aus diesem Grund verfügt ein Programm, das für alle TSL2561 genaue Lux-Werte erhalten kann, über eine angemessene Anzahl von Zeilen. Wenn Sie nur Ihre eigene Hardware unterstützen möchten, benötigen Sie keine zwei Arten der Konvertierungsverarbeitung, und nur ein Typ reicht aus. Erstens, wenn es sich um eine übliche Anwendung wie "Licht einschalten, wenn es dunkel wird" handelt, kann der Konvertierungsprozess des Lux-Werts als nur sichtbares Licht weggelassen werden, sodass er so kurz wie das obige Programm geschrieben werden kann.
Außerdem ist Adafruit_I2C.py ein dünner Wrapper für smbus, daher ist er ohne ihn ziemlich gut.