mirror of
https://github.com/cmur2/python-bme680.git
synced 2025-07-12 17:11:25 +02:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
50902ac08e | |||
05f80690e0 | |||
0f0be7f2c2 | |||
4ae50e2f2c | |||
7e08c2d749 | |||
bc2f729013 | |||
fed191e40e | |||
8cb0dead6b | |||
ae004aa62b | |||
1c9ba41306 | |||
40b4b63b93 | |||
da6ae97f1f | |||
097287e842 | |||
02407e1d01 | |||
888d8b312a | |||
288daed781 | |||
c9d4cef987 | |||
26a28bfde7 | |||
1baa47fb56 | |||
3e4bf56802 | |||
d9970151cd | |||
fffb5205d1 | |||
ae48c5aa7f | |||
09570742aa | |||
25c941fedd |
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Pimoroni Ltd
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
14
README.md
14
README.md
@ -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:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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:
|
||||||
|
39
examples/temp-offset.py
Executable file
39
examples/temp-offset.py
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
import bme680
|
||||||
|
|
||||||
|
print("""Display Temperature, Pressure and Humidity with different offsets.
|
||||||
|
""")
|
||||||
|
|
||||||
|
sensor = bme680.BME680()
|
||||||
|
|
||||||
|
# These oversampling settings can be tweaked to
|
||||||
|
# change the balance between accuracy and noise in
|
||||||
|
# the data.
|
||||||
|
|
||||||
|
sensor.set_humidity_oversample(bme680.OS_2X)
|
||||||
|
sensor.set_pressure_oversample(bme680.OS_4X)
|
||||||
|
sensor.set_temperature_oversample(bme680.OS_8X)
|
||||||
|
sensor.set_filter(bme680.FILTER_SIZE_3)
|
||||||
|
|
||||||
|
def display_data(offset=0):
|
||||||
|
sensor.set_temp_offset(offset)
|
||||||
|
sensor.get_sensor_data()
|
||||||
|
output = "{0:.2f} C, {1:.2f} hPa, {2:.3f} %RH".format(sensor.data.temperature, sensor.data.pressure, sensor.data.humidity)
|
||||||
|
print(output)
|
||||||
|
print("")
|
||||||
|
|
||||||
|
print("Initial readings")
|
||||||
|
display_data()
|
||||||
|
|
||||||
|
print("SET offset 4 degrees celsius")
|
||||||
|
display_data(4)
|
||||||
|
|
||||||
|
print("SET offset -1.87 degrees celsius")
|
||||||
|
display_data(-1.87)
|
||||||
|
|
||||||
|
print("SET offset -100 degrees celsius")
|
||||||
|
display_data(-100)
|
||||||
|
|
||||||
|
print("SET offset 0 degrees celsius")
|
||||||
|
display_data(0)
|
||||||
|
|
@ -1,3 +1,19 @@
|
|||||||
|
1.0.5
|
||||||
|
-----
|
||||||
|
|
||||||
|
* New: set_temp_offset to calibrate temperature offset in degrees C
|
||||||
|
|
||||||
|
1.0.4
|
||||||
|
-----
|
||||||
|
|
||||||
|
* Fix to range_sw_err for extremely high gas readings
|
||||||
|
* Convert to unsigned int to fix negative gas readings
|
||||||
|
|
||||||
|
1.0.3
|
||||||
|
-----
|
||||||
|
|
||||||
|
* Merged temperature compensation fix from Bosch's BME680_driver 3.5.3
|
||||||
|
|
||||||
1.0.2
|
1.0.2
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
21
library/LICENSE.txt
Normal file
21
library/LICENSE.txt
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Pimoroni Ltd
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
@ -1,5 +1,5 @@
|
|||||||
include CHANGELOG.txt
|
include CHANGELOG.txt
|
||||||
include LICENSE.txt
|
include LICENSE.txt
|
||||||
include README.txt
|
include README.rst
|
||||||
include setup.py
|
include setup.py
|
||||||
include bme680.py
|
recursive-include bme680 *.py
|
||||||
|
68
library/README.rst
Normal file
68
library/README.rst
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
BME680
|
||||||
|
======
|
||||||
|
|
||||||
|
https://shop.pimoroni.com/products/bme680
|
||||||
|
|
||||||
|
The state-of-the-art BME680 breakout lets you measure temperature,
|
||||||
|
pressure, humidity, and indoor air quality.
|
||||||
|
|
||||||
|
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:
|
||||||
|
|
||||||
|
.. figure:: http://get.pimoroni.com/resources/github-repo-terminal.png
|
||||||
|
:alt: Finding the terminal
|
||||||
|
|
||||||
|
In the new terminal window type the command exactly as it appears below
|
||||||
|
(check for typos) and follow the on-screen instructions:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
curl https://get.pimoroni.com/bme680 | bash
|
||||||
|
|
||||||
|
Manual install:
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Library install for Python 3:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
sudo pip3 install bme680
|
||||||
|
|
||||||
|
Library install for Python 2:
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
sudo pip2 install bme680
|
||||||
|
|
||||||
|
Development:
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If you want to contribute, or like living on the edge of your seat by
|
||||||
|
having the latest code, you should clone this repository, ``cd`` to the
|
||||||
|
library directory, and run:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
sudo python3 setup.py install
|
||||||
|
|
||||||
|
(or ``sudo python setup.py install`` whichever your primary Python
|
||||||
|
environment may be)
|
||||||
|
|
||||||
|
In all cases you will have to enable the i2c bus.
|
||||||
|
|
||||||
|
Documentation & Support
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
- Guides and tutorials - https://learn.pimoroni.com/bme680
|
||||||
|
- Get help - http://forums.pimoroni.com/c/support
|
||||||
|
|
After Width: | Height: | Size: 1.6 KiB |
@ -2,7 +2,7 @@ from .constants import *
|
|||||||
import math
|
import math
|
||||||
import time
|
import time
|
||||||
|
|
||||||
__version__ = '1.0.2'
|
__version__ = '1.0.5'
|
||||||
|
|
||||||
class BME680(BME680Data):
|
class BME680(BME680Data):
|
||||||
"""BOSCH BME680
|
"""BOSCH BME680
|
||||||
@ -36,7 +36,7 @@ class BME680(BME680Data):
|
|||||||
self.set_temperature_oversample(OS_8X)
|
self.set_temperature_oversample(OS_8X)
|
||||||
self.set_filter(FILTER_SIZE_3)
|
self.set_filter(FILTER_SIZE_3)
|
||||||
self.set_gas_status(ENABLE_GAS_MEAS)
|
self.set_gas_status(ENABLE_GAS_MEAS)
|
||||||
|
self.set_temp_offset(0)
|
||||||
self.get_sensor_data()
|
self.get_sensor_data()
|
||||||
|
|
||||||
def _get_calibration_data(self):
|
def _get_calibration_data(self):
|
||||||
@ -56,6 +56,17 @@ class BME680(BME680Data):
|
|||||||
self._set_regs(SOFT_RESET_ADDR, SOFT_RESET_CMD)
|
self._set_regs(SOFT_RESET_ADDR, SOFT_RESET_CMD)
|
||||||
time.sleep(RESET_PERIOD / 1000.0)
|
time.sleep(RESET_PERIOD / 1000.0)
|
||||||
|
|
||||||
|
def set_temp_offset(self, value):
|
||||||
|
"""Set temperature offset in celsius
|
||||||
|
|
||||||
|
If set, the temperature t_fine will be increased by given value in celsius.
|
||||||
|
:param value: Temperature offset in Celsius, eg. 4, -8, 1.25
|
||||||
|
"""
|
||||||
|
if value == 0:
|
||||||
|
self.offset_temp_in_t_fine = 0
|
||||||
|
else:
|
||||||
|
self.offset_temp_in_t_fine = int(math.copysign((((int(abs(value) * 100)) << 8) - 128) / 5, value))
|
||||||
|
|
||||||
def set_humidity_oversample(self, value):
|
def set_humidity_oversample(self, value):
|
||||||
"""Set humidity oversampling
|
"""Set humidity oversampling
|
||||||
|
|
||||||
@ -287,63 +298,75 @@ 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) + self.offset_temp_in_t_fine
|
||||||
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)
|
||||||
|
|
||||||
|
if calc_gas_res < 0:
|
||||||
|
calc_gas_res = (1<<32) + calc_gas_res
|
||||||
|
|
||||||
return calc_gas_res
|
return calc_gas_res
|
||||||
|
|
||||||
|
@ -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.
|
||||||
|
@ -39,11 +39,11 @@ classifiers = ['Development Status :: 5 - Production/Stable',
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name = 'bme680',
|
name = 'bme680',
|
||||||
version = '1.0.2',
|
version = '1.0.5',
|
||||||
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""",
|
||||||
long_description= open('README.txt').read() + open('CHANGELOG.txt').read(),
|
long_description= open('README.rst').read() + "\n" + open('CHANGELOG.txt').read(),
|
||||||
license = 'MIT',
|
license = 'MIT',
|
||||||
keywords = 'Raspberry Pi',
|
keywords = 'Raspberry Pi',
|
||||||
url = 'http://www.pimoroni.com',
|
url = 'http://www.pimoroni.com',
|
||||||
|
@ -1,3 +1,22 @@
|
|||||||
|
bme680 (1.0.5) stable; urgency=low
|
||||||
|
|
||||||
|
* New: set_temp_offset to calibrate temperature offset in degrees C
|
||||||
|
|
||||||
|
-- Phil Howard <phil@pimoroni.com> Fri, 01 Jun 2018 00:00:00 +0000
|
||||||
|
|
||||||
|
bme680 (1.0.4) stable; urgency=low
|
||||||
|
|
||||||
|
* Fix to range_sw_err for extremely high gas readings
|
||||||
|
* Convert to unsigned int to fix negative gas readings
|
||||||
|
|
||||||
|
-- Phil Howard <phil@pimoroni.com> Mon, 04 Dec 2017 00:00:00 +0000
|
||||||
|
|
||||||
|
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
|
||||||
|
5
packaging/bme680_1.0.2_armhf.raspberrypi.upload
Normal file
5
packaging/bme680_1.0.2_armhf.raspberrypi.upload
Normal 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.
|
@ -1,3 +1,22 @@
|
|||||||
|
bme680 (1.0.5) stable; urgency=low
|
||||||
|
|
||||||
|
* New: set_temp_offset to calibrate temperature offset in degrees C
|
||||||
|
|
||||||
|
-- Phil Howard <phil@pimoroni.com> Fri, 01 Jun 2018 00:00:00 +0000
|
||||||
|
|
||||||
|
bme680 (1.0.4) stable; urgency=low
|
||||||
|
|
||||||
|
* Fix to range_sw_err for extremely high gas readings
|
||||||
|
* Convert to unsigned int to fix negative gas readings
|
||||||
|
|
||||||
|
-- Phil Howard <phil@pimoroni.com> Mon, 04 Dec 2017 00:00:00 +0000
|
||||||
|
|
||||||
|
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
|
||||||
|
@ -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)
|
||||||
|
8
packaging/testlog.sh
Executable file
8
packaging/testlog.sh
Executable 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
BIN
terminal.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 63 KiB |
Reference in New Issue
Block a user