1
0
mirror of https://github.com/cmur2/python-bme680.git synced 2025-07-12 07:11:26 +02:00

10 Commits

Author SHA1 Message Date
288daed781 Version 1.0.3 prep 2017-11-23 11:25:34 +00:00
c9d4cef987 Merge pull request #5 from gkluoe/master
Fix reassignment of variable in pressure calculation algo
2017-11-22 16:19:43 +00:00
26a28bfde7 Fix reassignment of variable in pressure calculation algo 2017-11-21 21:16:27 +00:00
1baa47fb56 Merge pull request #4 from davea/typeerror_fixes
Fix Python 3 TypeError crashes by using floor division explicitly
2017-11-20 12:09:09 +00:00
3e4bf56802 Fix Python 3 TypeError crashes by using floor division explicitly
The / operator in Python 3 returns a float, which was causing TypeErrors
when being passed to the << or >> operators.
2017-11-19 17:10:27 +00:00
d9970151cd Fixes from upstream BME680_driver 3.5.3 2017-11-17 11:29:48 +00:00
fffb5205d1 Fixed another copy-paste error! 2017-10-19 12:31:19 +01:00
ae48c5aa7f Fixed copy-paste error! 2017-10-19 12:30:52 +01:00
09570742aa Added OLI install details. 2017-10-19 12:30:27 +01:00
25c941fedd Added terminal image. 2017-10-19 11:29:00 +00:00
12 changed files with 101 additions and 47 deletions

View File

