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 SuperMini | SSD1306 OLED 0.96″ (128×64, I2C) | Wire | Notes |
|---|---|---|---|
| GND | GND | black | |
| 3V3 | VCC | red | The SuperMini’s small 3.3 V regulator easily covers an OLED (~20 mA). |
| 6 | SCL | yellow | |
| 5 | SDA | blue |
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 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);
}// 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
OLED readyOLED 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.