Skip to content
Arnd edited this page Jun 6, 2020 · 22 revisions

BME680 library Bosch BME680
License: GPL v3 Build Status arduino-library-badge DOI Doxygen

Arduino library for using the Bosch BME680 sensor which senses temperature, humidity and pressure. The BME680 is a tiny package and no hobbyist is going to be breadboarding this sensor directly, so one will be part of a breakout board. Here are some breakout board examples:

Supplier Image Instructions Comments
Sparkfun Guide The Sparkfun board has pinouts for both SPI and I2C, one interface along one edge and other on the opposing side. The board is designed as part of the SparkFun Qwiic Connect System that uses standardized plugs to daisy-chain I2C breakout boards together quickly. This package is designed to work with 3V systems and has no on-board 5V level shifting.
Bluedot Guide This was my initial BME680 breakout board, purchased locally in Germany where it is manufactured. It has on-board level shifting and is therefore able to run on both 3V and 5V systems. There are fewer pinouts on this board than on the Sparkfun one, several of the pins have different uses depending upon whether I2C or SPI is selected
Adafruit Guide This breakout board is the most compact of the three, with the pinouts having different uses depending upon which communications method (I2C or SPI) is used. As with the Bluedot breakout board above, the Adafruit breakout board has integrated level-shifting and can therefore be run on both 3V and 5V systems.

A complete description of the BME680 sensor can be found in the BME680 Datasheet.

Documentation

In addition to these Wiki pages, the code itself contains Doxygen style comments. This is used to generate comprehensive program and library documentation and the output can be found at BME680 Doxygen documentation.

Sensing

The BME680 allows the user to individually adjust the sampling rates for each sensor component (temperature, humidity, pressure and gas) as well as to set the inter-measurement delay time and the IIR filter sampling coeffient. Combining these settings allows very fine-grained control of measurement times and measurement accuracy as well as energy management.

Temperature sensing

The BME680 measures temperatures between -40°C and 85°C with a full accuracy range between 0°C and +65°C. The accuracy is ±0.5°c with a full resolution of 0.01°C. Since the temperature sensor in the small package is tied to the PCB board on which it is soldered in place and also has some self-heating, the temperature reading will usually be above ambient.

Humidity sensing

Non-condensing humidity between 0% and 100% is measured with an accuracy of ±3% at a maximum resolution of 0.008%.

Pressure sensing

The pressure sensor works in temperatures between -40°C and +85°C although the zone of full accuracy only goes from 0°C to +65°C. Pressure is measured between 300hPa and 1100hPa with an accuracy of ±1.0 hPa and a resolution of 0.2Pa

Environment gas sensing

The gas sensor works by heating a small surface internally and measuring the resistance of the gas layer. This indicates the amount of volatile components in the air and can be used as an indirect means of measuring of air quality. The actual computation of "indoor air quality" is more complex than measuring the resistance, as the relative humidity, temperature, and element heating all play a role in determining that value. These calculations not only require the use of floating-point math, but are quite complex and memory-intensive and are not included in the library. If IAQ measurements are required, then the best solution is to use Bosch's BSEC software - but keep in mind that it won't run on most smaller Arduino platforms.