Skip to content

Commit 53e0930

Browse files
authored
Merge pull request #26 from barbudor/master
fix #25 + fix #19 + refactor `pressure` property
2 parents febcd51 + 8975fae commit 53e0930

File tree

2 files changed

+22
-23
lines changed

2 files changed

+22
-23
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
__pycache__
22
_build
33
*.pyc
4+
*.mpy
45
.env
56
build*
67
bundles

adafruit_bme280.py

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,8 @@
7474
IIR_FILTER_X8 = const(0x03)
7575
IIR_FILTER_X16 = const(0x04)
7676

77-
_BME280_IIR_FILTERS = frozenset((IIR_FILTER_DISABLE, IIR_FILTER_X2,
78-
IIR_FILTER_X4, IIR_FILTER_X8, IIR_FILTER_X16))
77+
_BME280_IIR_FILTERS = (IIR_FILTER_DISABLE, IIR_FILTER_X2,
78+
IIR_FILTER_X4, IIR_FILTER_X8, IIR_FILTER_X16)
7979

8080
"""overscan values for temperature, pressure, and humidity"""
8181
OVERSCAN_DISABLE = const(0x00)
@@ -93,7 +93,7 @@
9393
MODE_FORCE = const(0x01)
9494
MODE_NORMAL = const(0x03)
9595

96-
_BME280_MODES = frozenset((MODE_SLEEP, MODE_FORCE, MODE_NORMAL))
96+
_BME280_MODES = (MODE_SLEEP, MODE_FORCE, MODE_NORMAL)
9797
"""
9898
standby timeconstant values
9999
TC_X[_Y] where X=milliseconds and Y=tenths of a millisecond
@@ -107,9 +107,9 @@
107107
STANDBY_TC_500 = const(0x04) #500ms
108108
STANDBY_TC_1000 = const(0x05) #1000ms
109109

110-
_BME280_STANDBY_TCS = frozenset((STANDBY_TC_0_5, STANDBY_TC_10, STANDBY_TC_20,
111-
STANDBY_TC_62_5, STANDBY_TC_125, STANDBY_TC_250,
112-
STANDBY_TC_500, STANDBY_TC_1000))
110+
_BME280_STANDBY_TCS = (STANDBY_TC_0_5, STANDBY_TC_10, STANDBY_TC_20,
111+
STANDBY_TC_62_5, STANDBY_TC_125, STANDBY_TC_250,
112+
STANDBY_TC_500, STANDBY_TC_1000)
113113

114114
class Adafruit_BME280:
115115
"""Driver from BME280 Temperature, Humidity and Barometic Pressure sensor"""
@@ -344,23 +344,21 @@ def pressure(self):
344344
var3 = self._pressure_calib[2] * var1 * var1 / 524288.0
345345
var1 = (var3 + self._pressure_calib[1] * var1) / 524288.0
346346
var1 = (1.0 + var1 / 32768.0) * self._pressure_calib[0]
347-
if var1 == 0:
348-
return 0
349-
if var1:
350-
pressure = 1048576.0 - adc
351-
pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1
352-
var1 = self._pressure_calib[8] * pressure * pressure / 2147483648.0
353-
var2 = pressure * self._pressure_calib[7] / 32768.0
354-
pressure = pressure + (var1 + var2 + self._pressure_calib[6]) / 16.0
355-
356-
pressure /= 100
357-
if pressure < _BME280_PRESSURE_MIN_HPA:
358-
return _BME280_PRESSURE_MIN_HPA
359-
if pressure > _BME280_PRESSURE_MAX_HPA:
360-
return _BME280_PRESSURE_MAX_HPA
361-
return pressure
362-
else:
347+
if not var1: # avoid exception caused by division by zero
348+
raise ArithmeticError("Invalid result possibly related to error while \
349+
reading the calibration registers")
350+
pressure = 1048576.0 - adc
351+
pressure = ((pressure - var2 / 4096.0) * 6250.0) / var1
352+
var1 = self._pressure_calib[8] * pressure * pressure / 2147483648.0
353+
var2 = pressure * self._pressure_calib[7] / 32768.0
354+
pressure = pressure + (var1 + var2 + self._pressure_calib[6]) / 16.0
355+
356+
pressure /= 100
357+
if pressure < _BME280_PRESSURE_MIN_HPA:
363358
return _BME280_PRESSURE_MIN_HPA
359+
if pressure > _BME280_PRESSURE_MAX_HPA:
360+
return _BME280_PRESSURE_MAX_HPA
361+
return pressure
364362

365363
@property
366364
def humidity(self):
@@ -416,7 +414,7 @@ def _read_coefficients(self):
416414
self._humidity_calib = [0]*6
417415
self._humidity_calib[0] = self._read_byte(_BME280_REGISTER_DIG_H1)
418416
coeff = self._read_register(_BME280_REGISTER_DIG_H2, 7)
419-
coeff = list(struct.unpack('<hBBBBb', bytes(coeff)))
417+
coeff = list(struct.unpack('<hBbBbb', bytes(coeff)))
420418
self._humidity_calib[1] = float(coeff[0])
421419
self._humidity_calib[2] = float(coeff[1])
422420
self._humidity_calib[3] = float((coeff[2] << 4) | (coeff[3] & 0xF))

0 commit comments

Comments
 (0)