

The BME688 by Unit Electronics is a highly versatile environmental sensor designed to measure temperature, humidity, pressure, and gas concentrations, including volatile organic compounds (VOCs). This compact and powerful sensor is ideal for applications requiring precise environmental monitoring and air quality analysis.








The following table outlines the key technical specifications of the BME688 sensor:
| Parameter | Value |
|---|---|
| Manufacturer | Unit Electronics |
| Part ID | BME688 |
| Supply Voltage | 1.71V to 3.6V |
| Operating Current | 2.1 µA (sleep mode), 0.9 mA (typical in operation) |
| Temperature Range | -40°C to +85°C |
| Humidity Range | 0% to 100% RH (non-condensing) |
| Pressure Range | 300 hPa to 1100 hPa |
| Gas Sensing | VOC detection with configurable sensitivity |
| Communication | I²C and SPI interfaces |
| Dimensions | 3.0 mm x 3.0 mm x 0.93 mm |
The BME688 sensor has a total of 8 pins. The table below describes each pin:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | VDD | Power supply input (1.71V to 3.6V) |
| 2 | GND | Ground |
| 3 | SCL | I²C clock line / SPI serial clock |
| 4 | SDA | I²C data line / SPI serial data input |
| 5 | CS | Chip select for SPI (active low) |
| 6 | SDI | SPI serial data input (alternative to SDA) |
| 7 | SDO | SPI serial data output |
| 8 | INT | Interrupt output (optional, configurable) |
0x76. If multiple sensors are used, configure the address accordingly.Below is an example of how to use the BME688 with an Arduino UNO via I²C:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>
// Create an instance of the BME680 sensor
Adafruit_BME680 bme;
// Setup function to initialize the sensor
void setup() {
Serial.begin(9600);
while (!Serial); // Wait for serial connection
// Initialize the BME680 sensor
if (!bme.begin(0x76)) {
Serial.println("Could not find a valid BME688 sensor, check wiring!");
while (1);
}
// Configure sensor settings
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320°C for 150 ms
}
// Loop function to read and display sensor data
void loop() {
if (!bme.performReading()) {
Serial.println("Failed to perform reading!");
return;
}
// Print sensor readings to the Serial Monitor
Serial.print("Temperature = ");
Serial.print(bme.temperature);
Serial.println(" °C");
Serial.print("Humidity = ");
Serial.print(bme.humidity);
Serial.println(" %");
Serial.print("Pressure = ");
Serial.print(bme.pressure / 100.0);
Serial.println(" hPa");
Serial.print("Gas = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" kOhms");
delay(2000); // Wait 2 seconds before the next reading
}
Sensor Not Detected:
0x76 by default) or SPI configuration.Inaccurate Readings:
Communication Errors:
Q: Can the BME688 detect specific gases?
A: The BME688 is optimized for detecting VOCs but does not identify specific gases. It provides a general air quality index based on VOC levels.
Q: What is the typical response time for measurements?
A: The response time varies depending on the parameter being measured. For gas sensing, it typically takes a few seconds to stabilize.
Q: Can I use the BME688 with a 5V microcontroller?
A: Yes, but you must use a level shifter to step down the logic levels to 3.3V, as the BME688 operates at 1.71V to 3.6V.
Q: How do I calibrate the gas sensor?
A: Calibration involves exposing the sensor to known air quality conditions and adjusting the sensitivity settings in software. Refer to the Bosch BME688 datasheet for detailed calibration procedures.