Code: Select all
"""TMP100 driver for ESP8266 in MicroPython."""
from machine import I2C
class TMP100:
# Registers
T_REG = 0x00
CONF_REG = 0x01
# Configuration Register
SHUTDOWN = 0x01
RES_9bits = 0x00 # 9bits, 0.5C, 40ms
RES_10bits = 0x20 # 10bits, 0.25C, 80ms
RES_11bits = 0x40 # 11bits, 0.125C, 160ms
RES_12bits = 0x60 # 12bits, 0.0625C, 320ms
ONESHOT = 0x80
def __init__(self, scl, sda, addr, res):
self.i2c = I2C(scl=scl, sda=sda, freq=400000)
self.write_address = addr
self.read_address = addr | 0x01
self.set_resolution(res)
def write_register(self, reg, data):
buf = bytearray(1)
self.i2c.start()
buf[0] = self.write_address
self.i2c.write(buf)
buf[0] = reg
self.i2c.write(buf)
buf[0] = data
self.i2c.write(buf)
self.i2c.stop()
def read_register(self, reg):
buf = bytearray(1)
self.i2c.start()
buf[0] = self.write_address
self.i2c.write(buf)
buf[0] = reg
self.i2c.write(buf)
self.i2c.start()
buf[0] = self.read_address
self.i2c.write(buf)
if reg == self.T_REG:
rbuf = bytearray(2)
elif reg == self.CONF_REG:
rbuf = bytearray(1)
self.i2c.readinto(rbuf)
self.i2c.stop()
return rbuf
def set_resolution(self, res):
current = self.read_register(self.CONF_REG)[0] & 0x9F
self.write_register(self.CONF_REG, current | res)
def set_shutdown(self, state):
current = self.read_register(self.CONF_REG)[0] & 0xFE
if state is True:
self.write_register(self.CONF_REG, current | self.SHUTDOWN)
else:
self.write_register(self.CONF_REG, current)
def set_oneshot(self):
current = self.read_register(self.CONF_REG)[0] & 0xEF
self.write_register(self.CONF_REG, current | self.ONESHOT)
def read_temp(self):
t = self.read_register(self.T_REG)
return ((t[0] << 8 | t[1]) >> 4) * 0.0625
Code: Select all
>>> from tmp100 import TMP100
>>> from machine import Pin
>>> mytmp = TMP100(Pin(5), Pin(4), 0x90, TMP100.RES_9bits)
>>> mytmp.read_temp()
23.5
>>> mytmp.set_resolution(TMP100.RES_12bits)
>>> mytmp.read_temp()
23.875