Arduino OLED Resources
This page collects the most useful resources for working with Arduino OLED displays including the popular SSD1306 and SH1106 controllers. Whether you're a beginner wiring your first display or an experienced maker building advanced animations, you'll find helpful links, documentation, and guides here.
Arduino OLED Libraries
The right library makes all the difference when working with OLED displays. Here are the most popular and well-maintained options:
Adafruit SSD1306
The Adafruit SSD1306 library is beginner-friendly and feature-rich, offering support for I²C and SPI communication, multiple display sizes (128×64, 128×32, 96×16, 72×40), and extensive graphics primitives through Adafruit GFX.
- GitHub: Adafruit_SSD1306
- Installation: Arduino Library Manager → search "Adafruit SSD1306"
- Documentation: Adafruit OLED Guide
- Features: drawPixel, drawLine, drawRect, drawCircle, drawBitmap, text rendering
- Compatible boards: Arduino Uno, Nano, Mega, ESP32, ESP8266, Raspberry Pi Pico (with Arduino core)
U8g2
U8g2 is a monochrome graphics library that supports over 200 display types, including SSD1306, SH1106, and many others. It's highly optimized for memory-constrained boards and offers extensive font support.
- GitHub: U8g2
- Installation: Arduino Library Manager → search "U8g2"
- Documentation: U8g2 Wiki
- Features: 100+ fonts, Unicode support, full buffer and page buffer modes, low memory footprint
- Display support: SSD1306, SH1106, SSD1309, SH1107, and 200+ more
MicroPython framebuf
For MicroPython users (Raspberry Pi Pico, ESP32, ESP8266), the built-in framebuf module combined
with SSD1306 or SH1106 drivers provides pixel-level control and basic drawing functions.
- Documentation: MicroPython framebuf
- SSD1306 driver: MicroPython SSD1306
- Features: pixel, line, rect, fill, text, and blit (bitmap) methods
Recommended OLED Hardware
Most Arduino OLED projects use small monochrome displays in the 0.96" to 1.3" range. Here's what to look for:
Display Types
- 0.96" 128×64 SSD1306 (I²C): Most popular beginner display, widely available, blue or white pixels, typically 0x3C address
- 1.3" 128×64 SH1106 (I²C): Slightly larger pixels, requires 2-pixel X offset in code
- 0.91" 128×32 SSD1306 (I²C): Compact option for status displays
- Yellow-Blue 128×64 SSD1306: Top 16 rows yellow, bottom 48 blue — ideal for headers and content
I²C vs SPI
Most hobbyist displays use I²C (2 data pins: SDA and SCL) because it's simple to wire and allows multiple devices on the same bus. SPI displays are faster and better for high frame rate animations but require more pins (MOSI, SCK, CS, DC, RST).
| Protocol | Wiring | Speed | Best For |
|---|---|---|---|
| I²C | 4 pins (VCC, GND, SDA, SCL) | Standard (100-400 kHz) | Beginners, multi-device projects |
| SPI | 7 pins (VCC, GND, MOSI, SCK, CS, DC, RST) | Fast (up to 10 MHz+) | High frame rate animations |
Where to Buy
Common sources for Arduino OLED displays:
- Adafruit: High-quality modules with excellent documentation
- SparkFun: Reliable boards with hookup guides
- AliExpress / Banggood: Budget-friendly options (check reviews for quality)
- Amazon: Fast shipping, variety of sellers
- Local electronics stores: Support local makers
Wiring Guides
Proper wiring is critical for OLED displays. Here are standard I²C wiring configurations for popular boards:
Arduino Uno / Nano
- VCC → 5V (some displays need 3.3V — check datasheet)
- GND → GND
- SDA → A4
- SCL → A5
ESP8266 (NodeMCU, Wemos D1 Mini)
- VCC → 3.3V
- GND → GND
- SDA → D2 (GPIO4)
- SCL → D1 (GPIO5)
ESP32 DevKit
- VCC → 3.3V
- GND → GND
- SDA → GPIO21
- SCL → GPIO22
Raspberry Pi Pico (MicroPython)
- VCC → 3.3V (pin 36)
- GND → GND (pin 38)
- SDA → GP0 (I2C0 SDA)
- SCL → GP1 (I2C0 SCL)
For complete wiring diagrams with photos, see our Arduino OLED tutorial.
Troubleshooting Common Issues
Display shows nothing / blank screen
- Check power: Ensure VCC is connected to the correct voltage (3.3V or 5V)
- Verify I²C address: Most displays use 0x3C, some use 0x3D. Run an I²C scanner sketch to detect the address
- Check wiring: SDA and SCL must be connected to the correct pins
- Add display.display(): Adafruit library requires calling
display.display()to update the screen
Animation is slow or choppy
- Reduce frame count: Large animations take time to upload to the display
- Increase I²C speed: Add
Wire.setClock(400000);for fast mode (400 kHz) - Use partial updates: Instead of
display.clearDisplay()every frame, only redraw changed areas - Switch to SPI: SPI displays are 10× faster than I²C for animation-heavy projects
SH1106 displays show shifted graphics
SH1106 controllers have a 2-pixel column offset. Our OLED Animation Maker automatically adds this offset when you select
SH1106 as the display type. If using other tools, add 2 to all X coordinates in drawBitmap calls.
Multiple OLED displays don't work
- Change I²C address: Solder the address jumper on the back of the display to switch from 0x3C to 0x3D
- Use an I²C multiplexer: The TCA9548A allows up to 8 I²C devices with the same address
- Use our dual screen mode: Our tool generates code for two SSD1306 displays with different addresses
Learning Resources and Tutorials
Master Arduino OLED displays with these step-by-step guides:
Our Tutorials
- Complete Arduino OLED wiring guide (SSD1306) — beginner-friendly introduction
- How to create SSD1306 animations — frame-by-frame animation tutorial
- Convert GIF to Arduino OLED animation — import existing animations
- Image to byte array converter — bitmap generation guide
- Wireless WiFi OLED preview — preview animations on ESP8266/ESP32 without USB
- WebSerial live OLED preview — real-time USB preview in browser
- ESP32 OLED animation guide — wiring, code, and WiFi preview for ESP32
- SH1106 vs SSD1306 — choosing the right OLED controller
- Draw OLED shapes in Arduino — using GFX primitives instead of bitmaps
Official Library Documentation
- Adafruit Monochrome OLED Guide
- Adafruit GFX Library — graphics primitives used by Adafruit SSD1306
- U8g2 Reference Manual
Community Resources
- Arduino Forum: Arduino Community — ask questions and share projects
- Reddit: r/arduino — active maker community
- Adafruit Learning System: Adafruit Learn — hundreds of free tutorials
Tools and Utilities
These free online tools help you work with Arduino OLED displays:
- OLED Display Animation Maker (our tool) — create animations, import GIFs, generate Arduino code
- I²C Scanner: Arduino sketch to detect I²C device addresses — Arduino Playground
- Font converter: Generate custom fonts for Adafruit GFX — truetype2gfx
Project Ideas
Inspiration for your next Arduino OLED project:
- Weather station: Display temperature, humidity, and forecast icons from an API
- Smart clock: Show time, date, and animated transitions
- IoT dashboard: Real-time sensor data visualization
- Game console: Retro pixel games (Pong, Snake, Tetris) on SSD1306
- Music visualizer: Animated spectrum analyzer synced to audio
- Robot face: Animated eyes and expressions for robotics projects
- Status indicator: System health, network status, or build server dashboard
- Smart home controller: Control lights, view camera feeds, or display notifications
Start creating OLED animations
Use our free online tool to design animations, import GIFs, and export Arduino code in minutes.
Open OLED Animation Maker →Stay Updated
Follow our OLED Arduino blog for new tutorials, tips, and project showcases. Connect with us on Instagram @oled_animator or reach out via the contact page.