

The BME 680 is a digital environmental sensor manufactured by Bosch. It is capable of measuring temperature, humidity, barometric pressure, and gas (air quality) levels. This versatile sensor is designed for applications requiring high accuracy and compact size, making it ideal for environmental monitoring, smart home devices, wearables, and IoT (Internet of Things) applications.
The BME 680 combines multiple sensing capabilities into a single package, reducing the need for multiple sensors in a design. Its gas sensor can detect volatile organic compounds (VOCs), enabling air quality monitoring. The sensor communicates via I2C or SPI interfaces, making it compatible with a wide range of microcontrollers and development platforms.








Below are the key technical details of the BME 680 sensor:
| Parameter | Value |
|---|---|
| Supply Voltage (VDD) | 1.71V to 3.6V |
| Interface | I2C (up to 3.4 MHz) or SPI (up to 10 MHz) |
| Temperature Range | -40°C to +85°C |
| Temperature Accuracy | ±1.0°C |
| Humidity Range | 0% to 100% RH |
| Humidity Accuracy | ±3% RH |
| Pressure Range | 300 hPa to 1100 hPa |
| Pressure Accuracy | ±1 hPa |
| Gas Sensor | Measures VOCs (volatile organic compounds) |
| Power Consumption | 0.15 mA (typical in low-power mode) |
| Dimensions | 3.0 mm x 3.0 mm x 0.93 mm |
The BME 680 is typically available in a 8-pin LGA package. Below is the pinout description:
| Pin | Name | Description |
|---|---|---|
| 1 | VDD | Power supply input (1.71V to 3.6V). |
| 2 | GND | Ground connection. |
| 3 | SCL/SPICLK | I2C clock line (SCL) or SPI clock line (SPICLK). |
| 4 | SDA/SDI | I2C data line (SDA) or SPI data input (SDI). |
| 5 | SDO | SPI data output (SDO) or I2C address selection (connect to GND or VDD). |
| 6 | CS | Chip select for SPI (active low). Tie to VDD for I2C mode. |
| 7 | VDDIO | I/O voltage supply (1.2V to 3.6V). |
| 8 | NC | Not connected. Leave floating or connect to GND. |
0x76.0x77.Below is an example of how to use the BME 680 with an Arduino UNO via I2C:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME680.h>
// Create an instance of the BME680 sensor
Adafruit_BME680 bme;
// Setup function
void setup() {
Serial.begin(9600); // Initialize serial communication
while (!Serial); // Wait for serial monitor to open (optional)
// Initialize the BME680 sensor
if (!bme.begin(0x76)) { // Use 0x77 if SDO is connected to VDD
Serial.println("Could not find a valid BME680 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
void loop() {
if (!bme.performReading()) {
Serial.println("Failed to perform reading!");
return;
}
// Print sensor readings
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 Resistance = ");
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(" kOhms");
delay(2000); // Wait 2 seconds before the next reading
}
Sensor Not Detected:
0x76 or 0x77) is used in the code.Inaccurate Readings:
Communication Errors:
Q: Can the BME 680 measure CO2 levels?
A: No, the BME 680 does not directly measure CO2. It measures VOCs, which can be used as an indicator of air quality.
Q: How long does the gas sensor take to stabilize?
A: The gas sensor typically requires a warm-up period of 5 to 10 minutes for accurate readings.
Q: Can the BME 680 operate at 5V?
A: No, the BME 680 operates at a maximum voltage of 3.6V. Use a level shifter if interfacing with a 5V system.