Displays & LEDs¶
Side-by-side comparison¶
| Module | Type | Resolution / count | Bus | Voltage | Current | Library |
|---|---|---|---|---|---|---|
| SSD1306 OLED 0.96" | Mono OLED graphic | 128×64 (or 128×32) | I²C / SPI | 3.3 V (5 V tolerant on module) | ~20 mA active | Adafruit_SSD1306 + Adafruit_GFX |
| 16×2 LCD HD44780 | Character LCD | 16 cols × 2 rows | 4-bit parallel or I²C backpack | 5 V | ~25 mA (backlight on) | LiquidCrystal or LiquidCrystal_I2C |
| WS2812B / NeoPixel | Addressable RGB LED | 1 to 1000+ daisy-chained | strict 800 kHz 1-wire | 5 V | up to 60 mA per LED @ full white | FastLED or Adafruit_NeoPixel |
Common questions¶
OLED vs LCD — which to pick?¶
OLED (SSD1306) for compact graphics, fonts, animations. No backlight (true black). Higher cost. LCD (1602) for plain text readouts. Backlight always on. Cheap, durable, easy to drive. Pick OLED for project dashboards, LCD for control panels.
How do I drive 100+ NeoPixels without crashing my MCU?¶
- Power separately — 100 LEDs at full white = 6 A. Use a 5 V/10 A PSU.
- Add a 1000 µF cap across V+/GND at the strip input.
- 470 Ω resistor in series with DATA.
- Inject 5 V every 1–2 m to avoid voltage drop.
- Use
FastLEDinstead ofAdafruit_NeoPixel— more memory-efficient.
Why won't my OLED show anything?¶
Most common causes: (1) wrong I²C address — try 0x3D if 0x3C fails; (2) wrong resolution — 0.96" comes in 128×64 AND 128×32 variants; (3) forgot oled.display() after drawing. The library needs an explicit flush.
16×2 LCD I²C vs parallel — which to use?¶
Always the I²C backpack version for new projects — 2 wires (SDA/SCL) vs 6 wires (RS/E/D4–D7) and a contrast pot. Same library swap (LiquidCrystal → LiquidCrystal_I2C).
WS2812B vs WS2812 vs WS2813 vs SK6812?¶
WS2812B = current standard (improved heat dissipation over WS2812). WS2813 adds redundant data line (continues if one LED fails). SK6812 = clone, often has RGBW variant. All use the same protocol; FastLED handles them with the same code.
Last updated: 2026-05-13 · Source on GitHub