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