BME680

A Bosch 4-in-1 environmental sensor that measures temperature, humidity, barometric pressure, and gas (VOC) air quality over I2C or SPI.

BME680: Environmental and gas sensing

What is the BME680?

The BME680 is a digital environmental sensor from Bosch Sensortec that combines four measurements in one package: temperature, relative humidity, barometric pressure, and a gas (VOC) reading for air quality. On this Adafruit breakout the tiny 3.0 x 3.0 mm sensor is paired with an onboard 3.3V regulator and level shifting, so it runs from a 3-5V supply while its logic stays compatible with both 3.3V and 5V microcontrollers.

Humidity is reported across 0-100% RH with roughly ±3% accuracy, pressure across 300-1100 hPa with about ±1 hPa absolute accuracy, and temperature across -40 to +85°C with about ±1.0°C accuracy. The gas channel uses a heated metal-oxide (MOX) element whose resistance shifts in the presence of volatile organic compounds such as alcohols, solvents, and cooking or paint fumes, which lets libraries derive an indoor air-quality index.

The board talks I2C at address 0x77 by default (selectable to 0x76 by pulling the SDO pin), and the same header also exposes a full 4-wire SPI interface via the SCK, SDI/MOSI, SDO/MISO, and CS pins. Bosch supplies the BSEC library for calibrated IAQ output, and Adafruit provides a simpler Arduino library for raw temperature, humidity, pressure, and gas-resistance values.

BME680 pinout

PinFunctionType
VIN VIN (3-5V)PowerPower in
3V3 3V3 (out)PowerPower out
GND GNDPowerPower in
SCK SCK / SCLI²C SCL · SPI SCKBidirectional (GPIO)
SDO SDO / MISOSPI MISO · Digital I2C address selectBidirectional (GPIO)
SDI SDI / SDAI²C SDA · SPI MOSIBidirectional (GPIO)
CS CSSPI chip select · Digital SPI/I2C mode selectDigital input

Specifications

Operating voltage
3.3 V (max 5 V)
Interface
I²C
I²C address
0x77
I²C pull-ups
On-board (no external resistors)
Dimensions
25.4 × 5 × 17.8 mm

Verified from the Tinkered component library · Adafruit (Bosch BME680).

Circuit requirements

  • Power the breakout through VIN with any 3-5V rail; the onboard regulator produces a clean 3.3V that is also broken out on the 3V3 pin for other components.
  • Logic is level-shifted on the board, so SCK/SCL and SDI/SDA work directly with either 3.3V or 5V microcontrollers.
  • For I2C, the breakout includes built-in pull-up resistors on SDA and SCL, so no external pull-ups are required for a short bench connection.
  • Default I2C address is 0x77; tie SDO to GND (or set the address-select jumper) to move it to 0x76, which is what many stock library examples expect.
  • For SPI, use SCK as clock, SDI as MOSI, SDO as MISO, and CS as chip select; CS also selects between I2C and SPI mode.
  • The MOX gas element needs warm-up: allow roughly 30 minutes of run time each session for stable gas readings, and a longer 48-hour burn-in on a brand-new sensor before trusting air-quality trends.

Board compatibility

The BME680 connects to any of the microcontrollers supported in Tinkered. Mind the 3.3 V logic level on 3.3 V boards.

Common BME680 mistakes

Using the wrong I2C address

This board answers at 0x77 by default, but many Arduino examples and libraries assume 0x76. If begin() fails or returns garbage, initialize with the 0x77 address or move the board to 0x76 by grounding SDO.

Expecting instant, calibrated air-quality readings

The gas sensor's baseline resistance drifts as the heater warms up and stabilizes. Skipping the recommended warm-up (about 30 minutes per session, plus a 48-hour initial burn-in) gives readings that keep climbing and look broken.

Treating gas resistance as a calibrated ppm value

The raw output is a gas resistance in ohms, not a concentration. A usable indoor air-quality index requires baseline tracking, which is what Bosch's BSEC library provides. Comparing raw ohms between boards or sessions without a baseline is misleading.

Ignoring self-heating on the temperature reading

The onboard gas heater and the die itself warm the chip, so the reported temperature can read a degree or two above true ambient, especially at fast sampling rates. Apply a temperature offset or sample less often for accurate room temperature.

Confusing it with the BME280 or BMP680

The BME680 is the only Bosch part in this family with a gas/VOC channel. Code and libraries written for the BME280 will read temperature, humidity, and pressure but will never expose gas data, and part-number typos lead to the wrong driver.

BME680 datasheet

Official BME680 datasheetAdafruit (Bosch BME680)

Popular BME680 projects

Indoor air-quality monitor

Combine the gas channel with humidity and temperature to build a desk or room monitor that flags rising VOC levels from cooking, cleaning products, or poor ventilation.

All-in-one weather station

Log barometric pressure, temperature, and humidity trends to track local weather and predict changes, using pressure as a short-term forecast indicator.

Altimeter and elevation logger

Convert the sensor's fine pressure resolution into relative altitude for drones, hiking loggers, or stairwell-counting projects.

Connected environment dashboard

Push all four readings to an ESP32 or Raspberry Pi and chart temperature, humidity, pressure, and air quality over time on a web or MQTT dashboard.

Build with the BME680.

Drop the BME680 into a circuit, write firmware, and simulate it in your browser, then deploy to real hardware. All in one editable Tinkered project.