|
12 | 12 | BME280_I2C_ADDR = const(0x76) |
13 | 13 |
|
14 | 14 | class BME280(): |
15 | | - def __init__(self, i2c): |
| 15 | + def __init__(self, i2c, addr = BME280_I2C_ADDR): |
16 | 16 | self.i2c = i2c |
| 17 | + self.addr = addr |
| 18 | + self.tb = bytearray(1) |
| 19 | + self.rb = bytearray(1) |
17 | 20 | self.dig_T1 = self.get2Reg(0x88) |
18 | 21 | self.dig_T2 = self.short(self.get2Reg(0x8A)) |
19 | 22 | self.dig_T3 = self.short(self.get2Reg(0x8C)) |
@@ -48,32 +51,25 @@ def __init__(self, i2c): |
48 | 51 | self.H = 0 |
49 | 52 | self.version = '1.0' |
50 | 53 |
|
51 | | - def short(self, dat): |
| 54 | + def short(self, dat): |
52 | 55 | if dat > 32767: |
53 | 56 | return dat - 65536 |
54 | 57 | else: |
55 | 58 | return dat |
56 | 59 |
|
57 | 60 | # set reg |
58 | | - def setReg(self, reg, dat): |
59 | | - buf = bytearray(2) |
60 | | - buf[0] = reg |
61 | | - buf[1] = dat |
62 | | - self.i2c.writeto(BME280_I2C_ADDR, buf) |
63 | | - |
| 61 | + def setReg(self, reg, dat): |
| 62 | + self.tb[0] = dat |
| 63 | + self.i2c.writeto_mem(self.addr, reg, self.tb) |
| 64 | + |
64 | 65 | # get reg |
65 | | - def getReg(self, reg): |
66 | | - buf = bytearray(1) |
67 | | - buf[0] = reg |
68 | | - self.i2c.writeto(BME280_I2C_ADDR, buf) |
69 | | - t = self.i2c.readfrom(BME280_I2C_ADDR, 1) |
70 | | - return t[0] |
| 66 | + def getReg(self, reg): |
| 67 | + self.i2c.readfrom_mem_into(self.addr, reg, self.rb) |
| 68 | + return self.rb[0] |
71 | 69 |
|
72 | 70 | # get two reg |
73 | 71 | def get2Reg(self, reg): |
74 | | - a = self.getReg(reg) |
75 | | - b = self.getReg(reg + 1) |
76 | | - return a + b*256 |
| 72 | + return self.getReg(reg) + self.getReg(reg+1) * 256 |
77 | 73 |
|
78 | 74 | def get(self): |
79 | 75 | adc_T = (self.getReg(0xFA)<<12) + (self.getReg(0xFB)<<4) + (self.getReg(0xFC)>>4) |
@@ -136,4 +132,3 @@ def poweroff(self): |
136 | 132 | # normal mode |
137 | 133 | def poweron(self): |
138 | 134 | self.setReg(0xF4, 0x2F) |
139 | | - |
0 commit comments