|
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