Skip to content

Commit 6252480

Browse files
committed
Add type annotations for basic.py
1 parent e1ca735 commit 6252480

File tree

1 file changed

+34
-27
lines changed

1 file changed

+34
-27
lines changed

adafruit_bme280/basic.py

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,13 @@
3535

3636
from micropython import const
3737

38+
try:
39+
from typing import Optional
40+
from busio import I2C, SPI
41+
from digitalio import DigitalInOut
42+
except ImportError:
43+
pass
44+
3845
__version__ = "2.6.4"
3946
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_BME280.git"
4047

@@ -81,7 +88,7 @@ class Adafruit_BME280:
8188
"""
8289

8390
# pylint: disable=too-many-instance-attributes
84-
def __init__(self):
91+
def __init__(self) -> None:
8592
"""Check the BME280 was found, read the coefficients and enable the sensor"""
8693
# Check device ID.
8794
chip_id = self._read_byte(_BME280_REGISTER_CHIPID)
@@ -102,7 +109,7 @@ def __init__(self):
102109
"""Pressure in hectoPascals at sea level. Used to calibrate `altitude`."""
103110
self._t_fine = None
104111

105-
def _read_temperature(self):
112+
def _read_temperature(self) -> None:
106113
# perform one measurement
107114
if self.mode != MODE_NORMAL:
108115
self.mode = MODE_FORCE
@@ -124,12 +131,12 @@ def _read_temperature(self):
124131

125132
self._t_fine = int(var1 + var2)
126133

127-
def _reset(self):
134+
def _reset(self) -> None:
128135
"""Soft reset the sensor"""
129136
self._write_register_byte(_BME280_REGISTER_SOFTRESET, 0xB6)
130137
sleep(0.004) # Datasheet says 2ms. Using 4ms just to be safe
131138

132-
def _write_ctrl_meas(self):
139+
def _write_ctrl_meas(self) -> None:
133140
"""
134141
Write the values to the ctrl_meas and ctrl_hum registers in the device
135142
ctrl_meas sets the pressure and temperature data acquisition options
@@ -138,15 +145,15 @@ def _write_ctrl_meas(self):
138145
self._write_register_byte(_BME280_REGISTER_CTRL_HUM, self.overscan_humidity)
139146
self._write_register_byte(_BME280_REGISTER_CTRL_MEAS, self._ctrl_meas)
140147

141-
def _get_status(self):
148+
def _get_status(self) -> int:
142149
"""Get the value from the status register in the device """
143150
return self._read_byte(_BME280_REGISTER_STATUS)
144151

145-
def _read_config(self):
152+
def _read_config(self) -> int:
146153
"""Read the value from the config register in the device """
147154
return self._read_byte(_BME280_REGISTER_CONFIG)
148155

149-
def _write_config(self):
156+
def _write_config(self) -> None:
150157
"""Write the value to the config register in the device """
151158
normal_flag = False
152159
if self._mode == MODE_NORMAL:
@@ -158,22 +165,22 @@ def _write_config(self):
158165
self.mode = MODE_NORMAL
159166

160167
@property
161-
def mode(self):
168+
def mode(self) -> int:
162169
"""
163170
Operation mode
164171
Allowed values are the constants MODE_*
165172
"""
166173
return self._mode
167174

168175
@mode.setter
169-
def mode(self, value):
176+
def mode(self, value: int) -> None:
170177
if not value in _BME280_MODES:
171178
raise ValueError("Mode '%s' not supported" % (value))
172179
self._mode = value
173180
self._write_ctrl_meas()
174181

175182
@property
176-
def _config(self):
183+
def _config(self) -> int:
177184
"""Value to be written to the device's config register """
178185
config = 0
179186
if self.mode == 0x03: # MODE_NORMAL
@@ -183,21 +190,21 @@ def _config(self):
183190
return config
184191

185192
@property
186-
def _ctrl_meas(self):
193+
def _ctrl_meas(self) -> int:
187194
"""Value to be written to the device's ctrl_meas register """
188195
ctrl_meas = self.overscan_temperature << 5
189196
ctrl_meas += self.overscan_pressure << 2
190197
ctrl_meas += self.mode
191198
return ctrl_meas
192199

193200
@property
194-
def temperature(self):
201+
def temperature(self) -> float:
195202
"""The compensated temperature in degrees Celsius."""
196203
self._read_temperature()
197204
return self._t_fine / 5120.0
198205

