tutorialspinouttools
Sensors · ESP32-C3

BME280 on OLED: Temp, Humidity & Pressure

Free ESP32 & Arduino tutorial · wiring, code & parts · gokul.builds

Overview & Wiring

What it is: The BME280 is the BMP280's bigger sibling — it adds humidity, so you get temperature, humidity and barometric pressure from one tiny I2C chip. It's the go-to sensor for weather stations. How it works: Identical wiring to the BMP280 (I2C, shared with the OLED). The Adafruit library returns all three calibrated values. Wiring (shared I2C bus with the OLED): BME280 SDA -> GPIO4 BME280 SCL -> GPIO5 BME280 VCC -> 3V3 BME280 GND -> GND OLED VCC=3V3, GND=GND, SDA=GPIO4, SCL=GPIO5 Libraries: "Adafruit BME280 Library" (installs "Adafruit BusIO" and "Adafruit Unified Sensor"), plus "Adafruit SSD1306" and "Adafruit GFX Library". On screen / Serial: three lines — temperature (°C), humidity (%), pressure (hPa). Gotchas: Beware fake modules labelled BME280 that are actually BMP280 (no humidity — humidity reads 0 or a fixed number). Address is usually 0x76, sometimes 0x77; the code tries both.

Circuit Diagram

BME280 on OLED: Temp, Humidity & Pressure wiring diagram for ESP32-C3

Parts You Need

ESP32-C3 SuperMiniBuy →
0.96" SSD1306 OLEDBuy →

Source Code (Arduino / ESP32)

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_BME280.h>

Adafruit_SSD1306 display(128, 64, &Wire, -1);
Adafruit_BME280 bme;

void setup() {
  Serial.begin(115200);
  Wire.begin(4, 5);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  if (!bme.begin(0x76) && !bme.begin(0x77)) {
    Serial.println("BME280 not found");
    display.setTextColor(SSD1306_WHITE);
    display.setCursor(0, 28); display.println("BME280 not found");
    display.display();
    while (1) delay(10);
  }
}

void loop() {
  float t  = bme.readTemperature();          // °C
  float h  = bme.readHumidity();             // %
  float hpa = bme.readPressure() / 100.0;    // hPa

  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);  display.println("BME280");
  display.setCursor(0, 16); display.printf("Temp: %.1f C", t);
  display.setCursor(0, 32); display.printf("Hum : %.0f %%", h);
  display.setCursor(0, 48); display.printf("Pres: %.0f hPa", hpa);
  display.display();

  Serial.printf("T %.1fC  H %.0f%%  P %.0fhPa\n", t, h, hpa);
  delay(1000);
}
Browse all tutorials ESP32-C3 pinout Calculators