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 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