def __init__(self, slave=0x60, prescale0=0, prescale1=0, ledmode=0b1110): # Check parameter sanity pres0 = toint(prescale0) if not pres0 in range(0, 0xFF + 1): raise ValueError("prescale0 value %d out of range [%d..%d]" % (pres0, 0x00, 0xFF)) pres1 = toint(prescale1) if not pres1 in range(0, 0xFF + 1): raise ValueError("prescale1 value %d out of range [%d..%d]" % (pres1, 0x00, 0xFF)) lmode = toint(ledmode) if not lmode in range(0, 0x0F + 1): raise ValueError("ledmode value %d out of range [%d..%d]" % (lmode, 0x00, 0x0F)) # Go for it I2C.__init__(self, toint(slave)) PWM.__init__(self, self.PWM_CHANNELS, self.PWM_RESOLUTION, self.__calculateFrequency__(pres0)) DAC.__init__(self, self.DAC_CHANNELS, self.DAC_RESOLUTION, self.VREF) GPIOPort.__init__(self, self.GPIO_CHANNELS, self.GPIO_BANKS) d = bytearray(5) d[0] = pres0 d[1] = self.D_PWM0 d[2] = pres1 d[3] = self.D_PWM1 d[4] = lmode | 0xF0 self.writeRegisters((self.PSC0 | self.FLAG_AI), d)
def __init__(self, altitude=0, external=None, oversampling=0, filter=0, standby=0.5, slave=0x76): I2C.__init__(self, toint(slave)) Pressure.__init__(self, altitude, external) self.t1 = self.readUnsigned(0x88, 2) self.t2 = self.readSigned(0x8A, 2) self.t3 = self.readSigned(0x8C, 2) self.p1 = self.readUnsigned(0x8E, 2) self.p2 = self.readSigned(0x90, 2) self.p3 = self.readSigned(0x92, 2) self.p4 = self.readSigned(0x94, 2) self.p5 = self.readSigned(0x96, 2) self.p6 = self.readSigned(0x98, 2) self.p7 = self.readSigned(0x9A, 2) self.p8 = self.readSigned(0x9C, 2) self.p9 = self.readSigned(0x9E, 2) self.h1 = self.readUnsigned(0xA1, 1) self.h2 = self.readSigned(0xE1, 2) self.h3 = self.readUnsigned(0xE3, 1) self.h4 = (self.readUnsigned(0xE4, 1) << 4) | ( self.readUnsigned(0xE5, 1) & 0x0F) self.h5 = (self.readSigned(0xE6, 1) << 4) | ( self.readSigned(0xE5, 1) >> 4) self.h6 = self.readSigned(0xE7, 1) oversamplingBits = toint(oversampling).bit_length() self.writeRegister( 0xF2, oversamplingBits ) # Humidity oversampling. Must be set before temp/press oversampling (see datasheet 5.4.3). self.writeRegister( 0xF4, (oversamplingBits << 5) | (oversamplingBits << 2) | 0x03) # Pressure, temperature oversampling, sensor normal mode. standbyValues = { '0.5': 0, '10': 6, '20': 7, '62.5': 1, '125': 2, '250': 3, '500': 4, '1000': 5 } if standby in standbyValues: tStandbyBits = standbyValues[standby] else: tStandbyBits = 0 # Default to 0.5ms t_standby # logger.warn('Invalid value for standby: %s' % standby) spiBits = 0 # No SPI of course. filterBits = toint(filter) >> 1 self.writeRegister(0xF5, (tStandbyBits << 5) | (filterBits << 2) | spiBits)
def __init__(self, slave=0x18, resolution=12): I2C.__init__(self, toint(slave)) resolution = toint(resolution) if not resolution in range(9, 13): raise ValueError("%dbits resolution out of range [%d..%d]bits" % (resolution, 9, 12)) self.resolution = resolution self.writeRegister(0x08, (resolution - 9))
def __init__(self, chip, slave, channelCount, name): SPI.__init__(self, toint(chip), 0, 8, 10000000) MCP23XXX.__init__(self, channelCount) self.slave = self.SLAVE iocon_value = 0x08 # Hardware Address Enable iocon_addr = self.getAddress(self.IOCON) self.writeRegister(iocon_addr, iocon_value) self.slave = toint(slave) self.name = name
def setLedMode(self, led0Mode, led1Mode): # Example: pca9530instance.setLedMode(PCA9530.LED0_ON, PCA9530.LED1_RATE0) led0m = toint(led0Mode) if not led0m in range(0, 0x04): raise ValueError("led0Mode value %d out of range [%d..%d]" % (led0m, 0x00, 0x03)) led1m = toint(led1Mode) if not led1m in range(0, 0x04): raise ValueError("led1Mode value %d out of range [%d..%d]" % (led1m, 0x00, 0x03)) ledmode = (led0m | led1m << 2) | 0xF0 self.writeRegister(self.LSEL, ledmode)
def __init__(self, slave=0x40, frequency=50): I2C.__init__(self, toint(slave)) PWM.__init__(self, 16, 12, toint(frequency)) self.VREF = 0 self.prescale = int(25000000.0/((2**12)*self.frequency)) self.mode1 = self.M1_RESTART | self.M1_AI self.writeRegister(self.MODE1, self.M1_SLEEP) self.writeRegister(self.PRESCALE, self.prescale) time.sleep(0.01) self.writeRegister(self.MODE1, self.mode1)
def __init__(self, busnum=0, slave=0x40): I2C.__init__(self, toint(slave)) self.red = 0 self.green = 0 self.blue = 0 data = [ 0x05, 0x03, self.red, self.green, self.blue ] self.writeBytes(data)
def __init__(self, chip, channelCount, vref): SPI.__init__(self, toint(chip), 0, 8, 10000000) DAC.__init__(self, channelCount, 12, float(vref)) self.buffered=False self.gain=False self.shutdown=False self.values = [0 for i in range(channelCount)]
def __init__(self, chip, channelCount, resolution, name): SPI.__init__(self, toint(chip), 0, 8, 10000000) DAC.__init__(self, channelCount, resolution, 2.048) self.name = name self.buffered = False self.gain = False self.shutdown = True self.values = [0 for i in range(channelCount)]
def __init__(self, altitude=0, external=None): self.altitude = toint(altitude) if isinstance(external, str): self.external = deviceInstance(external) else: self.external = external if self.external != None and not isinstance(self.external, Temperature): raise Exception("external must be a Temperature sensor")
def __init__(self, slave=0x48, resolution=12): TMP102.__init__(self, slave) resolution = toint(resolution) if not resolution in range(9,13): raise ValueError("%dbits resolution out of range [%d..%d]bits" % (resolution, 9, 12)) self.resolution = resolution config = self.readRegister(0x01) config &= ~0x60 config |= (self.resolution - 9) << 5 self.writeRegister(0x01, config) self.readRegisters(0x00, 2)
def __init__(self, slave=0x20): slave = toint(slave) if slave in range(0x20, 0x28): self.name = "PCF8574" elif slave in range(0x38, 0x40): self.name = "PCF8574A" else: raise ValueError("Bad slave address for PCF8574(A) : 0x%02X not in range [0x20..0x27, 0x38..0x3F]" % slave) I2C.__init__(self, slave) GPIOPort.__init__(self, 8) self.portWrite(0xFF) self.portRead()
def __init__(self, slave=0b0010011, current=20, frequency=781, prox_threshold=15, prox_cycles=10, cal_cycles= 5): I2C.__init__(self, toint(slave)) self.setCurrent(toint(current)) self.setFrequency(toint(frequency)) self.prox_threshold = toint(prox_threshold) self.prox_cycles = toint(prox_cycles) self.cal_cycles = toint(cal_cycles) self.__setProximityTiming__() self.__setAmbientMeasuringMode__() time.sleep(0.001) self.calibrate() # may have to be repeated from time to time or before every proximity measurement
def __init__(self, slave, channelCount, resolution, name): I2C.__init__(self, toint(slave)) ADC.__init__(self, channelCount, resolution, 4.096) self._analogMax = 2**(resolution-1) self.name = name config = self.readRegisters(self.CONFIG, 2) mode = 0 # continuous config[0] &= ~self.CONFIG_MODE_MASK config[0] |= mode gain = 0x1 # FS = +/- 4.096V config[0] &= ~self.CONFIG_GAIN_MASK config[0] |= gain << 1 self.writeRegisters(self.CONFIG, config)
def __init__(self, slave=0x20): slave = toint(slave) I2C.__init__(self, slave) self.porta = self.LCD_LED_ON self.led = self.LCD_LED_ON self.writeRegister(self.MCP23008_IODIR, 0x00) self.writeRegisters( self.MCP23008_IODIR, [0b00000000, # IODIR 0b00000000, # IPOL 0b00000000, # GPINTEN 0b00000000, # DEFVAL 0b00000000, # INTCON 0b00000000, # IOCON 0b00000000, # GPPU 0b00000000, # INTF 0b00000000, # INTCAP self.porta | self.led, # GPIO self.porta | self.led ])# OLAT self.writeRegister( self.MCP23008_IOCON, 0x20 ) self.displayshift = (self.LCD_CURSORMOVE | self.LCD_MOVERIGHT) self.displaymode = (self.LCD_ENTRYLEFT | self.LCD_ENTRYSHIFTDECREMENT) self.displaycontrol = (self.LCD_DISPLAYON | self.LCD_CURSOROFF | self.LCD_BLINKOFF) self.write_lcd(self.LCD_DATA_E1, 0x33) # Init self.write_lcd(self.LCD_DATA_E1, 0x32) # Init self.write_lcd(self.LCD_DATA_E1, 0x24) # 2 line 5x8 matrix self.write_lcd(self.LCD_DATA_E1, 0x09) # 2 line 5x8 matrix self.write_lcd(self.LCD_DATA_E1, 0x20) # 2 line 5x8 matrix self.write_lcd(self.LCD_DATA_E1, self.LCD_CLEARDISPLAY) self.write_lcd(self.LCD_DATA_E1, self.LCD_CURSORSHIFT | self.displayshift) self.write_lcd(self.LCD_DATA_E1, self.LCD_ENTRYMODESET | self.displaymode) self.write_lcd(self.LCD_DATA_E1, self.LCD_DISPLAYCONTROL | self.displaycontrol) self.write_lcd(self.LCD_DATA_E1, self.LCD_RETURNHOME) self.write_lcd(self.LCD_DATA_E2, 0x33) # Init self.write_lcd(self.LCD_DATA_E2, 0x32) # Init self.write_lcd(self.LCD_DATA_E2, 0x24) # 2 line 5x8 matrix self.write_lcd(self.LCD_DATA_E2, 0x09) # 2 line 5x8 matrix self.write_lcd(self.LCD_DATA_E2, 0x20) # 2 line 5x8 matrix self.write_lcd(self.LCD_DATA_E2, self.LCD_CLEARDISPLAY) self.write_lcd(self.LCD_DATA_E2, self.LCD_CURSORSHIFT | self.displayshift) self.write_lcd(self.LCD_DATA_E2, self.LCD_ENTRYMODESET | self.displaymode) self.write_lcd(self.LCD_DATA_E2, self.LCD_DISPLAYCONTROL | self.displaycontrol) self.write_lcd(self.LCD_DATA_E2, self.LCD_RETURNHOME)
def extract(self, fmtArray, pathArray, args): if len(fmtArray) != len(pathArray): return False if len(fmtArray) == 0: return True fmt = fmtArray[0] path = pathArray[0] if fmt == path: return self.extract(fmtArray[1:], pathArray[1:], args) if fmt.startswith("%"): fmt = fmt[1:] t = 's' if fmt[0] == '(': if fmt[-1] == ')': name = fmt[1:-1] elif fmt[-2] == ')': name = fmt[1:-2] t = fmt[-1] else: raise Exception("Missing closing brace") else: name = fmt if t == 's': args[name] = path elif t == 'b': args[name] = types.str2bool(path) elif t == 'd': args[name] = types.toint(path) elif t == 'x': args[name] = int(path, 16) elif t == 'f': args[name] = float(path) else: raise Exception("Unknown format type : %s" % t) return self.extract(fmtArray[1:], pathArray[1:], args) return False
def __init__(self, slave=0x48, vref=3.3): I2C.__init__(self, toint(slave)) DAC.__init__(self, 5, 8, float(vref)) self.daValue = 0
def __init__(self, slave, time, gain, name="TSL2561X"): TSL_LIGHT_X.__init__(self, slave, time, name) self.setGain(toint(gain))
def __init__(self, pin="4"): self.pin = toint(pin) pass
def __init__(self, slave, time, name="TSL_LIGHT_X"): I2C.__init__(self, toint(slave)) self.name = name self.wake() # devices are powered down after power reset, wake them self.setTime(toint(time))
def __init__(self, chip, channelCount, resolution, name): SPI.__init__(self, toint(chip), 0, 8, 10000) ADC.__init__(self, channelCount, resolution, 3.3) self.name = name self.MSB_MASK = 2**(resolution-8) - 1
def __init__(self, slave=0x0a): I2C.__init__(self, toint(slave)) I2C.writeRegister(self, self.slave, self.STOP_SCRIPT)
def __init__(self, slave, channelCount, name): I2C.__init__(self, toint(slave)) MCP23XXX.__init__(self, channelCount) self.name = name
def __init__(self, slave=0x60): I2C.__init__(self, toint(slave)) DAC.__init__(self, 1, 12, 3.3)
def __init__(self, slave=0x60, vref=3.3): I2C.__init__(self, toint(slave)) DAC.__init__(self, 1, 12, float(vref))
def __init__(self, slave=0x28): I2C.__init__(self, toint(slave)) self.__startMeasuring__()
def __init__(self, slave=0x48): I2C.__init__(self, toint(slave))