BME680 with an ESP32 DevKit V1
A Bosch 4-in-1 environmental sensor that measures temperature, humidity, barometric pressure, and gas (VOC) air quality over I2C or SPI.

The BME680 breakout's VIN takes the ESP32 DevKit V1's 3V3, and its SCK and SDI pins act as SCL and SDA on GPIO22 and GPIO21. Its gas heater runs from that same rail, a load the 3V3 pin carries easily.
Wiring the BME680 to the ESP32 DevKit V1
Pin by pin.
| BME680 | ESP32 DevKit V1 |
|---|---|
| VIN | 3V3 |
| GND | GND |
| SCK | GPIO22 (D22) |
| SDI | GPIO21 (D21) |
What to know on the ESP32 DevKit V1
- The heater at 320 °C draws 9 to 13 mA while it is on, against 3.7 µA without gas measurement, so on a battery-powered ESP32 the gas reading, not the temperature, sets the sensor's budget.Bosch BME680 datasheet rev 1.9, pp. 3, 8
- Keep the board's 3V3 output pin unconnected: it is the breakout's regulator output, not an input. VIN alone takes the ESP32's 3V3.Adafruit BME680 guide, Pinouts
- Place the sensor away from the ESP32. The module draws about 240 mA when transmitting 802.11b, and its heat reaches both the temperature and the gas readings.Espressif ESP32 Series Datasheet v5.3, p. 52
BME680 code for the ESP32 DevKit V1
Compiled for esp32:esp32:esp32 on 2026-10-30.
// BME680 on ESP32 DevKit V1: wiring and a free simulation at https://www.tinkered.ai/components/bme680/esp32
#include <Wire.h>
#include <Adafruit_BME680.h>
Adafruit_BME680 bme;
void setup() {
Serial.begin(9600);
if (!bme.begin()) { // default I2C address 0x77
Serial.println("BME680 not found");
while (1) delay(10);
}
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setGasHeater(320, 150); // 320 C for 150 ms
}
void loop() {
if (bme.performReading()) {
Serial.print(bme.temperature); Serial.print(" C ");
Serial.print(bme.humidity); Serial.print(" % ");
Serial.print(bme.pressure / 100.0); Serial.print(" hPa ");
Serial.print(bme.gas_resistance / 1000.0); Serial.println(" kOhm");
}
delay(2000);
}
BME680 on the ESP32 DevKit V1: questions
What address does the BME680 use on the ESP32?
0x77 by default, which bme.begin() asks; tie SDO to GND for 0x76 (Bosch datasheet, p. 38). A BME280 at 0x76 can share the same two ESP32 pins.
Can I run the BME680 heater from the ESP32's 3V3 pin?
Yes. The heater takes 9 to 13 mA at 320 °C (Bosch datasheet, p. 8), well within what the DevKit's 3.3 V rail supplies to external parts.
Keep going
This guide as plain Markdown. /components/bme680/esp32.md