Overview
The BME688 is a 4-in-1 digital environmental sensor manufactured by Bosch Sensortec. Housed in a 8-pin LGA package, it integrates individual sensors for gas, barometric pressure, relative humidity, and ambient temperature over 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) |
| Interface | (up to 3.4 MHz) & 3-Wire / 4-Wire SPI (up to 10 MHz) |
| Default address | 0x77 (SDO pin High to 3.3V) |
| Alternate address | 0x76 (SDO pin Low to GND) |
| Sensors | Gas MOX, Barometric Pressure, Humidity, Temperature |
| Air Quality Output | Index of Air Quality (IAQ 0–500), (ppm), bVOCe () |
| Operating current | (gas heater active) / sleep |
Pinout
Breakout modules expose a 6-pin 0.1" (2.54 mm) header or Qwiic / STEMMA QT connector:
| Pin | Name | Type | Description |
|---|---|---|---|
| 1 | VCC | Power | Supply input (+3.3 V to +5.0 V DC) |
| 2 | GND | Power | Ground reference (0 V) |
| 3 | SCL / SCK | Digital Input | Serial Clock / SPI Clock |
| 4 | SDA / SDI | Digital Input / Output | Serial Data / SPI Serial Data Input |
| 5 | SDO / ADR | Digital Output | SPI Data Out / Address Select (Low = 0x76, High = 0x77) |
| 6 | CS | Digital Input | SPI Chip Select (High = mode, Low = SPI mode) |
Specifications
| Parameter | Symbol | Min | Typ | Max | Unit | Conditions |
|---|---|---|---|---|---|---|
| Supply Voltage (Module) | 3.3 | 3.3 / 5.0 | 5.5 | V | Power rail with LDO | |
| Active Supply Current | — | 3.9 | 12.0 | mA | Gas sensor heater active | |
| Sleep Current | — | 0.15 | 1.0 | µA | Sleep mode | |
| Temperature Range | -40 | — | 85 | °C | Accuracy at | |
| Pressure Range | 300 | — | 1100 | hPa | Absolute accuracy | |
| Humidity Range | 0 | — | 100 | % RH | Accuracy | |
| Gas Sensor Response Time | — | — | s | Response 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).
- 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 Pin | → | Arduino / MCU | ESP32 | Notes |
|---|---|---|---|---|
VCC | 5V / 3.3V | 3.3V | Module includes 3.3V LDO | |
GND | GND | GND | System ground | |
SCL | A5 | GPIO 22 | Clock | |
SDA | A4 | GPIO 21 | Data | |
CS | 3.3V / 5V | 3.3V | Pull High for mode |
Example (Arduino BSEC 2.0 Library)
#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
CSfloating in mode: PullCSHigh to 3.3V to lock the IC into mode; floatingCScauses random drops into SPI mode. - Self-heating offset: The internal MOX gas heater warms up the sensor silicon package, adding a to 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
- datasheetdatasheet
- product-pagereference