Skip to content

Instantly share code, notes, and snippets.

@cwyark
Last active June 7, 2017 09:24
Show Gist options
  • Save cwyark/12b59a2d868f1ac369bb8577ba2575ec to your computer and use it in GitHub Desktop.
Save cwyark/12b59a2d868f1ac369bb8577ba2575ec to your computer and use it in GitHub Desktop.
sht2x driver for MicroPython
import utime as time
import umachine as machine
sht20_i2c_addr = 0b1000000 #0b1000000 = 0x40
cmd_reset = 0b11111110 # 0b11111110 = 0xFE
cmd_trigger_temp_measurement_with_hold = 0b11100011
cmd_trigger_humi_measurement_with_hold = 0b11100101
cmd_trigger_temp_measurement_without_hold = 0b11110011
cmd_trigger_humi_measurement_without_hold = 0b11110101
cmd_user_register_read = 0b11100111
class SHT20Drv:
def __init__(self, i2c):
if type(i2c) is not machine.I2C:
raise ValueError("not a valid i2c object")
self.i2c = i2c
def soft_reset(self):
self.i2c.send(cmd_reset, sht20_i2c_addr)
def readTemp(self):
self.i2c.send(cmd_trigger_temp_measurement_with_hold, sht20_i2c_addr)
time.sleep_ms(80)
ret = self.i2c.recv(3, sht20_i2c_addr)
raw = (ret[0] << 8) + ret[1]
raw &= ~0x0003;
return (self.temp_conversion(raw), raw, ret[2])
def readHumi(self):
self.i2c.send(cmd_trigger_humi_measurement_with_hold, sht20_i2c_addr)
time.sleep_ms(29)
ret = self.i2c.recv(3, sht20_i2c_addr)
raw = (ret[0] << 8) + ret[1]
raw &= ~0x0003;
return (self.humi_conversion(raw), raw, ret[2])
def temp_conversion(self, raw):
conversion = -46.85 + (175.72 * raw) / 2**16
return conversion
def humi_conversion(self, raw):
conversion = -6 + (125 * raw) / 2**16
return conversion
def readUserRegister(self):
self.i2c.send(cmd_user_register_read, sht20_i2c_addr)
return self.i2c.recv(1, sht20_i2c_addr)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment