35
35
36
36
from micropython import const
37
37
38
+ try :
39
+ from typing import Optional
40
+ from busio import I2C , SPI
41
+ from digitalio import DigitalInOut
42
+ except ImportError :
43
+ pass
44
+
38
45
__version__ = "2.6.4"
39
46
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_BME280.git"
40
47
@@ -81,7 +88,7 @@ class Adafruit_BME280:
81
88
"""
82
89
83
90
# pylint: disable=too-many-instance-attributes
84
- def __init__ (self ):
91
+ def __init__ (self ) -> None :
85
92
"""Check the BME280 was found, read the coefficients and enable the sensor"""
86
93
# Check device ID.
87
94
chip_id = self ._read_byte (_BME280_REGISTER_CHIPID )
@@ -102,7 +109,7 @@ def __init__(self):
102
109
"""Pressure in hectoPascals at sea level. Used to calibrate `altitude`."""
103
110
self ._t_fine = None
104
111
105
- def _read_temperature (self ):
112
+ def _read_temperature (self ) -> None :
106
113
# perform one measurement
107
114
if self .mode != MODE_NORMAL :
108
115
self .mode = MODE_FORCE
@@ -124,12 +131,12 @@ def _read_temperature(self):
124
131
125
132
self ._t_fine = int (var1 + var2 )
126
133
127
- def _reset (self ):
134
+ def _reset (self ) -> None :
128
135
"""Soft reset the sensor"""
129
136
self ._write_register_byte (_BME280_REGISTER_SOFTRESET , 0xB6 )
130
137
sleep (0.004 ) # Datasheet says 2ms. Using 4ms just to be safe
131
138
132
- def _write_ctrl_meas (self ):
139
+ def _write_ctrl_meas (self ) -> None :
133
140
"""
134
141
Write the values to the ctrl_meas and ctrl_hum registers in the device
135
142
ctrl_meas sets the pressure and temperature data acquisition options
@@ -138,15 +145,15 @@ def _write_ctrl_meas(self):
138
145
self ._write_register_byte (_BME280_REGISTER_CTRL_HUM , self .overscan_humidity )
139
146
self ._write_register_byte (_BME280_REGISTER_CTRL_MEAS , self ._ctrl_meas )
140
147
141
- def _get_status (self ):
148
+ def _get_status (self ) -> int :
142
149
"""Get the value from the status register in the device """
143
150
return self ._read_byte (_BME280_REGISTER_STATUS )
144
151
145
- def _read_config (self ):
152
+ def _read_config (self ) -> int :
146
153
"""Read the value from the config register in the device """
147
154
return self ._read_byte (_BME280_REGISTER_CONFIG )
148
155
149
- def _write_config (self ):
156
+ def _write_config (self ) -> None :
150
157
"""Write the value to the config register in the device """
151
158
normal_flag = False
152
159
if self ._mode == MODE_NORMAL :
@@ -158,22 +165,22 @@ def _write_config(self):
158
165
self .mode = MODE_NORMAL
159
166
160
167
@property
161
- def mode (self ):
168
+ def mode (self ) -> int :
162
169
"""
163
170
Operation mode
164
171
Allowed values are the constants MODE_*
165
172
"""
166
173
return self ._mode
167
174
168
175
@mode .setter
169
- def mode (self , value ) :
176
+ def mode (self , value : int ) -> None :
170
177
if not value in _BME280_MODES :
171
178
raise ValueError ("Mode '%s' not supported" % (value ))
172
179
self ._mode = value
173
180
self ._write_ctrl_meas ()
174
181
175
182
@property
176
- def _config (self ):
183
+ def _config (self ) -> int :
177
184
"""Value to be written to the device's config register """
178
185
config = 0
179
186
if self .mode == 0x03 : # MODE_NORMAL
@@ -183,21 +190,21 @@ def _config(self):
183
190
return config
184
191
185
192
@property
186
- def _ctrl_meas (self ):
193
+ def _ctrl_meas (self ) -> int :
187
194
"""Value to be written to the device's ctrl_meas register """
188
195
ctrl_meas = self .overscan_temperature << 5
189
196
ctrl_meas += self .overscan_pressure << 2
190
197
ctrl_meas += self .mode
191
198
return ctrl_meas
192
199
193
200
@property
194
- def temperature (self ):
201
+ def temperature (self ) -> float :
195
202
"""The compensated temperature in degrees Celsius."""
196
203
self ._read_temperature ()
197
204
return self ._t_fine / 5120.0
198
205
199
206
@property
200
- def pressure (self ):
207
+ def pressure (self ) -> Optional [ float ] :
201
208
"""
202
209
The compensated pressure in hectoPascals.
203
210
returns None if pressure measurement is disabled
@@ -230,15 +237,15 @@ def pressure(self):
230
237
return pressure
231
238
232
239
@property
233
- def relative_humidity (self ):
240
+ def relative_humidity (self ) -> Optional [ float ] :
234
241
"""
235
242
The relative humidity in RH %
236
243
returns None if humidity measurement is disabled
237
244
"""
238
245
return self .humidity
239
246
240
247
@property
241
- def humidity (self ):
248
+ def humidity (self ) -> Optional [ float ] :
242
249
"""
243
250
The relative humidity in RH %
244
251
returns None if humidity measurement is disabled
@@ -268,13 +275,13 @@ def humidity(self):
268
275
return humidity
269
276
270
277
@property
271
- def altitude (self ):
278
+ def altitude (self ) -> float :
272
279
"""The altitude based on current :attr:`pressure` versus the sea level pressure
273
280
(``sea_level_pressure``) - which you must enter ahead of time)"""
274
281
pressure = self .pressure # in Si units for hPascal
275
282
return 44330 * (1.0 - math .pow (pressure / self .sea_level_pressure , 0.1903 ))
276
283
277
- def _read_coefficients (self ):
284
+ def _read_coefficients (self ) -> None :
278
285
"""Read & save the calibration coefficients"""
279
286
coeff = self ._read_register (0x88 , 24 ) # BME280_REGISTER_DIG_T1
280
287
coeff = list (struct .unpack ("<HhhHhhhhhhhh" , bytes (coeff )))
@@ -292,22 +299,22 @@ def _read_coefficients(self):
292
299
self ._humidity_calib [4 ] = float ((coeff [4 ] << 4 ) | (coeff [3 ] >> 4 ))
293
300
self ._humidity_calib [5 ] = float (coeff [5 ])
294
301
295
- def _read_byte (self , register ) :
302
+ def _read_byte (self , register : int ) -> int :
296
303
"""Read a byte register value and return it"""
297
304
return self ._read_register (register , 1 )[0 ]
298
305
299
- def _read24 (self , register ) :
306
+ def _read24 (self , register : int ) -> float :
300
307
"""Read an unsigned 24-bit value as a floating point and return it."""
301
308
ret = 0.0
302
309
for b in self ._read_register (register , 3 ):
303
310
ret *= 256.0
304
311
ret += float (b & 0xFF )
305
312
return ret
306
313
307
- def _read_register (self , register , length ) :
314
+ def _read_register (self , register : int , length : int ) -> bytearray :
308
315
raise NotImplementedError ()
309
316
310
- def _write_register_byte (self , register , value ) :
317
+ def _write_register_byte (self , register : int , value : int ) -> None :
311
318
raise NotImplementedError ()
312
319
313
320
@@ -358,22 +365,22 @@ class Adafruit_BME280_I2C(Adafruit_BME280):
358
365
359
366
"""
360
367
361
- def __init__ (self , i2c , address = 0x77 ): # BME280_ADDRESS
368
+ def __init__ (self , i2c : I2C , address : int = 0x77 ) -> None : # BME280_ADDRESS
362
369
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
363
370
i2c_device ,
364
371
)
365
372
366
373
self ._i2c = i2c_device .I2CDevice (i2c , address )
367
374
super ().__init__ ()
368
375
369
- def _read_register (self , register , length ) :
376
+ def _read_register (self , register : int , length : int ) -> bytearray :
370
377
with self ._i2c as i2c :
371
378
i2c .write (bytes ([register & 0xFF ]))
372
379
result = bytearray (length )
373
380
i2c .readinto (result )
374
381
return result
375
382
376
- def _write_register_byte (self , register , value ) :
383
+ def _write_register_byte (self , register : int , value : int ) -> None :
377
384
with self ._i2c as i2c :
378
385
i2c .write (bytes ([register & 0xFF , value & 0xFF ]))
379
386
# print("$%02X <= 0x%02X" % (register, value))
@@ -428,23 +435,23 @@ class Adafruit_BME280_SPI(Adafruit_BME280):
428
435
429
436
"""
430
437
431
- def __init__ (self , spi , cs , baudrate = 100000 ):
438
+ def __init__ (self , spi : SPI , cs : DigitalInOut , baudrate : int = 100000 ) -> None :
432
439
from adafruit_bus_device import ( # pylint: disable=import-outside-toplevel
433
440
spi_device ,
434
441
)
435
442
436
443
self ._spi = spi_device .SPIDevice (spi , cs , baudrate = baudrate )
437
444
super ().__init__ ()
438
445
439
- def _read_register (self , register , length ) :
446
+ def _read_register (self , register : int , length : int ) -> bytearray :
440
447
register = (register | 0x80 ) & 0xFF # Read single, bit 7 high.
441
448
with self ._spi as spi :
442
449
spi .write (bytearray ([register ])) # pylint: disable=no-member
443
450
result = bytearray (length )
444
451
spi .readinto (result ) # pylint: disable=no-member
445
452
return result
446
453
447
- def _write_register_byte (self , register , value ) :
454
+ def _write_register_byte (self , register : int , value : int ) -> None :
448
455
register &= 0x7F # Write, bit 7 low.
449
456
with self ._spi as spi :
450
457
spi .write (bytes ([register , value & 0xFF ])) # pylint: disable=no-member
0 commit comments