def probe(i2c: I2C): dev = SMBusDevice(0x29, i2c, 100) result = dev.read_byte_data(0xB2) if result == 0x50: return Tsl2591(i2c) return None
def __init__(self, i2c: I2C, package: int, a0=False, a1=False, a2=False, address=None): if not address: address = 0x70 if a0: address |= 0x01 if a1: address |= 0x02 if a2: address |= 0x04 LedDriver.__init__(self, num_leds=package, has_global_brightness_control=True, has_individual_brightness_control=False) self._dev = SMBusDevice(address=address, i2c_module=i2c) self._dev.write_byte(0x21) self._package = package self._data = [False] * 128 self._set_global_brightness(1.0)
class Bh1750(AmbientLightSensor): """Rohm Semiconductor BH1750FVI ambient light sensor """ class Resolution: Medium, High, Low = range(3) def __init__(self, i2c: I2C, address_pin=False): super().__init__() self._resolution = 0 self._dev = SMBusDevice(0x5c if address_pin else 0x23, i2c, 100) self._dev.write_byte(0x07) # reset self.resolution = Bh1750.Resolution.High @property def resolution(self): return self._resolution @resolution.setter def resolution(self, value): if self._resolution == value: return self._resolution = value self._dev.write_byte(0x10 | self._resolution) def update(self): self._lux = self._dev.read_word_be() / 1.2
class Lm75(TemperatureSensor): """LM75 I2C temperature sensor, made by Texas Instruments, STMicroelectronics, NXP, and Maxim""" def __init__(self, i2c: I2C, a0=False, a1=False, a2=False): super().__init__() self._dev = SMBusDevice(0x48 | (a0 << 0) | (a1 << 1) | (a2 << 2), i2c) def update(self): data = sign_extend(self._dev.read_word_data_be(0), 16) self._celsius = data / 32 / 8
def __init__(self, i2c: I2C, alt_address=False, rate=100): super().__init__() self._dev = SMBusDevice((0x53 if alt_address else 0x1D), i2c, rate) self._registers = Adxl345Registers(self._dev) self._registers.powerCtl.sleep = 0 self._registers.powerCtl.measure = 1 self._registers.dataFormat.range = 0x03 self._registers.dataFormat.fullRes = 1 self._registers.writeRange(self._registers.powerCtl, self._registers.dataFormat)
def __init__(self, i2c: I2C): self.registers = Vcnl4010Registers(SMBusDevice(0x13, i2c)) self.registers.readRange(self.registers.command, self.registers.ambientLightParameters) self.registers.proximityRate.set_value(Rates.Hz_7_8125) self.registers.ledCurrent.irLedCurrentValue = 20 self.registers.ambientLightParameters.set_value(AlsRates.Hz_10) self.registers.ambientLightParameters.autoOffsetCompensation = 1 self.registers.ambientLightParameters.averagingSamples = 5 self.registers.writeRange(self.registers.command, self.registers.ambientLightParameters) self._raw_proximity = 0
def __init__(self, i2c: I2C, sdo=False, rate=100.0): super().__init__() self._registers = Bmp280Registers(SMBusDevice(0x76 if sdo is False else 0x77, i2c, rate)) self._registers.ctrlMeasure.mode = Modes.Normal self._registers.ctrlMeasure.oversamplingPressure = OversamplingPressures.Oversampling_x16 self._registers.ctrlMeasure.oversamplingTemperature = OversamplingTemperatures.Oversampling_x16 self._registers.ctrlMeasure.write() self._registers.readRange(self._registers.t1, self._registers.h1) self.t_fine = 0 self._altitude = 0 self.reference_pressure = 101325.0
def __init__(self, i2c: I2C, alt_address=False, rate=100): super().__init__() self._linear_acceleration = [0, 0, 0] self._quaternion = [0, 0, 0, 0] self._gravity = [0, 0, 0] self._eular_angles = [0, 0, 0] if alt_address: dev = SMBusDevice(0x29, i2c, rate) else: dev = SMBusDevice(0x28, i2c, rate) self._registers = Bno055Registers(dev) self._registers.operatingMode.operatingMode = OperatingModes.ConfigMode self._registers.operatingMode.write() self._registers.sysTrigger.resetSys = 1 self._registers.sysTrigger.write() self._registers.sysTrigger.resetSys = 0 dev_id = 0 while dev_id != 0xA0: try: self._registers.chipId.read() dev_id = self._registers.chipId.value except RuntimeError: pass sleep(0.05) self._registers.powerMode.powerMode = PowerModes.Normal self._registers.powerMode.write() sleep(0.01) self._registers.sysTrigger.selfTest = 0 self._registers.sysTrigger.write() sleep(0.01) self._registers.operatingMode.operatingMode = OperatingModes.NineDegreesOfFreedom self._registers.operatingMode.write() sleep(0.02)
def __init__(self, i2c: I2C, alt_address=False, rate=100): super().__init__() self._dev = SMBusDevice((0x69 if alt_address else 0x68), i2c, rate) self._registers = Mpu6050Registers(self._dev) self._registers.powerMgmt1.reset = 1 self._registers.powerMgmt1.write() self._registers.powerMgmt1.reset = 0 self._registers.powerMgmt1.sleep = 0 self._registers.powerMgmt1.write() self._registers.powerMgmt1.clockSel = 1 self._registers.powerMgmt1.write() self._registers.configuration.dlpf = 3 self._registers.configuration.write() self._registers.sampleRateDivider.value = 4 self._registers.sampleRateDivider.write() self._registers.accelConfig2.read() self._registers.accelConfig2.accelFchoice = 0 self._registers.accelConfig2.dlpfCfg = 3 self._registers.accelConfig2.write() self.accel_scale = 2
def probe(i2c: I2C, include_bme280=True, rate=100.0) -> List['Bmp280']: devs = [] # type: List['Bmp280'] try: dev = SMBusDevice(0x76, i2c, 100) who_am_i = dev.read_byte_data(0xD0) if who_am_i == 0x58 or (who_am_i == 0x60 and include_bme280): devs.append(Bmp280(i2c, False, rate)) except RuntimeError: pass try: dev = SMBusDevice(0x76, i2c, 100) who_am_i = dev.read_byte_data(0xD0) if who_am_i == 0x58 or (who_am_i == 0x60 and include_bme280): devs.append(Bmp280(i2c, True, rate)) except RuntimeError: pass return devs
def probe(i2c: I2C, include_mpu9250: bool) -> List['Mpu6050']: devs = [] # type: List['Mpu6050'] try: dev = SMBusDevice(0x68, i2c, 100) who_am_i = dev.read_byte_data(0x75) if who_am_i == 0x68 or (who_am_i == 0x71 and include_mpu9250): devs.append(Mpu6050(i2c, False)) except RuntimeError: pass try: dev = SMBusDevice(0x69, i2c, 100) who_am_i = dev.read_byte_data(0x75) if who_am_i == 0x68 or (who_am_i == 0x71 and include_mpu9250): devs.append(Mpu6050(i2c, False)) except RuntimeError: pass return devs
def probe(i2c: I2C) -> List['Bme280']: devs = [] # type: List['Bme280'] try: dev = SMBusDevice(0x76, i2c, 100) who_am_i = dev.read_byte_data(0xD0) if who_am_i == 0x60: devs.append(Bme280(i2c, False)) except RuntimeError: pass try: dev = SMBusDevice(0x76, i2c, 100) who_am_i = dev.read_byte_data(0xD0) if who_am_i == 0x60: devs.append(Bme280(i2c, True)) except RuntimeError: pass return devs
def probe(i2c: I2C) -> List['Mpu9250']: devs = [] # type: List['Mpu9250'] try: dev = SMBusDevice(0x68, i2c, 100) who_am_i = dev.read_byte_data(0x75) if who_am_i == 0x71: devs.append(Mpu9250(i2c, False)) except RuntimeError: pass try: dev = SMBusDevice(0x69, i2c, 100) who_am_i = dev.read_byte_data(0x75) if who_am_i == 0x71: devs.append(Mpu9250(i2c, True)) except RuntimeError: pass return devs
def probe(i2c: I2C, rate=100) -> List['Bno055']: devs = [] # type: List['Bno055'] try: dev = SMBusDevice(0x28, i2c, rate) who_am_i = dev.read_byte_data(0x00) if who_am_i == 0xa0: devs.append(Bno055(i2c, False, rate)) except RuntimeError: pass try: dev = SMBusDevice(0x29, i2c, rate) who_am_i = dev.read_byte_data(0x00) if who_am_i == 0xa0: devs.append(Bno055(i2c, False, rate)) except RuntimeError: pass return devs
class Ht16k33(LedDriver): """Holtek HT16K33 8x8 matrix LED driver This is a popular driver found in dev boards such as the [Adafruit LED backpack]( https://learn.adafruit.com/adafruit-led-backpack). Example: >>> from time import sleep >>> from treehopper.api import * >>> from treehopper.libraries.displays import Ht16k33 >>> board = find_boards()[0] >>> board.connect() >>> driver = Ht16k33(i2c=board.i2c, package=Ht16k33.Package.sop20) >>> while board.connected: >>> for led in driver.leds: >>> led.state = True >>> sleep(0.04) >>> for led in driver.leds: >>> led.state = False >>> sleep(0.04) """ _command_brightness = 0xe0 _command_blink = 0x80 def __init__(self, i2c: I2C, package: int, a0=False, a1=False, a2=False, address=None): if not address: address = 0x70 if a0: address |= 0x01 if a1: address |= 0x02 if a2: address |= 0x04 LedDriver.__init__(self, num_leds=package, has_global_brightness_control=True, has_individual_brightness_control=False) self._dev = SMBusDevice(address=address, i2c_module=i2c) self._dev.write_byte(0x21) self._package = package self._data = [False] * 128 self._set_global_brightness(1.0) def _set_global_brightness(self, value: float): if self.brightness > 0.0: self._dev.write_byte(Ht16k33._command_brightness | round(self.brightness * 16) - 1) self._dev.write_byte(Ht16k33._command_blink | 0x01) else: self._dev.write_byte(Ht16k33._command_blink | 0x00) def flush(self, force=False): pass def _led_state_changed(self, led: Led): index = int(16 * int(led.channel / (self._package / 8)) + (led.channel % (self._package / 8))) self._data[index] = led.state if self.auto_flush: address = int(index / 8) self._dev.write_byte_data(address, bit_list_to_bytes(self._data)[address]) def _led_brightness_changed(self, led: Led): pass class Package: sop20 = 64 sop24 = 96 sop28 = 128
def __init__(self, i2c: I2C): self._dev = SMBusDevice(0x5b, i2c) self.ambient = TempRegister(self._dev, 0x26) self.object = TempRegister(self._dev, 0x27)
def __init__(self, i2c: I2C): super().__init__() dev = SMBusDevice(0x0c, i2c) self._registers = Ak8975Registers(dev)
class Mcp9808(TemperatureSensor): """Microchip MCP9808 I2C temperature sensor""" @staticmethod def probe(i2c: I2C, rate=100) -> List['Mcp9808']: devs = [] # type: List['Mcp9808'] try: dev = SMBusDevice(0x18, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, False, False)) except RuntimeError: pass try: dev = SMBusDevice(0x19, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, False, False)) except RuntimeError: pass try: dev = SMBusDevice(0x1a, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, True, False)) except RuntimeError: pass try: dev = SMBusDevice(0x1b, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, True, False)) except RuntimeError: pass try: dev = SMBusDevice(0x1c, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, False, True)) except RuntimeError: pass try: dev = SMBusDevice(0x1d, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, False, True)) except RuntimeError: pass try: dev = SMBusDevice(0x1e, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, True, True)) except RuntimeError: pass try: dev = SMBusDevice(0x1f, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, True, True)) except RuntimeError: pass return devs def __init__(self, i2c: I2C, a0=False, a1=False, a2=False): super().__init__() self._dev = SMBusDevice(0x18 | (a0 << 0) | (a1 << 1) | (a2 << 2), i2c) def update(self): data = sign_extend(self._dev.read_word_data_be(0x05), 13) self._celsius = data / 16
def __init__(self, i2c: I2C, a0=False, a1=False, a2=False): super().__init__() self._dev = SMBusDevice(0x18 | (a0 << 0) | (a1 << 1) | (a2 << 2), i2c)
def probe(i2c: I2C, rate=100) -> List['Mcp9808']: devs = [] # type: List['Mcp9808'] try: dev = SMBusDevice(0x18, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, False, False)) except RuntimeError: pass try: dev = SMBusDevice(0x19, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, False, False)) except RuntimeError: pass try: dev = SMBusDevice(0x1a, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, True, False)) except RuntimeError: pass try: dev = SMBusDevice(0x1b, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, True, False)) except RuntimeError: pass try: dev = SMBusDevice(0x1c, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, False, True)) except RuntimeError: pass try: dev = SMBusDevice(0x1d, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, False, True)) except RuntimeError: pass try: dev = SMBusDevice(0x1e, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, False, True, True)) except RuntimeError: pass try: dev = SMBusDevice(0x1f, i2c, rate) who_am_i = dev.read_byte_data(0x07) if who_am_i == 0x04: devs.append(Mcp9808(i2c, True, True, True)) except RuntimeError: pass return devs
def __init__(self, i2c): super().__init__() self._registers = Tsl2591Registers(SMBusDevice(0x29, i2c, 100)) self._registers.enable.powerOn = 1 self._registers.enable.alsEnable = 1 self._registers.enable.write()
def __init__(self, i2c: I2C, address_pin=False): super().__init__() self._resolution = 0 self._dev = SMBusDevice(0x5c if address_pin else 0x23, i2c, 100) self._dev.write_byte(0x07) # reset self.resolution = Bh1750.Resolution.High