Preview build — page text is a draft awaiting human review. Code badges come from real compiles. The flasher is real but not yet hardware-tested; the Playground is still a preview.

SSD1306 OLED with ESP32-C3 SuperMini — safe I2C pins and code

Connect an SSD1306 OLED to an ESP32-C3 SuperMini on GPIO5/GPIO6, avoiding the strapping pins 8 and 9 that the core defaults to.

Arduino C++Verified — core esp32 3.3.12, Adafruit SSD1306 2.5.17, 3 Nov 2026Compile-only

Community draft — report a mistake

On the ESP32-C3 SuperMini the obvious I2C pins are the wrong ones: the core defaults to GPIO8/9, which decide how the chip boots. Any GPIO can carry I2C on the C3, so this guide uses GPIO5 and GPIO6 instead.

With that settled, the OLED works exactly as on other boards. The sketch shows the board name, uptime and chip revision.

Wiring

ESP32-C3 SuperMiniOnly the pins used are shown · 3.3 V logicSSD1306 OLED 0.96″ (128×64, I2C)GND3V35 · 56 · 6GNDVCCSCLSDA
Every connection
ESP32-C3 SuperMiniSSD1306 OLED 0.96″ (128×64, I2C)WireNotes
GNDGNDblack
3V3VCCredThe SuperMini’s small 3.3 V regulator easily covers an OLED (~20 mA).
6SCLyellow
5SDAblue

3.3–5 V (on-board regulator) part, 3.3 V board. Most modules have a regulator and run from 3.3 V or 5 V. Their I2C pull-ups go to VCC, so on ESP32 and Pico power the OLED from 3.3 V to keep SDA/SCL at a safe level.

Board quirks

  • The Arduino core’s default I2C pins on the C3 are GPIO8/GPIO9 — both strapping pins, with the BOOT button on 9 and the LED on 8. This guide moves I2C to GPIO5 (SDA) and GPIO6 (SCL).
  • GPIO5 is an ADC2 pin, which only matters for analog readings — I2C is unaffected.
  • Serial needs USB CDC On Boot enabled (already set in this sketch’s profile).

Code

ssd1306-esp32c3.inoArduino C++Open in PlaygroundOpen in PlaygroundFlash
// SSD1306 128×64 I2C OLED on an ESP32-C3 SuperMini.
// GND → GND, VCC → 3V3, SDA → GPIO5, SCL → GPIO6. Address 0x3C.
// GPIO8 and GPIO9 (the core's default I2C pins) are avoided: both are strapping pins and
// GPIO8 also drives the on-board LED.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

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

void setup() {
  Serial.begin(115200);
  delay(1500);  // let the native USB serial port enumerate
  Wire.begin(5, 6);  // SDA, SCL
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println("SSD1306 not found at 0x3C — try 0x3D, and check the GND/VCC order on your module");
    while (true) delay(1000);
  }
  display.setTextColor(SSD1306_WHITE);
  Serial.println("OLED ready");
}

void loop() {
  display.clearDisplay();
  display.setTextSize(2);
  display.setCursor(4, 0);
  display.print("C3 Mini");
  display.setTextSize(1);
  display.setCursor(4, 30);
  display.printf("Uptime: %lu s", millis() / 1000);
  display.setCursor(4, 46);
  display.printf("Chip rev: %u", ESP.getChipRevision());
  display.display();
  delay(1000);
}

Library: Adafruit SSD1306 (Adafruit (also install Adafruit GFX Library)) — compiled with Adafruit SSD1306 2.5.17.

Expected serial output

Serial Monitor · 115200Output
OLED ready

Common errors

Board won’t boot with the OLED connected

It is wired to GPIO8/9. Move SDA/SCL to GPIO5/6 as shown.

“SSD1306 not found at 0x3C”

Try 0x3D and check the GND/VCC order on your module.

↑↓ to move · Enter to open