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

How to Use BME680: Examples, Pinouts, and Specs

Image of BME680
Cirkit Designer LogoDesign with BME680 in Cirkit Designer

Introduction

The BME680 is a multi-sensor device designed to measure temperature, humidity, barometric pressure, and gas (air quality) levels. Manufactured by Bosch Sensortec, this compact and highly accurate sensor is ideal for environmental monitoring and Internet of Things (IoT) applications. Its ability to provide multiple environmental parameters in a single package makes it a popular choice for smart home devices, weather stations, air quality monitors, and wearable technology.

Explore Projects Built with BME680

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 BME680 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
Wi-Fi Enabled Weather Station with Wemos D1 Mini and BME680
Image of BME680 ESP8266 Air Qlty: A project utilizing BME680 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
Arduino Uno and BME680 Sensor-Based Environmental Monitoring System
Image of BME680: A project utilizing BME680 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
ESP32-Based Environmental Monitoring System with Solar Charging
Image of IoT Ola (Final): A project utilizing BME680 in a practical application
This circuit features an ESP32 microcontroller interfaced with a BME/BMP280 sensor for environmental monitoring and an MH-Z19B sensor for CO2 measurement, both communicating via I2C (SCL, SDA) and serial (TX, RX) connections respectively. It includes a SIM800L module for GSM communication, connected to the ESP32 via serial (TXD, RXD). Power management is handled by two TP4056 modules for charging 18650 Li-ion batteries via solar panels, with a step-up boost converter to provide consistent voltage to the MH-Z19B, and voltage regulation for the SIM800L. Decoupling capacitors are used to stabilize the power supply to the BME/BMP280 and ESP32.
Cirkit Designer LogoOpen Project in Cirkit Designer

Explore Projects Built with BME680

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 BME680 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 ESP8266 Air Qlty: A project utilizing BME680 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
Image of BME680: A project utilizing BME680 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 IoT Ola (Final): A project utilizing BME680 in a practical application
ESP32-Based Environmental Monitoring System with Solar Charging
This circuit features an ESP32 microcontroller interfaced with a BME/BMP280 sensor for environmental monitoring and an MH-Z19B sensor for CO2 measurement, both communicating via I2C (SCL, SDA) and serial (TX, RX) connections respectively. It includes a SIM800L module for GSM communication, connected to the ESP32 via serial (TXD, RXD). Power management is handled by two TP4056 modules for charging 18650 Li-ion batteries via solar panels, with a step-up boost converter to provide consistent voltage to the MH-Z19B, and voltage regulation for the SIM800L. Decoupling capacitors are used to stabilize the power supply to the BME/BMP280 and ESP32.
Cirkit Designer LogoOpen Project in Cirkit Designer

Common Applications

  • Indoor air quality monitoring
  • Weather stations
  • Smart home automation
  • IoT devices and environmental sensing
  • Wearable health and fitness devices

Technical Specifications

The BME680 combines multiple sensors into a single package, offering high precision and low power consumption. Below are its key technical specifications:

Parameter Value
Supply Voltage 1.7V to 3.6V
Operating Current 2.1 µA (sleep mode), 0.09 mA (humidity/temperature), 12 mA (gas sensor)
Temperature Range -40°C to +85°C
Humidity Range 0% to 100% relative humidity
Pressure Range 300 hPa to 1100 hPa
Gas Sensor Range 0 to 500 ppm (volatile organic compounds - VOCs)
Interface I2C and SPI
Dimensions 3.0 mm x 3.0 mm x 0.93 mm

Pin Configuration and Descriptions

The BME680 is typically available in a 8-pin LGA package. Below is the pin configuration:

Pin Name Description
1 VDD Power supply (1.7V to 3.6V)
2 GND Ground
3 SCL/SPC I2C clock line / SPI clock
4 SDA/SDI I2C data line / SPI data input
5 CS Chip select (used for SPI, active low)
6 SDO SPI data output (used in SPI mode)
7 VDDIO I/O voltage level (1.2V to 3.6V)
8 NC Not connected (leave floating or connect to GND for stability)

Usage Instructions

The BME680 can be used in a variety of circuits, typically interfacing with microcontrollers like the Arduino UNO via I2C or SPI. Below are the steps to use the BME680 in a circuit:

Connecting the BME680 to an Arduino UNO (I2C Mode)

  1. Wiring:

    • Connect the BME680's VDD pin to the Arduino's 3.3V pin.
    • Connect the GND pin to the Arduino's GND.
    • Connect the SCL pin to the Arduino's A5 (I2C clock line).
    • Connect the SDA pin to the Arduino's A4 (I2C data line).
    • Leave the CS and SDO pins unconnected (not used in I2C mode).
  2. Install Required Libraries:

    • Install the Adafruit BME680 library via the Arduino Library Manager.
    • Install the Adafruit Sensor library (dependency for the BME680 library).
  3. Example Code: Below is an example Arduino sketch to read temperature, humidity, pressure, and gas data from the BME680:

    #include <Wire.h>
    #include <Adafruit_Sensor.h>
    #include "Adafruit_BME680.h"
    
    // Create an instance of the BME680 sensor
    Adafruit_BME680 bme;
    
    void setup() {
      Serial.begin(9600);
      while (!Serial); // Wait for serial monitor to open
    
      // Initialize the BME680 sensor
      if (!bme.begin()) {
        Serial.println("Could not find a valid BME680 sensor, check wiring!");
        while (1);
      }
    
      // Set up 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
    }
    
    void loop() {
      // Perform a measurement
      if (!bme.performReading()) {
        Serial.println("Failed to perform reading!");
        return;
      }
    
      // Print sensor data 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");
    
      Serial.println();
      delay(2000); // Wait 2 seconds before the next reading
    }
    

Important Considerations

  • Power Supply: Ensure the BME680 is powered with a stable voltage within its operating range (1.7V to 3.6V). For Arduino UNO, use the 3.3V pin.
  • I2C Pull-Up Resistors: If not already present on the breakout board, add 4.7kΩ pull-up resistors to the SCL and SDA lines.
  • Gas Sensor Warm-Up: The gas sensor requires a warm-up period (typically 5-10 minutes) for accurate readings.
  • Altitude Calculation: Use the pressure readings to calculate altitude if needed, using the barometric formula.

Troubleshooting and FAQs

Common Issues

  1. Sensor Not Detected:

    • Cause: Incorrect wiring or I2C address mismatch.
    • Solution: Double-check the wiring and ensure the correct I2C address (default is 0x76 or 0x77).
  2. Inaccurate Readings:

    • Cause: Insufficient warm-up time for the gas sensor or environmental interference.
    • Solution: Allow the sensor to warm up for at least 5 minutes. Avoid placing the sensor near heat sources or in direct sunlight.
  3. Failed to Perform Reading:

    • Cause: Communication issue between the microcontroller and the sensor.
    • Solution: Verify the connections and ensure the correct library is installed.

FAQs

  1. Can the BME680 measure CO2 levels?

    • No, the BME680 measures volatile organic compounds (VOCs) and provides an air quality index, but it does not directly measure CO2.
  2. What is the typical lifespan of the BME680?

    • The sensor is designed for long-term use, with a typical lifespan of over 10 years under normal operating conditions.
  3. Can I use the BME680 with a 5V microcontroller?

    • Yes, but you must use a logic level shifter to convert the 5V signals to 3.3V for the BME680.

By following this documentation, you can effectively integrate the BME680 into your projects for accurate environmental sensing.