Skip to content

Arduino Library to access the Bosch BME680 - temperature, pressure, humidity and gas sensor

License

Notifications You must be signed in to change notification settings

Zanduino/BME680

Repository files navigation

License: GPL v3BuildFormatWikiDoxygenarduino-library-badge

BME680 libraryBosch BME680

Arduinolibrary for using theBosch BME680sensor 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 SparkFunQwiic Connect Systemthat 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 theBME680 Datasheet.

Documentation and Examples

The detailed library description including installation instructions and descriptions of all functions plus further details is available on theBME680 Wiki pages.In addition, the code itself contains Doxygen style comments, which is used to generate comprehensive program and library documentation; this can be found atBME680 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 theIIRfilter sampling coeffient. Combining these settings allows very fine-grained control of measurement times and measurement accuracy as well as energy management.

Temperature sensing

The BME280 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 and also has some self-heating as well the temperature reading will usually be above ambient to some degree.

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'sBSECsoftware - but keep in mind that it won't run on most smaller Arduino platforms.

Zanshin Logo