Cirkit Designer Logo
Cirkit Designer
Your all-in-one circuit design IDE
Home / 
Component Documentation

How to Use BME 680: Examples, Pinouts, and Specs

Image of BME 680
Cirkit Designer LogoDesign with BME 680 in Cirkit Designer

Introduction

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.

Explore Projects Built with BME 680

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Arduino UNO with Adafruit BME680 Sensor Data Logger
Image of Adafruit BME680 + Arduino UNO: A project utilizing BME 680 in a practical application
This circuit connects an Adafruit BME680 sensor to an Arduino UNO for the purpose of measuring environmental data such as temperature, pressure, humidity, gas resistance, and altitude. The BME680 is interfaced with the Arduino over I2C, with power supplied from the Arduino's 5V pin. The embedded code on the Arduino reads the sensor data and outputs it to the serial monitor, allowing for real-time environmental monitoring.
Cirkit Designer LogoOpen Project in Cirkit Designer
Arduino Uno and BME680 Sensor-Based Environmental Monitoring System
Image of BME680: A project utilizing BME 680 in a practical application
This circuit consists of an Arduino Uno R3 connected to a BME680 environmental sensor. The Arduino reads temperature, pressure, humidity, and gas resistance data from the BME680 via I2C communication and outputs the data to the Serial Monitor every 2 seconds.
Cirkit Designer LogoOpen Project in Cirkit Designer
ESP32C3-Based Environmental and Health Monitoring System with BME280 and MAX30102 Sensors
Image of Petora_protoboard_v1: A project utilizing BME 680 in a practical application
This circuit features an XIAO ESP32C3 microcontroller interfaced with a BME/BMP280 sensor for environmental data and a MAX30102 sensor for heart rate and oxygen level monitoring. The microcontroller reads data from these sensors via I2C communication and includes a simple program to blink an LED and print a test message to the serial monitor.
Cirkit Designer LogoOpen Project in Cirkit Designer
Wi-Fi Enabled Weather Station with Wemos D1 Mini and BME680
Image of BME680 ESP8266 Air Qlty: A project utilizing BME 680 in a practical application
This circuit consists of a Wemos D1 Mini microcontroller connected to a BME680 environmental sensor for measuring temperature, humidity, and air quality. The Wemos D1 Mini is powered via a USB C chassis mount, and it communicates with the BME680 sensor using I2C protocol.
Cirkit Designer LogoOpen Project in Cirkit Designer

Explore Projects Built with BME 680

Use Cirkit Designer to design, explore, and prototype these projects online. Some projects support real-time simulation. Click "Open Project" to start designing instantly!
Image of Adafruit BME680 + Arduino UNO: A project utilizing BME 680 in a practical application
Arduino UNO with Adafruit BME680 Sensor Data Logger
This circuit connects an Adafruit BME680 sensor to an Arduino UNO for the purpose of measuring environmental data such as temperature, pressure, humidity, gas resistance, and altitude. The BME680 is interfaced with the Arduino over I2C, with power supplied from the Arduino's 5V pin. The embedded code on the Arduino reads the sensor data and outputs it to the serial monitor, allowing for real-time environmental monitoring.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of BME680: A project utilizing BME 680 in a practical application
Arduino Uno and BME680 Sensor-Based Environmental Monitoring System
This circuit consists of an Arduino Uno R3 connected to a BME680 environmental sensor. The Arduino reads temperature, pressure, humidity, and gas resistance data from the BME680 via I2C communication and outputs the data to the Serial Monitor every 2 seconds.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of Petora_protoboard_v1: A project utilizing BME 680 in a practical application
ESP32C3-Based Environmental and Health Monitoring System with BME280 and MAX30102 Sensors
This circuit features an XIAO ESP32C3 microcontroller interfaced with a BME/BMP280 sensor for environmental data and a MAX30102 sensor for heart rate and oxygen level monitoring. The microcontroller reads data from these sensors via I2C communication and includes a simple program to blink an LED and print a test message to the serial monitor.
Cirkit Designer LogoOpen Project in Cirkit Designer
Image of BME680 ESP8266 Air Qlty: A project utilizing BME 680 in a practical application
Wi-Fi Enabled Weather Station with Wemos D1 Mini and BME680
This circuit consists of a Wemos D1 Mini microcontroller connected to a BME680 environmental sensor for measuring temperature, humidity, and air quality. The Wemos D1 Mini is powered via a USB C chassis mount, and it communicates with the BME680 sensor using I2C protocol.
Cirkit Designer LogoOpen Project in Cirkit Designer

Technical Specifications

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

Pin Configuration and Descriptions

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.

Usage Instructions

How to Use the BME 680 in a Circuit

  1. Power Supply: Connect the VDD pin to a 3.3V or 1.8V power source, and connect GND to the ground of your circuit.
  2. Interface Selection:
    • For I2C communication, connect the SCL and SDA pins to the corresponding I2C pins on your microcontroller. Use a pull-up resistor (typically 4.7 kΩ) on both lines.
    • For SPI communication, connect the SPICLK, SDI, SDO, and CS pins to the corresponding SPI pins on your microcontroller.
  3. I2C Address: The I2C address of the BME 680 is determined by the SDO pin:
    • Connect SDO to GND for address 0x76.
    • Connect SDO to VDD for address 0x77.
  4. Initialization: Use a library or write custom code to initialize the sensor and configure its settings (e.g., oversampling rates, filter settings).
  5. Data Reading: Read temperature, humidity, pressure, and gas resistance data from the sensor registers.

Important Considerations and Best Practices

  • Power Supply: Ensure a stable power supply to avoid measurement inaccuracies.
  • Calibration: The BME 680 is factory-calibrated, but additional calibration may be required for specific applications.
  • Gas Sensor Warm-Up: The gas sensor requires a warm-up period (typically a few minutes) for accurate readings.
  • I2C Pull-Up Resistors: Use appropriate pull-up resistors on the I2C lines to ensure reliable communication.
  • Avoid Contaminants: Protect the sensor from dust, water, and other contaminants to maintain accuracy.

Example Code for Arduino UNO

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
}

Troubleshooting and FAQs

Common Issues and Solutions

  1. Sensor Not Detected:

    • Ensure the correct I2C address (0x76 or 0x77) is used in the code.
    • Check the wiring, especially the SCL and SDA connections.
    • Verify that pull-up resistors are present on the I2C lines.
  2. Inaccurate Readings:

    • Ensure the sensor is not exposed to contaminants or extreme environmental conditions.
    • Allow the gas sensor to warm up for a few minutes before taking readings.
    • Verify that the power supply voltage is within the specified range.
  3. Communication Errors:

    • Check the I2C or SPI connections for loose or incorrect wiring.
    • Ensure the microcontroller's I2C or SPI clock speed is within the sensor's supported range.

FAQs

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.