199206
@property
200-
def pressure(self):
207+
def pressure(self) -> Optional[float]:
201208
"""
202209
The compensated pressure in hectoPascals.
203210
returns None if pressure measurement is disabled
@@ -230,15 +237,15 @@ def pressure(self):
230237
return pressure
231238

232239
@property
233-
def relative_humidity(self):
240+
def relative_humidity(self) -> Optional[float]:
234241
"""
235242
The relative humidity in RH %
236243
returns None if humidity measurement is disabled
237244
"""
238245
return self.humidity
239246

240247
@property
241-
def humidity(self):
248+
def humidity(self) -> Optional[float]:
242249
"""
243250
The relative humidity in RH %
244251
returns None if humidity measurement is disabled
@@ -268,13 +275,13 @@ def humidity(self):
268275
return humidity
269276

270277
@property
271-
def altitude(self):
278+
def altitude(self) -> float:
272279
"""The altitude based on current :attr:`pressure` versus the sea level pressure
273280
(``sea_level_pressure``) - which you must enter ahead of time)"""
274281
pressure = self.pressure # in Si units for hPascal
275282
return 44330 * (1.0 - math.pow(pressure / self.sea_level_pressure, 0.1903))
276283

277-
def _read_coefficients(self):
284+
def _read_coefficients(self) -> None:
278285
"""Read & save the calibration coefficients"""
279286
coeff = self._read_register(0x88, 24) # BME280_REGISTER_DIG_T1
280287
coeff = list(struct.unpack("<HhhHhhhhhhhh", bytes(coeff)))
@@ -292,22 +299,22 @@ def _read_coefficients(self):
292299
self._humidity_calib[4] = float((coeff[4] << 4) | (coeff[3] >> 4))
293300
self._humidity_calib[5] = float(coeff[5])
294301

295-
def _read_byte(self, register):
302+
def _read_byte(self, register: int) -> int:
296303
"""Read a byte register value and return it"""
297304
return self._read_register(register, 1)[0]
298305

299-
def _read24(self, register):
306+
def _read24(self, register: int) -> float:
300307
"""Read an unsigned 24-bit value as a floating point and return it."""
301308
ret = 0.0
302309
for b in self._read_register(register, 3):
303310
ret *= 256.0
304311
ret += float(b & 0xFF)
305312
return ret
306313

307-
def _read_register(self, register, length):
314+
def _read_register(self, register: int, length: int) -> bytearray:
308315
raise NotImplementedError()
309316

310-
def _write_register_byte(self, register, value):
317+
def _write_register_byte(self, register: int, value: int) -> None:
311318
raise NotImplementedError()
312319

313320

@@ -358,22 +365,22 @@ class Adafruit_BME280_I2C(Adafruit_BME280):
358365
359366
"""
360367

361-
def __init__(self, i2c, address=0x77): # BME280_ADDRESS
368+
def __init__(self, i2c: I2C, address: int = 0x77) -> None: # BME280_ADDRESS
362369
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
363370
i2c_device,
364371
)
365372

366373
self._i2c = i2c_device.I2CDevice(i2c, address)
367374
super().__init__()
368375

369-
def _read_register(self, register, length):
376+
def _read_register(self, register: int, length: int) -> bytearray:
370377
with self._i2c as i2c:
371378
i2c.write(bytes([register & 0xFF]))
372379
result = bytearray(length)
373380
i2c.readinto(result)
374381
return result
375382

376-
def _write_register_byte(self, register, value):
383+
def _write_register_byte(self, register: int, value: int) -> None:
377384
with self._i2c as i2c:
378385
i2c.write(bytes([register & 0xFF, value & 0xFF]))
379386
# print("$%02X <= 0x%02X" % (register, value))
@@ -428,23 +435,23 @@ class Adafruit_BME280_SPI(Adafruit_BME280):
428435
429436
"""
430437

431-
def __init__(self, spi, cs, baudrate=100000):
438+
def __init__(self, spi: SPI, cs: DigitalInOut, baudrate: int = 100000) -> None:
432439
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
433440
spi_device,
434441
)
435442

436443
self._spi = spi_device.SPIDevice(spi, cs, baudrate=baudrate)
437444
super().__init__()
438445

439-
def _read_register(self, register, length):
446+
def _read_register(self, register: int, length: int) -> bytearray:
440447
register = (register | 0x80) & 0xFF # Read single, bit 7 high.
441448
with self._spi as spi:
442449
spi.write(bytearray([register])) # pylint: disable=no-member
443450
result = bytearray(length)
444451
spi.readinto(result) # pylint: disable=no-member
445452
return result
446453

447-
def _write_register_byte(self, register, value):
454+
def _write_register_byte(self, register: int, value: int) -> None:
448455
register &= 0x7F # Write, bit 7 low.
449456
with self._spi as spi:
450457
spi.write(bytes([register, value & 0xFF])) # pylint: disable=no-member

0 commit comments

Comments
 (0)