22#
33# SPDX-License-Identifier: MIT
44
5+ # SPDX-FileCopyrightText: 2022 Bill Van Leeuwen for Adafruit Industries
6+ #
7+ # SPDX-License-Identifier: MIT
8+
59"""
610`adafruit_bmp280`
711===============================================================================
3034
3135from micropython import const
3236
37+
38+ try :
39+ from typing import Optional
40+
41+ # Used only for type annotations.
42+ from busio import SPI , I2C
43+ from digitalio import DigitalInOut
44+
45+ except ImportError :
46+ pass
47+
3348__version__ = "0.0.0-auto.0"
3449__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_BMP280.git"
3550
@@ -121,7 +136,7 @@ class Adafruit_BMP280: # pylint: disable=invalid-name
121136
122137 """
123138
124- def __init__ (self ):
139+ def __init__ (self ) -> None :
125140 # Check device ID.
126141 chip_id = self ._read_byte (_REGISTER_CHIPID )
127142 if _CHIP_ID != chip_id :
@@ -140,7 +155,7 @@ def __init__(self):
140155 """Pressure in hectoPascals at sea level. Used to calibrate `altitude`."""
141156 self ._t_fine = None
142157
143- def _read_temperature (self ):
158+ def _read_temperature (self ) -> None :
144159 # perform one measurement
145160 if self .mode != MODE_NORMAL :
146161 self .mode = MODE_FORCE
@@ -164,27 +179,27 @@ def _read_temperature(self):
164179 self ._t_fine = int (var1 + var2 )
165180 # print("t_fine: ", self.t_fine)
166181
167- def _reset (self ):
182+ def _reset (self ) -> None :
168183 """Soft reset the sensor"""
169184 self ._write_register_byte (_REGISTER_SOFTRESET , 0xB6 )
170185 sleep (0.004 ) # Datasheet says 2ms. Using 4ms just to be safe
171186
172- def _write_ctrl_meas (self ):
187+ def _write_ctrl_meas (self ) -> None :
173188 """
174189 Write the values to the ctrl_meas register in the device
175190 ctrl_meas sets the pressure and temperature data acquisition options
176191 """
177192 self ._write_register_byte (_REGISTER_CTRL_MEAS , self ._ctrl_meas )
178193
179- def _get_status (self ):
194+ def _get_status (self ) -> int :
180195 """Get the value from the status register in the device"""
181196 return self ._read_byte (_REGISTER_STATUS )
182197
183- def _read_config (self ):
198+ def _read_config (self ) -> int :
184199 """Read the value from the config register in the device"""
185200 return self ._read_byte (_REGISTER_CONFIG )
186201
187- def _write_config (self ):
202+ def _write_config (self ) -> None :
188203 """Write the value to the config register in the device"""
189204 normal_flag = False
190205 if self ._mode == MODE_NORMAL :
@@ -196,30 +211,30 @@ def _write_config(self):
196211 self .mode = MODE_NORMAL
197212
198213 @property
199- def mode (self ):
214+ def mode (self ) -> int :
200215 """
201216 Operation mode
202217 Allowed values are set in the MODE enum class
203218 """
204219 return self ._mode
205220
206221 @mode .setter
207- def mode (self , value ) :
222+ def mode (self , value : int ) -> None :
208223 if not value in _BMP280_MODES :
209224 raise ValueError ("Mode '%s' not supported" % (value ))
210225 self ._mode = value
211226 self ._write_ctrl_meas ()
212227
213228 @property
214- def standby_period (self ):
229+ def standby_period (self ) -> int :
215230 """
216231 Control the inactive period when in Normal mode
217232 Allowed standby periods are set the STANDBY enum class
218233 """
219234 return self ._t_standby
220235
221236 @standby_period .setter
222- def standby_period (self , value ) :
237+ def standby_period (self , value : int ) -> None :
223238 if not value in _BMP280_STANDBY_TCS :
224239 raise ValueError ("Standby Period '%s' not supported" % (value ))
225240 if self ._t_standby == value :
@@ -228,52 +243,52 @@ def standby_period(self, value):
228243 self ._write_config ()
229244
230245 @property
231- def overscan_temperature (self ):
246+ def overscan_temperature (self ) -> int :
232247 """
233248 Temperature Oversampling
234249 Allowed values are set in the OVERSCAN enum class
235250 """
236251 return self ._overscan_temperature
237252
238253 @overscan_temperature .setter
239- def overscan_temperature (self , value ) :
254+ def overscan_temperature (self , value : int ) -> None :
240255 if not value in _BMP280_OVERSCANS :
241256 raise ValueError ("Overscan value '%s' not supported" % (value ))
242257 self ._overscan_temperature = value
243258 self ._write_ctrl_meas ()
244259
245260 @property
246- def overscan_pressure (self ):
261+ def overscan_pressure (self ) -> int :
247262 """
248263 Pressure Oversampling
249264 Allowed values are set in the OVERSCAN enum class
250265 """
251266 return self ._overscan_pressure
252267
253268 @overscan_pressure .setter
254- def overscan_pressure (self , value ) :
269+ def overscan_pressure (self , value : int ) -> None :
255270 if not value in _BMP280_OVERSCANS :
256271 raise ValueError ("Overscan value '%s' not supported" % (value ))
257272 self ._overscan_pressure = value
258273 self ._write_ctrl_meas ()
259274
260275 @property
261- def iir_filter (self ):
276+ def iir_filter (self ) -> int :
262277 """
263278 Controls the time constant of the IIR filter
264279 Allowed values are set in the IIR_FILTER enum class
265280 """
266281 return self ._iir_filter
267282
268283 @iir_filter .setter
269- def iir_filter (self , value ) :
284+ def iir_filter (self , value : int ) -> None :
270285 if not value in _BMP280_IIR_FILTERS :
271286 raise ValueError ("IIR Filter '%s' not supported" % (value ))
272287 self ._iir_filter = value
273288 self ._write_config ()
274289
275290 @property
276- def _config (self ):
291+ def _config (self ) -> int :
277292 """Value to be written to the device's config register"""
278293 config = 0
279294 if self .mode == MODE_NORMAL :
@@ -283,15 +298,15 @@ def _config(self):
283298 return config
284299
285300 @property
286- def _ctrl_meas (self ):
301+ def _ctrl_meas (self ) -> int :
287302 """Value to be written to the device's ctrl_meas register"""
288303 ctrl_meas = self .overscan_temperature << 5
289304 ctrl_meas += self .overscan_pressure << 2
290305 ctrl_meas += self .mode
291306 return ctrl_meas
292307
293308 @property
294- def measurement_time_typical (self ):
309+ def measurement_time_typical (self ) -> float :
295310 """Typical time in milliseconds required to complete a measurement in normal mode"""
296311 meas_time_ms = 1
297312 if self .overscan_temperature != OVERSCAN_DISABLE :
@@ -301,7 +316,7 @@ def measurement_time_typical(self):
301316 return meas_time_ms
302317
303318 @property
304- def measurement_time_max (self ):
319+ def measurement_time_max (self ) -> float :
305320 """Maximum time in milliseconds required to complete a measurement in normal mode"""
306321 meas_time_ms = 1.25
307322 if self .overscan_temperature != OVERSCAN_DISABLE :
@@ -311,13 +326,13 @@ def measurement_time_max(self):
311326 return meas_time_ms
312327
313328 @property
314- def temperature (self ):
329+ def temperature (self ) -> float :
315330 """The compensated temperature in degrees Celsius."""
316331 self ._read_temperature ()
317332 return self ._t_fine / 5120.0
318333
319334 @property
320- def pressure (self ):
335+ def pressure (self ) -> Optional [ float ] :
321336 """
322337 The compensated pressure in hectoPascals.
323338 returns `None` if pressure measurement is disabled
@@ -348,14 +363,14 @@ def pressure(self):
348363 return pressure
349364
350365 @property
351- def altitude (self ):
366+ def altitude (self ) -> float :
352367 """The altitude based on the sea level pressure (:attr:`sea_level_pressure`)
353368 - which you must enter ahead of time)"""
354369 p = self .pressure # in Si units for hPascal
355370 return 44330 * (1.0 - math .pow (p / self .sea_level_pressure , 0.1903 ))
356371
357372 ####################### Internal helpers ################################
358- def _read_coefficients (self ):
373+ def _read_coefficients (self ) -> None :
359374 """Read & save the calibration coefficients"""
360375 coeff = self ._read_register (_REGISTER_DIG_T1 , 24 )
361376 coeff = list (struct .unpack ("<HhhHhhhhhhhh" , bytes (coeff )))
@@ -371,23 +386,23 @@ def _read_coefficients(self):
371386 # print("%d %d %d" % (self._pressure_calib[6], self._pressure_calib[7],
372387 # self._pressure_calib[8]))
373388
374- def _read_byte (self , register ) :
389+ def _read_byte (self , register : int ) -> int :
375390 """Read a byte register value and return it"""
376391 return self ._read_register (register , 1 )[0 ]
377392
378- def _read24 (self , register ) :
393+ def _read24 (self , register : int ) -> float :
379394 """Read an unsigned 24-bit value as a floating point and return it."""
380395 ret = 0.0
381396 for b in self ._read_register (register , 3 ):
382397 ret *= 256.0
383398 ret += float (b & 0xFF )
384399 return ret
385400
386- def _read_register (self , register , length ) :
401+ def _read_register (self , register : int , length : int ) -> None :
387402 """Low level register reading, not implemented in base class"""
388403 raise NotImplementedError ()
389404
390- def _write_register_byte (self , register , value ) :
405+ def _write_register_byte (self , register : int , value : int ) -> None :
391406 """Low level register writing, not implemented in base class"""
392407 raise NotImplementedError ()
393408
@@ -433,15 +448,15 @@ class Adafruit_BMP280_I2C(Adafruit_BMP280): # pylint: disable=invalid-name
433448
434449 """
435450
436- def __init__ (self , i2c , address = 0x77 ):
451+ def __init__ (self , i2c : I2C , address : int = 0x77 ) -> None :
437452 from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
438453 i2c_device ,
439454 )
440455
441456 self ._i2c = i2c_device .I2CDevice (i2c , address )
442457 super ().__init__ ()
443458
444- def _read_register (self , register , length ) :
459+ def _read_register (self , register : int , length : int ) -> bytearray :
445460 """Low level register reading over I2C, returns a list of values"""
446461 with self ._i2c as i2c :
447462 i2c .write (bytes ([register & 0xFF ]))
@@ -450,7 +465,7 @@ def _read_register(self, register, length):
450465 # print("$%02X => %s" % (register, [hex(i) for i in result]))
451466 return result
452467
453- def _write_register_byte (self , register , value ) :
468+ def _write_register_byte (self , register : int , value : int ) -> None :
454469 """Low level register writing over I2C, writes one 8-bit value"""
455470 with self ._i2c as i2c :
456471 i2c .write (bytes ([register & 0xFF , value & 0xFF ]))
@@ -502,15 +517,15 @@ class Adafruit_BMP280_SPI(Adafruit_BMP280):
502517
503518 """
504519
505- def __init__ (self , spi , cs , baudrate = 100000 ):
520+ def __init__ (self , spi : SPI , cs : DigitalInOut , baudrate = 100000 ) -> None :
506521 from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
507522 spi_device ,
508523 )
509524
510525 self ._spi = spi_device .SPIDevice (spi , cs , baudrate = baudrate )
511526 super ().__init__ ()
512527
513- def _read_register (self , register , length ) :
528+ def _read_register (self , register : int , length : int ) -> bytearray :
514529 """Low level register reading over SPI, returns a list of values"""
515530 register = (register | 0x80 ) & 0xFF # Read single, bit 7 high.
516531 with self ._spi as spi :
@@ -521,7 +536,7 @@ def _read_register(self, register, length):
521536 # print("$%02X => %s" % (register, [hex(i) for i in result]))
522537 return result
523538
524- def _write_register_byte (self , register , value ) :
539+ def _write_register_byte (self , register : int , value : int ) -> None :
525540 """Low level register writing over SPI, writes one 8-bit value"""
526541 register &= 0x7F # Write, bit 7 low.
527542 with self ._spi as spi :
0 commit comments