@ -6,6 +6,20 @@ The state-of-the-art BME680 breakout lets you measure temperature, pressure, hum
## Installing ## Installing
### Full install (recommended):
We've created an easy installation script that will install all pre-requisites and get your BME680
up and running with minimal efforts. To run it, fire up Terminal which you'll find in Menu -> Accessories -> Terminal
on your Raspberry Pi desktop, as illustrated below:
![Finding the terminal](http://get.pimoroni.com/resources/github-repo-terminal.png)
In the new terminal window type the command exactly as it appears below (check for typos) and follow the on-screen instructions:
```bash
curl https://get.pimoroni.com/bme680 | bash
```
### Manual install: ### Manual install:
#### Library install for Python 3: #### Library install for Python 3:

View File

@ -1,3 +1,8 @@
1.0.3
-----
* Merged temperature compensation fix from Bosch's BME680_driver 3.5.3
1.0.2 1.0.2
----- -----

View File

@ -2,7 +2,7 @@ from .constants import *
import math import math
import time import time
__version__ = '1.0.2' __version__ = '1.0.3'
class BME680(BME680Data): class BME680(BME680Data):
"""BOSCH BME680 """BOSCH BME680
@ -287,63 +287,72 @@ class BME680(BME680Data):
return self._i2c.read_i2c_block_data(self.i2c_addr, register, length) return self._i2c.read_i2c_block_data(self.i2c_addr, register, length)
def _calc_temperature(self, temperature_adc): def _calc_temperature(self, temperature_adc):
var1 = (temperature_adc / 8) - (self.calibration_data.par_t1 * 2) var1 = (temperature_adc >> 3) - (self.calibration_data.par_t1 << 1)
var2 = (var1 * self.calibration_data.par_t2) / 2048 var2 = (var1 * self.calibration_data.par_t2) >> 11
var3 = ((var1 / 2) * (var1 / 2)) / 4096 var3 = ((var1 >> 1) * (var1 >> 1)) >> 12
var3 = ((var3) * (self.calibration_data.par_t3 * 16)) / 16384 var3 = ((var3) * (self.calibration_data.par_t3 << 4)) >> 14
# Save teperature data for pressure calculations # Save teperature data for pressure calculations
self.calibration_data.t_fine = (var2 + var3) self.calibration_data.t_fine = (var2 + var3)
calc_temp = (((self.calibration_data.t_fine * 5) + 128) / 256) calc_temp = (((self.calibration_data.t_fine * 5) + 128) >> 8)
return calc_temp return calc_temp
def _calc_pressure(self, pressure_adc): def _calc_pressure(self, pressure_adc):
var1 = (self.calibration_data.t_fine / 2) - 64000 var1 = ((self.calibration_data.t_fine) >> 1) - 64000
var2 = ((var1 / 4) * (var1 / 4)) / 2048 var2 = ((((var1 >> 2) * (var1 >> 2)) >> 11) *
var2 = (var2 * self.calibration_data.par_p6) / 4 self.calibration_data.par_p6) >> 2
var2 = var2 + ((var1 * self.calibration_data.par_p5) * 2) var2 = var2 + ((var1 * self.calibration_data.par_p5) << 1)
var2 = (var2 / 4) + (self.calibration_data.par_p4 * 65536) var2 = (var2 >> 2) + (self.calibration_data.par_p4 << 16)
var1 = (((((var1 >> 2) * (var1 >> 2)) >> 13 ) *
((self.calibration_data.par_p3 << 5)) >> 3) +
((self.calibration_data.par_p2 * var1) >> 1))
var1 = var1 >> 18
var1 = ((var1 / 4) * (var1 / 4)) / 8192 var1 = ((32768 + var1) * self.calibration_data.par_p1) >> 15
var1 = ((var1 * (self.calibration_data.par_p3 * 32)) / 8) + ((self.calibration_data.par_p2 * var1) / 2) calc_pressure = 1048576 - pressure_adc
var1 = var1 / 262144 calc_pressure = ((calc_pressure - (var2 >> 12)) * (3125))
var1 = ((32768 + var1) * self.calibration_data.par_p1) / 32768
calc_pres = 1048576 - pressure_adc
calc_pres = (calc_pres - (var2 / 4096)) * 3125
calc_pres = (calc_pres / var1) * 2
var1 = (self.calibration_data.par_p9 * (((calc_pres / 8) * (calc_pres / 8)) / 8192)) / 4096
var2 = ((calc_pres / 4) * self.calibration_data.par_p8) / 8192
var3 = ((calc_pres / 256)
* (calc_pres / 256)
* (calc_pres / 256)
* self.calibration_data.par_p10) / 131072
calc_pres = calc_pres + ((var1 + var2 + var3 + (self.calibration_data.par_p7 * 128)) / 16)
return calc_pres if calc_pressure >= (1 << 31):
calc_pressure = ((calc_pressure // var1) << 1)
else:
calc_pressure = ((calc_pressure << 1) // var1)
var1 = (self.calibration_data.par_p9 * (((calc_pressure >> 3) *
(calc_pressure >> 3)) >> 13)) >> 12
var2 = ((calc_pressure >> 2) *
self.calibration_data.par_p8) >> 13
var3 = ((calc_pressure >> 8) * (calc_pressure >> 8) *
(calc_pressure >> 8) *
self.calibration_data.par_p10) >> 17
calc_pressure = (calc_pressure) + ((var1 + var2 + var3 +
(self.calibration_data.par_p7 << 7)) >> 4)
return calc_pressure
def _calc_humidity(self, humidity_adc): def _calc_humidity(self, humidity_adc):
temp_scaled = ((self.calibration_data.t_fine * 5) + 128) / 256 temp_scaled = ((self.calibration_data.t_fine * 5) + 128) >> 8
var1 = (humidity_adc - ((self.calibration_data.par_h1 * 16))) \ var1 = (humidity_adc - ((self.calibration_data.par_h1 * 16))) \
- (((temp_scaled * self.calibration_data.par_h3) / (100)) / 2) - (((temp_scaled * self.calibration_data.par_h3) // (100)) >> 1)
var2 = (self.calibration_data.par_h2 var2 = (self.calibration_data.par_h2
* (((temp_scaled * self.calibration_data.par_h4) / (100)) * (((temp_scaled * self.calibration_data.par_h4) // (100))
+ (((temp_scaled * ((temp_scaled * self.calibration_data.par_h5) / (100))) / 64) + (((temp_scaled * ((temp_scaled * self.calibration_data.par_h5) // (100))) >> 6)
/ (100)) + (1 * 16384))) / 1024 // (100)) + (1 * 16384))) >> 10
var3 = var1 * var2 var3 = var1 * var2
var4 = self.calibration_data.par_h6 * 128 var4 = self.calibration_data.par_h6 << 7
var4 = ((var4) + ((temp_scaled * self.calibration_data.par_h7) / (100))) / 16 var4 = ((var4) + ((temp_scaled * self.calibration_data.par_h7) // (100))) >> 4
var5 = ((var3 / 16384) * (var3 / 16384)) / 1024 var5 = ((var3 >> 14) * (var3 >> 14)) >> 10
var6 = (var4 * var5) / 2 var6 = (var4 * var5) >> 1
calc_hum = (((var3 + var6) / 1024) * (1000)) / 4096 calc_hum = (((var3 + var6) >> 10) * (1000)) >> 12
return min(max(calc_hum,0),100000) return min(max(calc_hum,0),100000)
def _calc_gas_resistance(self, gas_res_adc, gas_range): def _calc_gas_resistance(self, gas_res_adc, gas_range):
var1 = ((1340 + (5 * self.calibration_data.range_sw_err)) * (lookupTable1[gas_range])) / 65536 var1 = ((1340 + (5 * self.calibration_data.range_sw_err)) * (lookupTable1[gas_range])) >> 16
var2 = (((gas_res_adc * 32768) - (16777216)) + var1) var2 = (((gas_res_adc << 15) - (16777216)) + var1)
var3 = ((lookupTable2[gas_range] * var1) / 512) var3 = ((lookupTable2[gas_range] * var1) >> 9)
calc_gas_res = ((var3 + (var2 / 2)) / var2) calc_gas_res = ((var3 + (var2 >> 1)) / var2)
return calc_gas_res return calc_gas_res

View File

@ -323,9 +323,9 @@ class CalibrationData:
self.par_gh3 = twos_comp(calibration[GH3_REG], bits=8) self.par_gh3 = twos_comp(calibration[GH3_REG], bits=8)
def set_other(self, heat_range, heat_value, sw_error): def set_other(self, heat_range, heat_value, sw_error):
self.res_heat_range = (heat_range & RHRANGE_MSK) / 16 self.res_heat_range = (heat_range & RHRANGE_MSK) // 16
self.res_heat_val = heat_value self.res_heat_val = heat_value
self.range_sw_err = (sw_error * RSERROR_MSK) / 16 self.range_sw_err = (sw_error * RSERROR_MSK) // 16
# BME680 sensor settings structure which comprises of ODR, # BME680 sensor settings structure which comprises of ODR,
# over-sampling and filter settings. # over-sampling and filter settings.

View File

@ -39,7 +39,7 @@ classifiers = ['Development Status :: 5 - Production/Stable',
setup( setup(
name = 'bme680', name = 'bme680',
version = '1.0.2', version = '1.0.3',
author = 'Philip Howard', author = 'Philip Howard',
author_email = 'phil@pimoroni.com', author_email = 'phil@pimoroni.com',
description = """Python library for driving the Pimoroni BME680 Breakout""", description = """Python library for driving the Pimoroni BME680 Breakout""",

View File

@ -1,3 +1,9 @@
bme680 (1.0.3) stable; urgency=low
* Merged temperature compensation fix from Bosch's BME680_driver 3.5.3
-- Phil Howard <phil@pimoroni.com> Wed, 22 Nov 2017 00:00:00 +0000
bme680 (1.0.2) stable; urgency=low bme680 (1.0.2) stable; urgency=low
* Fixed set_gas_heater_temperature to avoid i2c TypeError * Fixed set_gas_heater_temperature to avoid i2c TypeError

View File

@ -0,0 +1,5 @@
Successfully uploaded bme680_1.0.2.dsc to build-master.raspberrypi.org for raspberrypi.
Successfully uploaded bme680_1.0.2.tar.xz to build-master.raspberrypi.org for raspberrypi.
Successfully uploaded python-bme680_1.0.2_all.deb to build-master.raspberrypi.org for raspberrypi.
Successfully uploaded python3-bme680_1.0.2_all.deb to build-master.raspberrypi.org for raspberrypi.
Successfully uploaded bme680_1.0.2_armhf.changes to build-master.raspberrypi.org for raspberrypi.

View File

@ -1,3 +1,9 @@
bme680 (1.0.3) stable; urgency=low
* Merged temperature compensation fix from Bosch's BME680_driver 3.5.3
-- Phil Howard <phil@pimoroni.com> Wed, 22 Nov 2017 00:00:00 +0000
bme680 (1.0.2) stable; urgency=low bme680 (1.0.2) stable; urgency=low
* Fixed set_gas_heater_temperature to avoid i2c TypeError * Fixed set_gas_heater_temperature to avoid i2c TypeError

View File

@ -39,9 +39,10 @@ inform "seeded debian changelog"
# generate pypi changelog # generate pypi changelog
sed -e "/--/d" -e "s/ \*/\*/" \ sed -e "/--/d" \
-e "s/.*\([0-9].[0-9].[0-9]\).*/\1/" \ -e "s/ \*/\*/" \
-e '/[0-9].[0-9].[0-9]/ a\ -e "s/.*(\([0-9].[0-9].[0-9]\)).*/\1/" \
-e '/^[0-9].[0-9].[0-9]$/ a\
-----' $mainlog | cat -s > $pypilog -----' $mainlog | cat -s > $pypilog
version=$(head -n 1 $pypilog) version=$(head -n 1 $pypilog)

0
packaging/test.txt Normal file
View File

8
packaging/testlog.sh Executable file
View File

@ -0,0 +1,8 @@
#!/bin/bash
sed -e "/--/d" \
-e "s/ \*/\*/" \
-e "s/.*(\([0-9].[0-9].[0-9]\)).*/\1/" \
-e '/^[0-9].[0-9].[0-9]$/ a\
-----' CHANGELOG

BIN
terminal.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB