Source code for SEEL.SENSORS.TSL2561

'''
Adapted from https://github.com/janheise/TSL2561
'''

from __future__ import print_function
import time

[docs]def connect(route,**args): return TSL2561(route,**args)
[docs]class TSL2561: VISIBLE = 2 # channel 0 - channel 1 INFRARED = 1 # channel 1 FULLSPECTRUM = 0 # channel 0 READBIT = 0x01 COMMAND_BIT = 0x80 # Must be 1 CONTROL_POWERON = 0x03 CONTROL_POWEROFF = 0x00 REGISTER_CONTROL = 0x00 REGISTER_TIMING = 0x01 REGISTER_ID = 0x0A INTEGRATIONTIME_13MS = 0x00 # 13.7ms INTEGRATIONTIME_101MS = 0x01 # 101ms INTEGRATIONTIME_402MS = 0x02 # 402ms GAIN_1X = 0x00 # No gain GAIN_16X = 0x10 # 16x gain ADDRESS = 0x39 #addr normal timing = INTEGRATIONTIME_13MS gain = GAIN_16X name = 'TSL2561 Luminosity' ADDRESS = 0x39 NUMPLOTS=3 PLOTNAMES = ['Full','IR','Visible'] def __init__(self, I2C,**args): self.ADDRESS = args.get('address',0x39) self.I2C = I2C # set timing 101ms & 16x gain self.enable() self.wait() self.I2C.writeBulk(self.ADDRESS,[0x80 | 0x01, 0x01 | 0x10 ]) # full scale luminosity infra = self.I2C.readBulk(self.ADDRESS,0x80 | 0x20 | 0x0E ,2) full = self.I2C.readBulk(self.ADDRESS,0x80 | 0x20 | 0x0C ,2) full = (full[1]<<8)|full[0] infra = (infra[1]<<8)|infra[0] print("Full: %04x" % full) print("Infrared: %04x" % infra) print("Visible: %04x" % (full - infra) ) #self.I2C.writeBulk(self.ADDRESS,[0x80,0x00]) self.params={'setGain':['1x','16x'],'setTiming':[0,1,2]}
[docs] def getID(self): ID=self.I2C.readBulk(self.ADDRESS,self.REGISTER_ID ,1) print (hex(ID)) return ID
[docs] def getRaw(self): infra = self.I2C.readBulk(self.ADDRESS,0x80 | 0x20 | 0x0E ,2) full = self.I2C.readBulk(self.ADDRESS,0x80 | 0x20 | 0x0C ,2) if infra and full: full = (full[1]<<8)|full[0] infra = (infra[1]<<8)|infra[0] return [full,infra,full-infra] else: return False
[docs] def setGain(self, gain): if(gain=='1x'):self.gain = self.GAIN_1X elif(gain=='16x'):self.gain = self.GAIN_16X else: self.gain = self.GAIN_0X self.I2C.writeBulk(self.ADDRESS,[self.COMMAND_BIT | self.REGISTER_TIMING, self.gain | self.timing])
[docs] def setTiming(self, timing): print ([13,101,402][timing],'mS') self.timing = timing self.I2C.writeBulk(self.ADDRESS,[self.COMMAND_BIT | self.REGISTER_TIMING, self.gain | self.timing])
[docs] def enable(self): self.I2C.writeBulk(self.ADDRESS,[self.COMMAND_BIT | self.REGISTER_CONTROL, self.CONTROL_POWERON])
[docs] def disable(self): self.I2C.writeBulk(self.ADDRESS,[self.COMMAND_BIT | self.REGISTER_CONTROL, self.CONTROL_POWEROFF])
[docs] def wait(self): if self.timing == self.INTEGRATIONTIME_13MS: time.sleep(0.14) if self.timing == self.INTEGRATIONTIME_101MS: time.sleep(0.102) if self.timing == self.INTEGRATIONTIME_402MS: time.sleep(0.403)