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 Adafruit. It is a versatile component capable of measuring temperature, humidity, barometric pressure, and gas (air quality) levels. This sensor is widely used in applications such as environmental monitoring, weather stations, smart home devices, and IoT systems. Its compact design and high accuracy make it an excellent choice for projects requiring precise atmospheric data.

The BME 680 integrates a gas sensor to detect volatile organic compounds (VOCs), enabling air quality analysis. It communicates via I2C or SPI interfaces, making it compatible with a wide range of microcontrollers, including the Arduino UNO.

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
Manufacturer Adafruit
Part ID BME 680
Supply Voltage (VDD) 1.7V to 3.6V
Interface I2C, SPI
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 (air quality index)
Power Consumption 0.15mA (low power mode) to 12mA (peak)

Pin Configuration

The BME 680 sensor typically comes in a breakout board format. Below is the pin configuration:

Pin Name Description
VIN Power supply input (3.3V or 5V)
GND Ground
SCL I2C clock line (or SPI clock)
SDA I2C data line (or SPI MOSI)
CS Chip select (used in SPI mode)
SDO SPI MISO (or I2C address selection)

Usage Instructions

Connecting the BME 680 to an Arduino UNO

The BME 680 can be easily connected to an Arduino UNO using the I2C interface. Below is the wiring guide:

BME 680 Pin Arduino UNO Pin
VIN 5V
GND GND
SCL A5 (I2C Clock)
SDA A4 (I2C Data)

Installing the Required Library

To use the BME 680 with Arduino, install the Adafruit BME680 Library:

  1. Open the Arduino IDE.
  2. Go to Sketch > Include Library > Manage Libraries.
  3. Search for "Adafruit BME680" and click Install.

Example Code

The following example demonstrates how to read temperature, humidity, pressure, and gas data from the BME 680:

#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 monitor to open

  // Initialize the BME680 sensor
  if (!bme.begin()) {
    Serial.println("Could not find a valid BME680 sensor, check wiring!");
    while (1);
  }

  // Configure the 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");

  Serial.println();
  delay(2000); // Wait 2 seconds before the next reading
}

Best Practices

  • Use pull-up resistors (4.7kΩ) on the I2C lines (SCL and SDA) if not already included on the breakout board.
  • Ensure the sensor is placed in an open area for accurate air quality readings.
  • Avoid exposing the sensor to water or corrosive gases, as this may damage the gas sensor.

Troubleshooting and FAQs

Common Issues

  1. Sensor not detected by Arduino:

    • Ensure the wiring is correct and matches the pin configuration.
    • Verify that the I2C address (default: 0x76 or 0x77) is correct in the code.
  2. Incorrect or fluctuating readings:

    • Check for stable power supply and proper grounding.
    • Allow the sensor to stabilize for a few minutes after powering on.
  3. Gas sensor readings are inconsistent:

    • The gas sensor requires a burn-in period (up to 24 hours) for optimal performance.
    • Ensure the sensor is not exposed to sudden temperature or humidity changes.

FAQs

Q: Can the BME 680 operate at 5V?
A: Yes, the breakout board includes a voltage regulator, allowing it to operate at 3.3V or 5V.

Q: How do I change the I2C address?
A: The I2C address can be changed by connecting the SDO pin to GND (0x76) or VIN (0x77).

Q: Can the BME 680 measure CO2 levels?
A: No, the BME 680 measures VOCs, which can be used as an indicator of air quality but does not directly measure CO2.

Q: Is the BME 680 suitable for outdoor use?
A: The sensor is not weatherproof and should be protected from water and extreme conditions if used outdoors.

By following this documentation, you can effectively integrate the BME 680 sensor into your projects for accurate environmental monitoring.