Qwiic_BME280_Py

follow on Twitter

SparkFun Qwiic Environmental Combo Breakout

Python module for the qwiic bme280 sensor, which is part of the SparkFun Qwiic Environmental Combo Breakout

This python package is a port of the existing SparkFun BME280 Arduino Library

This package can be used in conjunction with the overall SparkFun qwiic Python Package

New to qwiic? Take a look at the entire SparkFun qwiic ecosystem.

Supported Platforms

The qwiic BME280 Python package current supports the following platforms:

Dependencies

This driver package depends on the qwiic I2C driver: Qwiic_I2C_Py

Documentation

The SparkFun qwiic BME280 module documentation is hosted at ReadTheDocs

Installation

PyPi Installation

This repository is hosted on PyPi as the sparkfun-qwiic-bme280 package. On systems that support PyPi installation via pip, this library is installed using the following commands

For all users (note: the user must have sudo privileges):

sudo pip install sparkfun-qwiic-bme280

For the current user:

pip install sparkfun-qwiic-bme280

Local Installation

To install, make sure the setuptools package is installed on the system.

Direct installation at the command line:

python setup.py install

To build a package for use with pip:

python setup.py sdist

A package file is built and placed in a subdirectory called dist. This package file can be installed using pip.

cd dist
pip install sparkfun_qwiic_bme280-<version>.tar.gz

Example Use

See the examples directory for more detailed use examples.

import qwiic_bme280
import time
import sys

def runExample():

    print("\nSparkFun BME280 Sensor  Example 1\n")
    mySensor = qwiic_bme280.QwiicBme280()

    if mySensor.isConnected() == False:
        print("The Qwiic BME280 device isn't connected to the system. Please check your connection", \
            file=sys.stderr)
        return

    mySensor.begin()

    while True:
        print("Humidity:\t%.3f" % mySensor.humidity)

        print("Pressure:\t%.3f" % mySensor.pressure)

        print("Altitude:\t%.3f" % mySensor.altitude_feet)

        print("Temperature:\t%.2f" % mySensor.temperature_fahrenheit)

        print("")

        time.sleep(1)

SparkFun - Start Something

Table of Contents

API Reference

qwiic_bme280

