Skip to content

Commit 3a4f322

Browse files
committed
add si7051 high accuracy temperature sensors
1 parent f53a901 commit 3a4f322

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

‎sensor/si7051/si7051.py‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
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

Comments
 (0)