BME680 with a Raspberry Pi Pico
A Bosch 4-in-1 environmental sensor that measures temperature, humidity, barometric pressure, and gas (VOC) air quality over I2C or SPI.

The Adafruit BME680 breakout takes its VIN from the Raspberry Pi Pico's 3V3 pin and talks on I2C0, SCK to SCL on GP5 and SDI to SDA on GP4. Its gas heater is the one load here that matters for the Pico's 3.3 V budget.
Wiring the BME680 to the Raspberry Pi Pico
Pin by pin.
| BME680 | Raspberry Pi Pico |
|---|---|
| VIN | 3V3 |
| GND | GND |
| SCK | GP5 |
| SDI | GP4 |
What to know on the Raspberry Pi Pico
- With the heater at 320 °C the BME680 draws 9 to 13 mA, against 3.7 µA without gas sensing. That still sits well within the 300 mA Raspberry Pi recommends for loads on 3V3.Bosch BME680 datasheet rev 1.9, pp. 3, 8; Raspberry Pi Pico datasheet, release 21, p. 8
- The breakout's 3V3 pin is its regulator's output: leave it unconnected and feed the board through VIN only.Adafruit BME680 guide, Pinouts
- bme.begin() with no argument looks at 0x77, the board's default. Tie SDO to GND for 0x76 if another part already uses 0x77.Bosch BME680 datasheet rev 1.9, p. 38
BME680 code for the Raspberry Pi Pico
Compiled for rp2040:rp2040:rpipico on 2026-10-30.
// BME680 on Raspberry Pi Pico: wiring and a free simulation at https://www.tinkered.ai/components/bme680/raspberry-pi-pico
#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 Raspberry Pi Pico: questions
Should I power the BME680 breakout from 3V3 or VBUS on a Pico?
3V3. VIN takes 3 V to 5 V (Adafruit guide, Pinouts), and powering it at the Pico's logic level keeps its I2C level-shifted lines at 3.3 V. VBUS also drops to 0 V when the Pico runs without USB (Pico datasheet, p. 8).
Why do my BME680 gas readings start high on the Pico?
The metal-oxide gas sensor needs its heater cycles to settle; the first readings after power-up drift. Keep the sketch running and compare readings over time, not single values.
Which I2C address does the BME680 use with the Pico?
0x77 by default, or 0x76 with SDO tied to GND (Bosch datasheet rev 1.9, p. 38).
Keep going
This guide as plain Markdown. /components/bme680/raspberry-pi-pico.md