SSD1306 OLED 0.96″ (128×64, I2C)
Wire the 128×64 SSD1306 OLED over I2C: pin order (check VCC/GND — clones differ), 0x3C vs 0x3D, 3.3 V vs 5 V, and the Adafruit SSD1306 library.
Community draft — report a mistake
3.3 V or 5 V? 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.
These tiny OLEDs draw every pixel themselves — no backlight — so they’re sharp, readable at an angle and need very little power. The common blue or white 0.96″ module is 128×64 pixels and talks I2C.
Address: most answer at 0x3C; a resistor on the back moves it to 0x3D so you can run two. The label “0x78” printed on some boards is the same address written as 8-bit (0x3C × 2).
Draw into the library’s buffer, then call display.display() to send it — that’s the step beginners usually miss.
Pinout
| Pin | What it does |
|---|---|
GND | Ground. Check the silk-screen — some clones put VCC first, and swapping them can kill the display. |
VCC | 3.3–5 V supply (about 20 mA with half the pixels lit) |
SCL | I2C clock |
SDA | I2C data |
I2C address:0x3C0x3D
Library
Adafruit SSD1306 by Adafruit (also install Adafruit GFX Library)
Arduino IDE → Library Manager → search the name above. Each guide lists the exact version we compile against.
Use it with
- SSD1306 OLED 0.96″ (128×64, I2C) with Arduino Leonardo Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with Arduino Mega 2560 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with Arduino Nano Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with Arduino Nano ESP32 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with Arduino Pro Mini (5 V) Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with Arduino Uno R3 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with ESP32-C3 SuperMini Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with ESP32-C6-DevKitC-1 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with ESP32 DevKit V1 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with ESP32 DevKitC (38-pin) Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with ESP32-S3-DevKitC-1 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with LOLIN S2 Mini Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with NodeMCU ESP8266 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with Raspberry Pi Pico W MicroPython
- SSD1306 OLED 0.96″ (128×64, I2C) with Wemos D1 mini Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with XIAO ESP32C3 Arduino C++
- SSD1306 OLED 0.96″ (128×64, I2C) with XIAO ESP32S3 Arduino C++
Common errors
“SSD1306 allocation failed”
The 128×64 buffer needs about 1 KB of RAM. On an Uno, other libraries plus the buffer can run out — trim strings with F("...") or use the 128×32 size.
Blank screen, scanner finds 0x3C
Pass the address to display.begin(SSD1306_SWITCHCAPVCC, 0x3C) and call display.display() after drawing — nothing shows until you do.
Display shows noise or is shifted by 2 pixels
That module uses an SH1106 controller, not an SSD1306. Use a library for SH1106 instead.