Overview

The BME688 is a 4-in-1 digital environmental sensor manufactured by Bosch Sensortec. Housed in a 3.0×3.0 mm3.0 \times 3.0\text{ mm} 8-pin LGA package, it integrates individual sensors for gas, barometric pressure, relative humidity, and ambient temperature over I2CI^2C or SPI.

As the AI-enhanced successor to the popular BME680, the BME688 features an upgraded metal-oxide (MOX) gas sensor capable of customized multi-step heater profiling. Paired with Bosch's BSEC 2.0 (Bosch Software Environmental Cluster) AI software suite and BME AI Studio, the sensor can train machine-learning models to detect specific gas compositions, food spoilage, forest fire smoke, Volatile Organic Compounds (VOCs), Volatile Sulfur Compounds (VSCs), and indoor air quality (IAQ 0–500 index).

Quick reference

Operating voltage (VCC)3.3 V to 5.0 V DC (breakout with 3.3V LDO)
IC supply voltage (VDD)1.71 V to 3.6 V DC (1.8 V or 3.3 V nominal)
InterfaceI2CI^2C (up to 3.4 MHz) & 3-Wire / 4-Wire SPI (up to 10 MHz)
Default I2CI^2C address0x77 (SDO pin High to 3.3V)
Alternate I2CI^2C address0x76 (SDO pin Low to GND)
SensorsGas MOX, Barometric Pressure, Humidity, Temperature
Air Quality OutputIndex of Air Quality (IAQ 0–500), eCO2\text{eCO}_2 (ppm), bVOCe (ppm\text{ppm})
Operating current3.9 mA3.9\text{ mA} (gas heater active) / 0.15 μA0.15\ \mu\text{A} sleep

Pinout

Breakout modules expose a 6-pin 0.1" (2.54 mm) header or Qwiic / STEMMA QT connector:

PinNameTypeDescription
1VCCPowerSupply input (+3.3 V to +5.0 V DC)
2GNDPowerGround reference (0 V)
3SCL / SCKDigital InputI2CI^2C Serial Clock / SPI Clock
4SDA / SDIDigital Input / OutputI2CI^2C Serial Data / SPI Serial Data Input
5SDO / ADRDigital OutputSPI Data Out / I2CI^2C Address Select (Low = 0x76, High = 0x77)
6CSDigital InputSPI Chip Select (High = I2CI^2C mode, Low = SPI mode)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Module)VCCV_{CC}3.33.3 / 5.05.5VPower rail with LDO
Active Supply CurrentICCI_{CC}3.912.0mAGas sensor heater active
Sleep CurrentIsleepI_{sleep}0.151.0µASleep mode
Temperature RangeTrangeT_{range}-4085°CAccuracy ±0.5C\pm 0.5^\circ\text{C} at 25C25^\circ\text{C}
Pressure RangePrangeP_{range}3001100hPaAbsolute accuracy ±0.6 hPa\pm 0.6\text{ hPa}
Humidity RangeHrangeH_{range}0100% RHAccuracy ±3% RH\pm 3\%\text{ RH}
Gas Sensor Response Timetgast_{gas}<1<1sResponse to VOC gas step

BSEC 2.0 AI Algorithm Outputs

When using Bosch's pre-compiled BSEC 2.0 firmware library:

  • IAQ Index (0–500): 0–50 (Excellent), 51–100 (Good), 101–150 (Lightly polluted), 151–200 (Moderately polluted), 201–300 (Heavily polluted), 301–500 (Extremely polluted).
  • eCO2\text{eCO}_2 Equivalent (ppm): 400 ppm to 5000+ ppm estimate.
  • bVOCe Equivalent (ppm): Breath VOC equivalent concentration.
  • AI Classification Accuracy: Percentage confidence (0–100%) for custom trained gas profiles (e.g. coffee vs vanilla, fresh food vs spoiled food).

Wiring

BME688 PinArduino / MCUESP32Notes
VCC5V / 3.3V3.3VModule includes 3.3V LDO
GNDGNDGNDSystem ground
SCLA5GPIO 22I2CI^2C Clock
SDAA4GPIO 21I2CI^2C Data
CS3.3V / 5V3.3VPull High for I2CI^2C mode

Example (Arduino BSEC 2.0 Library)

cpp
#include <Wire.h>
#include "bsec2.h"

Bsec2 bsec;

void newDataCallback(const bme68xData data, const bsecOutputs outputs, Bsec2 bsec) {
  if (!outputs.nOutputs) return;

  for (uint8_t i = 0; i < outputs.nOutputs; i++) {
    const bsecData output = outputs.output[i];
    if (output.sensor_id == BSEC_OUTPUT_IAQ) {
      Serial.print("IAQ Index: "); Serial.print(output.signal);
      Serial.print(" (Accuracy: "); Serial.print(output.accuracy); Serial.println(")");
    } else if (output.sensor_id == BSEC_OUTPUT_CO2_EQUIVALENT) {
      Serial.print("eCO2: "); Serial.print(output.signal); Serial.println(" ppm");
    } else if (output.sensor_id == BSEC_OUTPUT_RAW_TEMPERATURE) {
      Serial.print("Temperature: "); Serial.print(output.signal); Serial.println(" °C");
    }
  }
}

void setup() {
  Serial.begin(115200);
  Wire.begin();

  bsecSensor sensorList[] = {
    BSEC_OUTPUT_IAQ,
    BSEC_OUTPUT_CO2_EQUIVALENT,
    BSEC_OUTPUT_RAW_TEMPERATURE
  };

  if (!bsec.begin(BME68X_I2C_ADDR_HIGH, Wire)) {
    Serial.println("BME688 BSEC init failed! Check wiring.");
    while (1);
  }

  bsec.updateSubscription(sensorList, ARRAY_LEN(sensorList), BSEC_SAMPLE_RATE_LP);
  bsec.attachCallback(newDataCallback);
  Serial.println("BME688 BSEC initialized successfully.");
}

void loop() {
  bsec.run();
}

Common mistakes

  • Leaving CS floating in I2CI^2C mode: Pull CS High to 3.3V to lock the IC into I2CI^2C mode; floating CS causes random drops into SPI mode.
  • Self-heating offset: The internal MOX gas heater warms up the sensor silicon package, adding a +1.5C+1.5^\circ\text{C} to +2.5C+2.5^\circ\text{C} temperature bias. The BSEC software automatically subtracts this offset.

Notes

  • BME688 vs BME680 vs BME280: BME280 measures Temp/Humidity/Pressure (no gas); BME680 adds basic VOC gas sensing; BME688 adds customizable multi-step heater profiles and BME AI Studio machine learning.

Assets & downloads