|
1 | 1 | import time
|
| 2 | +from machine import I2C |
2 | 3 |
|
3 | 4 | class SI7006A20:
|
4 |
| - |
5 | 5 | SI7006A20_I2C_ADDR = const(0x40)
|
6 | 6 | TEMP_NOHOLDMASTER = const(0xF3)
|
7 | 7 | HUMD_NOHOLDMASTER = const(0xF5)
|
8 | 8 |
|
9 |
| - def __init__(self, pysense=None, sda='P22', scl='P21'): |
| 9 | + def __init__(self, pysense = None, sda = 'P22', scl = 'P21'): |
10 | 10 | if pysense is not None:
|
11 | 11 | self.i2c = pysense.i2c
|
12 | 12 | else:
|
13 |
| - from machine import I2C |
14 | 13 | self.i2c = I2C(0, mode=I2C.MASTER, pins=(sda, scl))
|
15 | 14 |
|
16 |
| - def _concat_hex(self, a, b): |
17 |
| - sizeof_b = 0 |
18 |
| - while((b >> sizeof_b) > 0): |
19 |
| - sizeof_b += 1 |
20 |
| - sizeof_b += sizeof_b % 8 |
21 |
| - return (a << sizeof_b) | b |
| 15 | + def _getWord(self, high, low): |
| 16 | + return ((high & 0xFF) << 8) + (low & 0xFF) |
22 | 17 |
|
23 |
| - def temp(self, unit=None): |
| 18 | + def temperature(self): |
24 | 19 | self.i2c.writeto(SI7006A20_I2C_ADDR, bytearray([0xF3]))
|
25 | 20 | time.sleep(0.5)
|
26 |
| - data = self.i2c.readfrom(SI7006A20_I2C_ADDR,2) |
27 |
| - data0 = data[0] |
28 |
| - data1 = data[1] |
29 |
| - data = self._concat_hex(data0, data1) |
| 21 | + data = self.i2c.readfrom(SI7006A20_I2C_ADDR, 2) |
| 22 | + data = self._getWord(data[0], data[1]) |
30 | 23 | temp = ((175.72 * data) / 65536.0) - 46.85
|
31 |
| - if unit == 'F': |
32 |
| - temp = temp * 1.8 + 32 |
33 | 24 | return temp
|
34 | 25 |
|
35 | 26 | def humidity(self):
|
36 | 27 | self.i2c.writeto(SI7006A20_I2C_ADDR, bytearray([0xF5]))
|
37 | 28 | time.sleep(0.5)
|
38 |
| - data = self.i2c.readfrom(SI7006A20_I2C_ADDR,2) |
39 |
| - data0 = data[0] |
40 |
| - data1 = data[1] |
41 |
| - data = self._concat_hex(data0, data1) |
42 |
| - humidity = ((125.0 * data) / 65536.0) + 6.0 |
| 29 | + data = self.i2c.readfrom(SI7006A20_I2C_ADDR, 2) |
| 30 | + data = self._getWord(data[0], data[1]) |
| 31 | + humidity = ((125.0 * data) / 65536.0) - 6.0 |
43 | 32 | return humidity
|
0 commit comments