예제 #1
0
    def probe(i2c: I2C):
        dev = SMBusDevice(0x29, i2c, 100)
        result = dev.read_byte_data(0xB2)
        if result == 0x50:
            return Tsl2591(i2c)

        return None
예제 #2
0
    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)
예제 #3
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
예제 #4
0
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
예제 #5
0
 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)
예제 #6
0
 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
예제 #7
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
예제 #8
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)
예제 #9
0
 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
예제 #10
0
    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
예제 #11
0
    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
예제 #12
0
    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
예제 #13
0
    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
예제 #14
0
    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
예제 #15
0
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
예제 #16
0
 def __init__(self, i2c: I2C):
     self._dev = SMBusDevice(0x5b, i2c)
     self.ambient = TempRegister(self._dev, 0x26)
     self.object = TempRegister(self._dev, 0x27)
예제 #17
0
 def __init__(self, i2c: I2C):
     super().__init__()
     dev = SMBusDevice(0x0c, i2c)
     self._registers = Ak8975Registers(dev)
예제 #18
0
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
예제 #19
0
 def __init__(self, i2c: I2C, a0=False, a1=False, a2=False):
     super().__init__()
     self._dev = SMBusDevice(0x18 | (a0 << 0) | (a1 << 1) | (a2 << 2), i2c)
예제 #20
0
    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
예제 #21
0
 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()
예제 #22
0
 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