20
20
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
21
# THE SOFTWARE.
22
22
"""
23
- `adafruit_bmp280 `
23
+ `adafruit_bme280 `
24
24
====================================================
25
25
26
26
CircuitPython driver from BME280 Temperature, Humidity and Barometic Pressure sensor
63
63
_BME280_HUMIDITY_MAX = const (100 )
64
64
65
65
class Adafruit_BME280 :
66
+ """Driver from BME280 Temperature, Humidity and Barometic Pressure sensor"""
66
67
def __init__ (self ):
67
68
"""Check the BME280 was found, read the coefficients and enable the sensor for continuous reads"""
68
69
# Check device ID.
@@ -73,16 +74,17 @@ def __init__(self):
73
74
time .sleep (0.5 )
74
75
self ._read_coefficients ()
75
76
self .seaLevelhPa = 1013.25
77
+ """Pressure in hectoPascals at sea level. Used to calibrate `altitude`."""
76
78
self ._write_register_byte (_BME280_REGISTER_CTRL_HUM , 0x03 ) # turn on humidity oversample 16x
77
79
78
80
@property
79
81
def temperature (self ):
80
- """Gets the compensated temperature in degrees celsius."""
82
+ """The compensated temperature in degrees celsius."""
81
83
# perform one measurement
82
84
self ._write_register_byte (_BME280_REGISTER_CTRL_MEAS , 0xFE ) # high res, forced mode
83
-
85
+
84
86
# Wait for conversion to complete
85
- while (self ._read_byte (_BME280_REGISTER_STATUS ) & 0x08 ):
87
+ while (self ._read_byte (_BME280_REGISTER_STATUS ) & 0x08 ):
86
88
time .sleep (0.002 )
87
89
UT = self ._read24 (_BME280_REGISTER_TEMPDATA ) / 16 # lowest 4 bits get dropped
88
90
#print("raw temp: ", UT)
@@ -95,16 +97,16 @@ def temperature(self):
95
97
96
98
self .t_fine = int (var1 + var2 )
97
99
#print("t_fine: ", self.t_fine)
98
-
100
+
99
101
temp = (var1 + var2 ) / 5120.0
100
102
return temp
101
103
102
104
@property
103
105
def pressure (self ):
104
- """Gets the compensated pressure in hectoPascals."""
106
+ """The compensated pressure in hectoPascals."""
105
107
self .temperature # force read of t_fine
106
-
107
- # Algorithm from the BME280 driver https://github.com/BoschSensortec/BME280_driver/blob/master/bme280.c
108
+
109
+ # Algorithm from the BME280 driver https://github.com/BoschSensortec/BME280_driver/blob/master/bme280.c
108
110
adc = self ._read24 (_BME280_REGISTER_PRESSUREDATA ) / 16 # lowest 4 bits get dropped
109
111
var1 = float (self .t_fine ) / 2.0 - 64000.0
110
112
var2 = var1 * var1 * self .dig_P6 / 32768.0
@@ -123,14 +125,15 @@ def pressure(self):
123
125
p = p + (var1 + var2 + self .dig_P7 ) / 16.0
124
126
125
127
p /= 100
126
- if (p < _BME280_PRESSURE_MIN_HPA ): return _BME280_PRESSURE_MIN_HPA
127
- if (p > _BME280_PRESSURE_MAX_HPA ): return _BME280_PRESSURE_MAX_HPA
128
+ if (p < _BME280_PRESSURE_MIN_HPA ): return _BME280_PRESSURE_MIN_HPA
129
+ if (p > _BME280_PRESSURE_MAX_HPA ): return _BME280_PRESSURE_MAX_HPA
128
130
return p
129
131
else :
130
132
return _BME280_PRESSURE_MIN_HPA
131
-
133
+
132
134
@property
133
135
def humidity (self ):
136
+ """The relative humidity in RH %"""
134
137
self .temperature # force read of t_fine
135
138
hum = self ._read_register (_BME280_REGISTER_HUMIDDATA , 2 )
136
139
#print("Humidity data: ", hum)
@@ -140,27 +143,29 @@ def humidity(self):
140
143
# Algorithm from the BME280 driver https://github.com/BoschSensortec/BME280_driver/blob/master/bme280.c
141
144
var1 = float (self .t_fine ) - 76800.0
142
145
#print("var1 ", var1)
143
- var2 = (self .dig_H4 * 64.0 + (self .dig_H5 / 16384.0 ) * var1 )
146
+ var2 = (self .dig_H4 * 64.0 + (self .dig_H5 / 16384.0 ) * var1 )
144
147
#print("var2 ",var2)
145
- var3 = adc - var2
148
+ var3 = adc - var2
146
149
#print("var3 ",var3)
147
- var4 = self .dig_H2 / 65536.0
150
+ var4 = self .dig_H2 / 65536.0
148
151
#print("var4 ",var4)
149
- var5 = (1.0 + (self .dig_H3 / 67108864.0 ) * var1 )
152
+ var5 = (1.0 + (self .dig_H3 / 67108864.0 ) * var1 )
150
153
#print("var5 ",var5)
151
- var6 = 1.0 + (self .dig_H6 / 67108864.0 ) * var1 * var5
154
+ var6 = 1.0 + (self .dig_H6 / 67108864.0 ) * var1 * var5
152
155
#print("var6 ",var6)
153
- var6 = var3 * var4 * (var5 * var6 )
154
- humidity = var6 * (1.0 - self .dig_H1 * var6 / 524288.0 )
156
+ var6 = var3 * var4 * (var5 * var6 )
157
+ humidity = var6 * (1.0 - self .dig_H1 * var6 / 524288.0 )
155
158
156
- if (humidity > _BME280_HUMIDITY_MAX ): return _BME280_HUMIDITY_MAX
157
- if (humidity < _BME280_HUMIDITY_MIN ): return _BME280_HUMIDITY_MIN
159
+ if (humidity > _BME280_HUMIDITY_MAX ):
160
+ return _BME280_HUMIDITY_MAX
161
+ if (humidity < _BME280_HUMIDITY_MIN ):
162
+ return _BME280_HUMIDITY_MIN
158
163
# else...
159
164
return humidity
160
165
161
166
@property
162
167
def altitude (self ):
163
- """calculate the altitude based on the sea level pressure (seaLevelhPa) - which you must enter ahead of time)"""
168
+ """The altitude based on current `pressure` versus the sea level pressure (` seaLevelhPa` ) - which you must enter ahead of time)"""
164
169
p = self .pressure # in Si units for hPascal
165
170
return 44330 * (1.0 - math .pow (p / self .seaLevelhPa , 0.1903 ));
166
171
@@ -185,7 +190,7 @@ def _read_coefficients(self):
185
190
#print("%d %d %d" % (self.dig_P7, self.dig_P8, self.dig_P9))
186
191
#print("%d %d %d" % (self.dig_H1, self.dig_H2, self.dig_H3))
187
192
#print("%d %d %d" % (self.dig_H4, self.dig_H5, self.dig_H6))
188
-
193
+
189
194
def _read_byte (self , register ):
190
195
"""Read a byte register value and return it"""
191
196
return self ._read_register (register , 1 )[0 ]
@@ -197,7 +202,7 @@ def _read24(self, register):
197
202
ret *= 256.0
198
203
ret += float (b & 0xFF )
199
204
return ret
200
-
205
+
201
206
class Adafruit_BME280_I2C (Adafruit_BME280 ):
202
207
def __init__ (self , i2c , address = _BME280_ADDRESS ):
203
208
import adafruit_bus_device .i2c_device as i2c_device
0 commit comments