|
| 1 | +from machine import I2C |
| 2 | +from time import sleep_ms |
| 3 | + |
| 4 | +SI7051_I2C_ADDR = 0x40 |
| 5 | +SI7051_CMD_HOLD_MODE = b'\xE3' |
| 6 | +SI7051_CMD_NO_HOLD_MODE = b'\xF3' |
| 7 | +SI7051_CMD_RESET = b'\xFE' |
| 8 | +SI7051_CMD_WRITE_USER_REG1 = b'\xE6' |
| 9 | +SI7051_CMD_READ_USER_REG1 = b'\xE7' |
| 10 | +SI7051_CMD_READ_ID1 = b'\xFA\x0F' |
| 11 | +SI7051_CMD_READ_ID2 = b'\xFC\xC9' |
| 12 | +SI7051_CMD_READ_REV = b'\x84\xB8' |
| 13 | + |
| 14 | +class si7051(): |
| 15 | + def __init__(self, i2c): |
| 16 | + self.i2c = i2c |
| 17 | + |
| 18 | + # get reg |
| 19 | + def getReg(self, buf, n=1): |
| 20 | + self.i2c.writeto(SI7051_I2C_ADDR, buf) |
| 21 | + t = self.i2c.readfrom(SI7051_I2C_ADDR, n) |
| 22 | + return t |
| 23 | + |
| 24 | + def ID(self): |
| 25 | + a = self.getReg(SI7051_CMD_READ_ID1, 4) |
| 26 | + b = self.getReg(SI7051_CMD_READ_ID2, 4) |
| 27 | + return hex(int.from_bytes(a+b,''))[2:] |
| 28 | + |
| 29 | + def REV(self): |
| 30 | + a = self.getReg(SI7051_CMD_READ_REV) |
| 31 | + return a[0] |
| 32 | + |
| 33 | + def UserReg(self, reg=''): |
| 34 | + if reg == '': |
| 35 | + return self.getReg(SI7051_CMD_READ_USER_REG1)[0] |
| 36 | + else: |
| 37 | + self.i2c.writeto(SI7051_I2C_ADDR, bytearray(SI7051_CMD_WRITE_USER_REG1) + bytearray([reg])) |
| 38 | + |
| 39 | + def name(self): |
| 40 | + a = self.getReg(SI7051_CMD_READ_ID2, 4)[0] |
| 41 | + return 'si70'+str(a) |
| 42 | + |
| 43 | + def Temperature(self, digital=2, delay=10): |
| 44 | + self.i2c.writeto(SI7051_I2C_ADDR, SI7051_CMD_NO_HOLD_MODE) |
| 45 | + sleep_ms(delay) |
| 46 | + a = self.i2c.readfrom(SI7051_I2C_ADDR, 2) |
| 47 | + b = a[0]*256 + a[1] |
| 48 | + return round(b*175.72/65536 - 46.85, digital) |
| 49 | + |
0 commit comments