Python module for the qwiic bme280 sensor, which is part of the [SparkFun Qwiic Environmental Combo Breakout](https://www.sparkfun.com/products/14348)

This python package is a port of the existing [SparkFun BME280 Arduino Library](https://github.com/sparkfun/SparkFun_BME280_Arduino_Library)

This package can be used in conjunction with the overall [SparkFun qwiic Python Package](https://github.com/sparkfun/Qwiic_Py)

New to qwiic? Take a look at the entire [SparkFun qwiic ecosystem](https://www.sparkfun.com/qwiic).

class qwiic_bme280.QwiicBme280(address=None, i2c_driver=None)[source]
Parameters:
  • address – The I2C address to use for the device. If not provided, the default address is used.
  • i2c_driver – An existing i2c driver object. If not provided a driver object is created.
Returns:

The BME280 device object.

Return type:

Object

altitude_feet

Return the current Altitude in feet

Returns:The current altitude in feets
Return type:float
altitude_meters

Return the current Altitude in meters

Returns:The current altitude in meters
Return type:float
begin()[source]

Initialize the operation of the BME280 module

Returns:Returns true of the initializtion was successful, otherwise False.
Return type:bool
check_sample_value(userValue)[source]

Validates an over sample value

Parameters:userValue – The oversample value to check. Allowed values are 0 to 16 These are used in the humidty, pressure, and temp oversample functions
Returns:Valid oversample value
Return type:int
connected

Determine if a BME280 device is conntected to the system..

Returns:True if the device is connected, otherwise False.
Return type:bool
dewpoint_celsius

Returns the Dew point in degrees C.

Returns:The current dewpoint in C.
Return type:float
dewpoint_fahrenheit

Returns the Dew point in degrees F.

Returns:The current dewpoint in F.
Return type:float
get_altitude_feet()[source]

Return the current Altitude in feet

Returns:The current altitude in feets
Return type:float
get_altitude_meters()[source]

Return the current Altitude in meters

Returns:The current altitude in meters
Return type:float
get_dewpoint_celsius()[source]

Returns the Dew point in degrees C.

Returns:The current dewpoint in C.
Return type:float
get_dewpoint_fahrenheit()[source]

Returns the Dew point in degrees F.

Returns:The current dewpoint in F.
Return type:float
get_mode()[source]

Returns the operational mode of the sensor.

Returns:The current operational mode
Return type:MODE_SLEEP, MODE_FORCED, or MODE_NORMAL
get_reference_pressure()[source]

Get the current reference pressure for the sensor.

Returns:The current reference pressure.
Return type:float
get_temperature_celsius()[source]
Returns temperature in DegC, resolution is 0.01 DegC. Output value of “5123” equals 51.23 DegC.
t_fine carries fine temperature as global value
Returns:The current temperature in C.
Return type:float
get_temperature_fahrenheit()[source]
Returns temperature in Deg F, resolution is 0.01 DegF. Output value of “5123” equals 51.23 DegF.
t_fine carries fine temperature as global value
Returns:The current temperature in F.
Return type:float
humidity

Returns humidity in %RH as unsigned 32 bit integer in Q22. 10 format (22 integer and 10 fractional bits). Output value of “47445” represents 47445/1024 = 46. 33 %RH

Returns:The current humidity value
Return type:float
is_connected()[source]

Determine if a BME280 device is conntected to the system..

Returns:True if the device is connected, otherwise False.
Return type:bool
is_measuring()[source]

Return if the sensor is measuring or not

Returns:True if the sensor is measuring, else False
Rvalue:boolean
mode

Returns the operational mode of the sensor.

Returns:The current operational mode
Return type:MODE_SLEEP, MODE_FORCED, or MODE_NORMAL
pressure

Returns pressure in Pa as unsigned 32 bit integer in Q24.8 format (24 integer bits and 8 fractional bits). Output value of “24674867” represents 24674867/256 = 96386.2 Pa = 963.862 hPa

Returns:Pressure in Pa
Return type:integer
read_humidity()[source]

Returns humidity in %RH as unsigned 32 bit integer in Q22. 10 format (22 integer and 10 fractional bits). Output value of “47445” represents 47445/1024 = 46. 33 %RH

Returns:The current humidity value
Return type:float
read_pressure()[source]

Returns pressure in Pa as unsigned 32 bit integer in Q24.8 format (24 integer bits and 8 fractional bits). Output value of “24674867” represents 24674867/256 = 96386.2 Pa = 963.862 hPa

Returns:Pressure in Pa
Return type:integer
reference_pressure

Get the current reference pressure for the sensor.

Returns:The current reference pressure.
Return type:float
reset()[source]

Resets the sensor. If called, the begin method must be called before using the sensor.

set_filter(filterSetting)[source]

Set the filter bits in the BME280s config register

Parameters:filterSetting – The filter bits for the BME280. Acceptable values 0 = filter off 1 = coefficients = 2 2 = coefficients = 4 3 = coefficients = 8 4 = coefficients = 16
Returns:No return value
set_humidity_oversample(overSampleAmount)[source]

Set the humidity oversample value

Parameters:overSampleAmount – The humidity oversample value. Acceptable values 0 = turns off humidity sensing 1 to 16 are valid over sampling values
Returns:No return value
set_mode(mode)[source]

Set the operational mode of the sensor.

Parameters:mode – One of the class constant values. MODE_SLEEP, MODE_FORCED, MODE_NORMAL
Returns:No return value
set_pressure_oversample(overSampleAmount)[source]

Set the pressure oversample value

Parameters:overSampleAmount – The pressure oversample value. Acceptable values 0 = turns off pressure sensing 1 to 16 are valid over sampling values
Returns:No return value
set_reference_pressure(refPressure)[source]

Sets the referance pressure for the sensor measurments.

Parameters:refPressure – The referance pressure to use.
Returns:No return value
set_standby_time(timeSetting)[source]

Set the standby bits in the BME280s config register

Parameters:timeSetting – The standby time bits - acceptable values 0 = 0.5ms 1 = 62.5ms 2 = 125ms 3 = 250ms 4 = 500ms 5 = 1000ms 6 = 10ms 7 = 20ms
Returns:No return value
set_tempature_oversample(overSampleAmount)[source]

Set the temperature oversample value

Parameters:overSampleAmount – The temperature oversample value. Acceptable values 0 = turns off temp sensing 1 to 16 are valid over sampling values
Returns:No return value
temperature_celsius
Returns temperature in DegC, resolution is 0.01 DegC. Output value of “5123” equals 51.23 DegC.
t_fine carries fine temperature as global value
Returns:The current temperature in C.
Return type:float
temperature_fahrenheit
Returns temperature in Deg F, resolution is 0.01 DegF. Output value of “5123” equals 51.23 DegF.
t_fine carries fine temperature as global value
Returns:The current temperature in F.
Return type:float

Basic Operation

examples/qwiic_bme280_ex1.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/bin/env python
#-----------------------------------------------------------------------------
# qwiic_env_bme280_ex1.py
#
# Simple Example for the Qwiic BME280 Device
#------------------------------------------------------------------------
#
# Written by  SparkFun Electronics, May 2019
# 
# This python library supports the SparkFun Electroncis qwiic 
# qwiic sensor/board ecosystem on a Raspberry Pi (and compatable) single
# board computers. 
#
# More information on qwiic is at https://www.sparkfun.com/qwiic
#
# Do you like this library? Help support SparkFun. Buy a board!
#
#==================================================================================
# Copyright (c) 2019 SparkFun Electronics
#
# 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.
#==================================================================================
# Example 1
#

from __future__ import print_function
import qwiic_bme280
import time
import sys

def runExample():

	print("\nSparkFun BME280 Sensor  Example 1\n")
	mySensor = qwiic_bme280.QwiicBme280()

	if mySensor.connected == False:
		print("The Qwiic BME280 device isn't connected to the system. Please check your connection", \
			file=sys.stderr)
		return

	mySensor.begin()

	while True:
		print("Humidity:\t%.3f" % mySensor.humidity)

		print("Pressure:\t%.3f" % mySensor.pressure)	

		print("Altitude:\t%.3f" % mySensor.altitude_feet)

		print("Temperature:\t%.2f" % mySensor.temperature_fahrenheit)		

		print("")
		
		time.sleep(1)


if __name__ == '__main__':
	try:
		runExample()
	except (KeyboardInterrupt, SystemExit) as exErr:
		print("\nEnding Example 1")
		sys.exit(0)


Adjust Sensor Settings

examples/qwiic_bme280_ex4.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/bin/env python
#-----------------------------------------------------------------------------
# qwiic_env_bme280_ex4.py
#
# Simple Example for the Qwiic BME280 Device
#------------------------------------------------------------------------
#
# Written by  SparkFun Electronics, May 2019
# 
# This python library supports the SparkFun Electroncis qwiic 
# qwiic sensor/board ecosystem on a Raspberry Pi (and compatable) single
# board computers. 
#
# More information on qwiic is at https:# www.sparkfun.com/qwiic
#
# Do you like this library? Help support SparkFun. Buy a board!
#
#==================================================================================
# Copyright (c) 2019 SparkFun Electronics
#
# 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.
#==================================================================================
# Example 4 - port of the Arduino example 4
#

from __future__ import print_function
import qwiic_bme280
import time
import sys

def runExample():

	print("\nSparkFun BME280 Sensor  Example 4\n")
	mySensor = qwiic_bme280.QwiicBme280()

	if mySensor.connected == False:
		print("The Qwiic BME280 device isn't connected to the system. Please check your connection", \
			file=sys.stderr)
		return

	mySensor.begin()

	# setup the sensor
	mySensor.filter = 1  		# 0 to 4 is valid. Filter coefficient. See 3.4.4
	mySensor.standby_time = 0 	# 0 to 7 valid. Time between readings. See table 27.
	
	mySensor.over_sample = 1			# 0 to 16 are valid. 0 disables temp sensing. See table 24.
	mySensor.pressure_oversample = 1	# 0 to 16 are valid. 0 disables pressure sensing. See table 23.
	mySensor.humidity_oversample = 1	# 0 to 16 are valid. 0 disables humidity sensing. See table 19.
	mySensor.mode = mySensor.MODE_NORMAL # MODE_SLEEP, MODE_FORCED, MODE_NORMAL is valid. See 3.3

	while True:
		print("Humidity:\t%.3f" % mySensor.humidity)

		print("Pressure:\t%.3f" % mySensor.pressure)	

		print("Altitude:\t%.3f" % mySensor.altitude_feet)

		print("Temperature:\t%.2f\n" % mySensor.temperature_fahrenheit)

		time.sleep(1)


if __name__ == '__main__':
	try:
		runExample()
	except (KeyboardInterrupt, SystemExit) as exErr:
		print("\nEnding Example 4")
		sys.exit(0)


Calibration Values

examples/qwiic_bme280_ex5.py
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/usr/bin/env python
#-----------------------------------------------------------------------------
# qwiic_env_bme280_ex5.py
#
# Simple Example for the Qwiic BME280 Device
#------------------------------------------------------------------------
#
# Written by  SparkFun Electronics, May 2019
# 
# This python library supports the SparkFun Electroncis qwiic 
# qwiic sensor/board ecosystem on a Raspberry Pi (and compatable) single
# board computers. 
#
# More information on qwiic is at https:# www.sparkfun.com/qwiic
#
# Do you like this library? Help support SparkFun. Buy a board!
#
#==================================================================================
# Copyright (c) 2019 SparkFun Electronics
#
# 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.
#==================================================================================
# Example 5 - port of the Arduino example 5
#

from __future__ import print_function
import qwiic_bme280
import time
import sys

def runExample():

	print("\nSparkFun BME280 Sensor  Example 5\n")
	mySensor = qwiic_bme280.QwiicBme280()

	if mySensor.connected == False:
		print("The Qwiic BME280 device isn't connected to the system. Please check your connection", \
			file=sys.stderr)
		return

	mySensor.begin()

	print("ID(0xD0): 0x%.2x" % mySensor._i2c.readByte(mySensor.address, mySensor.BME280_CHIP_ID_REG))
	print("Reset register(0xE0): 0x%.2x" % mySensor._i2c.readByte(mySensor.address, mySensor.BME280_RST_REG))
	print("ctrl_meas(0xF4): 0x%.2x" % mySensor._i2c.readByte(mySensor.address, mySensor.BME280_CTRL_MEAS_REG))
	print("ctrl_hum(0xF2): 0x%.2x\n" % mySensor._i2c.readByte(mySensor.address, mySensor.BME280_CTRL_HUMIDITY_REG))

	print("Displaying all regs:")
	memCounter = 0x80
	for row in range(8,16):
		print("0x%.2x 0:" % row, end='')
		for column in range(0,16):
			tempReadData = mySensor._i2c.readByte(mySensor.address, memCounter)
			print("0x%.2x " % tempReadData, end='')

			memCounter += 1
		print("")


	print("Displaying concatenated calibration words:")
	print("dig_T1, uint16: %d" % mySensor.calibration["dig_T1"])
	print("dig_T2, int16: %d" % mySensor.calibration["dig_T2"])
	print("dig_T3, int16: %d" % mySensor.calibration["dig_T3"])
	print("dig_P1, uint16: %d" % mySensor.calibration["dig_P1"])
	print("dig_P2, int16: %d" % mySensor.calibration["dig_P2"])
	print("dig_P3, int16: %d" % mySensor.calibration["dig_P3"])
	print("dig_P4, int16: %d" % mySensor.calibration["dig_P4"])
	print("dig_P5, int16: %d" % mySensor.calibration["dig_P5"])
	print("dig_P6, int16: %d" % mySensor.calibration["dig_P6"])
	print("dig_P7, int16: %d" % mySensor.calibration["dig_P7"])
	print("dig_P8, int16: %d" % mySensor.calibration["dig_P8"])
	print("dig_P9, int16: %d" % mySensor.calibration["dig_P9"])
	print("dig_H1, uint8: %d" % mySensor.calibration["dig_H1"])
	print("dig_H2, int16: %d" % mySensor.calibration["dig_H2"])
	print("dig_H3, uint8: %d" % mySensor.calibration["dig_H3"])
	print("dig_H4, int16: %d" % mySensor.calibration["dig_H5"])
	print("dig_H6, int8: %d" % mySensor.calibration["dig_H6"])
	while True:

		print("Humidity:\t%.3f" % mySensor.humidity)

		print("Pressure:\t%.3f" % mySensor.pressure)	

		print("Altitude:\t%.3f" % mySensor.altitude_feet)

		print("Temperature:\t%.2f\n" % mySensor.temperature_fahrenheit)

		time.sleep(1)

if __name__ == '__main__':
	try:
		runExample()
	except (KeyboardInterrupt, SystemExit) as exErr:
		print("\nEnding Example 5")
		sys.exit(0)


Indices and tables