The SSD1351 OLED 128×128 RGB Arduino module is one of the most visually striking displays you can add to a maker project. Unlike the common monochrome SSD1306 OLED, the SSD1351 drives a full 128×128 pixel colour OLED panel — producing 65,536 colours with stunning contrast and zero backlight bleed. This guide covers everything an Indian maker needs to get the SSD1351 up and running with Arduino or ESP32, from pin connections to drawing colourful graphics.
SSD1351 Module Overview
The SSD1351 is a 132×132 OLED driver IC manufactured by Solomon Systech, typically paired with a 128×128 pixel colour OLED panel. The most common breakout module uses a 1.5″ OLED panel and communicates via 4-wire SPI. Some modules also support 3-wire SPI and an 8-bit parallel interface, but SPI is the easiest to use with Arduino.
Key specifications of the typical SSD1351 module:
- Resolution: 128×128 pixels
- Colour depth: 16-bit (65,536 colours) in normal mode, 18-bit on some configurations
- Interface: 4-wire SPI (MOSI, SCK, CS, DC) + RESET
- Operating voltage: 3.3V logic (some modules have 5V-tolerant inputs)
- Power supply: 3.3V for VCC (module regulates internally from 5V on most breakouts)
- Panel size: Typically 1.27″ or 1.5″ diagonal
- Viewing angle: Near 180° — excellent from any angle
Because OLED pixels emit their own light, the SSD1351 achieves true blacks that are simply impossible with LCD technology. Colours are vivid and punchy, making this module ideal for small graphical UIs, retro game displays, and status dashboards.
SSD1351 vs SSD1306: Key Differences
| Feature | SSD1351 (Colour) | SSD1306 (Monochrome) |
|---|---|---|
| Resolution | 128×128 | 128×64 |
| Colour | 16-bit RGB (65K colours) | 1-bit (white/blue/yellow) |
| Interface | SPI (4-wire) | I2C or SPI |
| Pins needed | 5 GPIO pins | 2 GPIO pins (I2C) |
| RAM required | 32KB frame buffer (ESP32) | 1KB frame buffer |
| Price (India) | ₹600–₹1,200 | ₹100–₹200 |
| Best MCU | ESP32 / Arduino Mega / Due | Any Arduino |
The RAM requirement is the most important consideration. A 128×128 full-colour frame buffer requires 128×128×2 bytes = 32,768 bytes (32KB). An Arduino Uno has only 2KB of SRAM — completely insufficient. An Arduino Mega has 8KB — still too small for a full frame buffer. The SSD1351 works best with ESP32 (520KB SRAM), Arduino Due (96KB), or Raspberry Pi Pico (264KB).
Wiring the SSD1351 to Arduino / ESP32
Wiring to ESP32 (Recommended)
| SSD1351 Pin | ESP32 GPIO | Notes |
|---|---|---|
| VCC | 3.3V | Check module; some accept 5V |
| GND | GND | Common ground |
| CLK / SCK | GPIO 18 | SPI clock |
| MOSI / SDA | GPIO 23 | SPI data |
| CS | GPIO 5 | Chip select |
| DC / RS | GPIO 2 | Data/Command |
| RST / RESET | GPIO 4 | Hardware reset |
Note: Some SSD1351 modules also have a BS1 or BS0 pin to select the interface mode. If present, connect BS1 to GND to select SPI mode.
Wiring to Arduino Mega
On Arduino Mega, use the hardware SPI pins: MOSI = pin 51, SCK = pin 52. CS, DC, and RST can be any digital pin. Since the Mega has only 8KB of RAM, use the Adafruit SSD1351 library in its low-memory mode (avoiding the full frame buffer) — this limits drawing speed but allows basic use.
Library Setup and Configuration
The best library for the SSD1351 is the Adafruit SSD1351 library combined with Adafruit GFX. Install both from the Arduino IDE Library Manager (Search: “SSD1351” and “Adafruit GFX”).
Basic initialisation code for ESP32:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1351.h>
#include <SPI.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 128
#define CS_PIN 5
#define DC_PIN 2
#define RST_PIN 4
Adafruit_SSD1351 tft = Adafruit_SSD1351(SCREEN_WIDTH, SCREEN_HEIGHT,
&SPI, CS_PIN, DC_PIN, RST_PIN);
void setup() {
tft.begin();
tft.fillScreen(0x0000); // Black
tft.setTextColor(0xFFFF); // White text
tft.setTextSize(2);
tft.setCursor(10, 50);
tft.println("Hello Zbotic!");
}
The TFT_eSPI library also supports SSD1351 and is significantly faster due to DMA transfers. For any project where display refresh speed matters (animations, games), TFT_eSPI is the better choice. Configure the User_Setup.h file with #define SSD1351_DRIVER and the appropriate pin definitions.
Drawing Text, Shapes and Bitmaps
The Adafruit GFX library provides a consistent API across all supported displays. Key functions for the SSD1351:
Colours
Colours are 16-bit RGB565 format. Common colour constants:
#define BLACK 0x0000 #define WHITE 0xFFFF #define RED 0xF800 #define GREEN 0x07E0 #define BLUE 0x001F #define YELLOW 0xFFE0 #define ORANGE 0xFC00 #define CYAN 0x07FF #define MAGENTA 0xF81F
To convert any RGB colour to RGB565: colour = ((r & 0xF8) << 8) | ((g & 0xFC) << 3) | (b >> 3);
Shapes and Text
tft.fillRect(x, y, w, h, colour); // Filled rectangle tft.drawCircle(x, y, radius, colour); // Circle outline tft.fillCircle(x, y, radius, colour); // Filled circle tft.drawLine(x0, y0, x1, y1, colour); // Line tft.drawBitmap(x, y, bitmap, w, h, fg, bg); // 1-bit bitmap tft.setFont(&FreeSans9pt7b); // Custom GFX font
Displaying a Bitmap Image
For full-colour bitmaps, convert your PNG to a C array using the online tool at lvgl.io/tools/imageconverter (select CF_RGB565 format). The resulting array can be stored in PROGMEM (Flash) and drawn with a custom pixel-push loop:
for (int y = 0; y < IMG_H; y++) {
for (int x = 0; x < IMG_W; x++) {
uint16_t colour = pgm_read_word(&myImage[y * IMG_W + x]);
tft.drawPixel(x + offsetX, y + offsetY, colour);
}
}
DHT20 SIP Packaged Temperature and Humidity Sensor
Display colourful temperature and humidity readings on your SSD1351 OLED. DHT20’s I2C interface leaves all your SPI pins free for the display.
Project Ideas for Indian Makers
The SSD1351’s colour OLED display opens up a wide range of creative projects. Here are some ideas particularly relevant to Indian makers:
1. Mini Colour Weather Station
Use an ESP32 + SSD1351 + BME280 sensor to build a desk weather station. Display temperature in colour-coded text (blue for cold, red for hot), humidity as a progress bar, and a weather icon fetched from OpenWeatherMap API. Indian summers make this both practical and visually interesting.
2. Cryptocurrency Price Ticker
Fetch BTC, ETH, or INR prices from a free API (CoinGecko has a no-key-required endpoint). Display price changes in green (up) or red (down) with sparkline charts. The 128×128 colour OLED gives this ticker a premium feel.
3. Retro Pixel Art Game
The 128×128 resolution is almost identical to the original Game Boy Color screen. Implement a simple game like Snake, Breakout, or Flappy Bird. The ESP32 is fast enough for smooth gameplay at 30 FPS on the SSD1351 via TFT_eSPI.
4. Smart Home Status Panel
Connect to Home Assistant or MQTT and display room temperatures, power consumption, or security camera status with colour-coded indicators. Mount it on your wall in a 3D-printed frame for a professional look.
5. Digital Compass and Altimeter
Combine with an MPU6050 IMU and BMP280 barometric sensor to build a trekker’s instrument for Himalayan or Western Ghats hikes. Display compass bearing, altitude, and temperature on the crisp colour OLED.
GY-BME280-3.3 Precision Altimeter Atmospheric Pressure Sensor Module
Three sensors in one: temperature, humidity, and barometric pressure. A perfect companion for the SSD1351 OLED in a colourful weather or trekking instrument build.
BMP280 Barometric Pressure and Altitude Sensor I2C/SPI Module
Measure altitude and pressure to display on your SSD1351. Great for a trekking altimeter project or a desktop weather station with pressure trend graphs.
Tips and Troubleshooting
- Display stays black: Check that VCC is correctly connected. Many SSD1351 modules require a specific sequence: power up, then RESET high, then send init commands. The Adafruit library handles this automatically in
begin(). - Colours look wrong: The SSD1351 can operate in RGB or BGR colour order depending on the panel. If your red appears blue, add
tft.setColorOrder(INIT_SWAP_COLOR_ORDER);afterbegin(). - Slow refresh rate: Increase SPI clock speed. The SSD1351 supports up to 20 MHz. With TFT_eSPI, set
#define SPI_FREQUENCY 20000000in User_Setup.h. - Garbled display: Usually a wiring issue — double-check CS, DC, and RST pins. Also confirm the SPI mode is SPI_MODE0 or SPI_MODE3 (Adafruit defaults are correct).
- Screen burn-in prevention: Implement a screensaver that shifts the display content by 1–2 pixels every minute, or dims/blanks the screen after inactivity.
Frequently Asked Questions
Is the SSD1351 compatible with 5V Arduino boards?
The SSD1351 IC operates at 3.3V logic. Most breakout modules include level shifters or 3.3V regulators, making them safe to power from 5V Arduino boards. However, always verify your specific module’s datasheet. If unsure, use a 3.3V logic-level converter on the SPI lines.
Can I run the SSD1351 on Arduino Uno?
Technically possible, but practically very limited. The Uno’s 2KB SRAM cannot hold a full frame buffer. You can draw pixels and shapes one at a time, but forget smooth animations. Use Arduino Mega or, ideally, an ESP32 for proper SSD1351 projects.
How does SSD1351 compare to a 1.8″ ST7735 TFT LCD?
The SSD1351 OLED wins on contrast, colour accuracy, and viewing angle. The ST7735 LCD is cheaper, doesn’t suffer from burn-in, and has a slightly larger screen. For most maker projects, the OLED’s visuals justify the extra cost if you can handle the RAM requirement.
Where can I buy the SSD1351 module in India?
The SSD1351 is available on major Indian electronics stores. Zbotic.in stocks a range of display modules including colour OLEDs and TFT LCDs. Check the Display Modules category for the latest stock.
How long do OLED panels last?
OLED panels typically have a rated lifespan of 10,000–100,000 hours to half-brightness, depending on operating conditions. At normal brightness for a desk gadget that’s on for 8 hours a day, that equates to 3–35 years. Burn-in from static content is a more immediate concern than total lifespan for most maker projects.
Add comment