|
86 | 86 |
|
87 | 87 |
|
88 | 88 | class BMP280:
|
89 |
| - def __init__(self, i2c_bus, addr=0x76, use_case=BMP280_CASE_HANDHELD_DYN): |
90 |
| - self._bmp_i2c = i2c_bus |
91 |
| - self._i2c_addr = addr |
| 89 | + # when 'bus' is an I2C object, 'addr_cs' is I2C address |
| 90 | + # when 'bus' is an SPI object, 'addr_cs' is Pin object of the CS pin |
| 91 | + def __init__(self, bus, addr_cs=0x76, use_case=BMP280_CASE_HANDHELD_DYN): |
| 92 | + self._bmp_bus = bus |
| 93 | + self._addr_cs = addr_cs |
92 | 94 |
|
93 | 95 | # read calibration data
|
94 | 96 | # < little-endian
|
@@ -123,12 +125,25 @@ def __init__(self, i2c_bus, addr=0x76, use_case=BMP280_CASE_HANDHELD_DYN):
|
123 | 125 | self.use_case(use_case)
|
124 | 126 |
|
125 | 127 | def _read(self, addr, size=1):
|
126 |
| - return self._bmp_i2c.readfrom_mem(self._i2c_addr, addr, size) |
| 128 | + if hasattr(self._bmp_bus, 'readfrom_mem'): |
| 129 | + return self._bmp_bus.readfrom_mem(self._addr_cs, addr, size) |
| 130 | + else: |
| 131 | + self._addr_cs(0) |
| 132 | + self._bmp_bus.write(bytearray([addr])) |
| 133 | + dat = self._bmp_bus.read(size) |
| 134 | + self._addr_cs(1) |
| 135 | + return dat |
127 | 136 |
|
128 | 137 | def _write(self, addr, b_arr):
|
129 | 138 | if not type(b_arr) is bytearray:
|
130 | 139 | b_arr = bytearray([b_arr])
|
131 |
| - return self._bmp_i2c.writeto_mem(self._i2c_addr, addr, b_arr) |
| 140 | + if hasattr(self._bmp_bus, 'writeto_mem'): |
| 141 | + return self._bmp_bus.writeto_mem(self._addr_cs, addr, b_arr) |
| 142 | + else: |
| 143 | + self._addr_cs(0) |
| 144 | + ret = self._bmp_bus.write(bytearray([addr & 0x7f]) + b_arr) |
| 145 | + self._addr_cs(1) |
| 146 | + return ret |
132 | 147 |
|
133 | 148 | def _gauge(self):
|
134 | 149 | # TODO limit new reads
|
|
0 commit comments