Product Overview
The 2.42-inch Passive Matrix OLED Display Module is a large-format, high-contrast monochrome graphic display designed for embedded systems, industrial control panels, medical devices, and IoT applications . Powered by the SSD1309 driver IC and featuring a crisp 128×64 pixel resolution, this display delivers bright yellow text, detailed graphics, and custom icons on a true black background — all in a spacious 2.42-inch diagonal format (approximately 61.5mm diagonal) .
Why the SSD1309 Controller?
Unlike the common SSD1306 controller used on smaller 0.96″ and 1.3″ OLEDs, the SSD1309 is specifically designed for larger OLED panels. Key advantages include:
-
Higher row drive current: Provides brighter and more uniform illumination across the larger screen area
-
External boost regulator: Uses an external switching boost converter to generate the higher voltage (approx. 13V) needed for larger OLED panels
-
10,000:1 contrast ratio: Exceptional clarity with true blacks
The 5-pin I2C interface (GND, VCC, SCL, SDA, RES) requires only two data lines to connect to your microcontroller, preserving valuable I/O pins for other peripherals. A dedicated RES (reset) pin allows hardware initialization of the display for reliable startup and recovery .
This module is compatible with ESP32, ESP8266, STM32, Raspberry Pi, and other 3.3V/5V logic systems. The I2C lines are 5V tolerant, making it safe for direct connection to 5V Arduino boards.
Key Features
-
Large 2.42-Inch Active Area: 55.01 × 27.49mm display area — approximately 6 times larger than 0.96″ OLEDs, providing significantly more screen real estate for dashboards, data visualization, and UI elements
-
Yellow Monochrome OLED: Bright yellow pixels on true black background provide exceptional contrast (10,000:1) and a warm, distinctive appearance
-
SSD1309 Driver IC: Advanced controller specifically designed for larger OLED panels, featuring higher row drive current for superior brightness uniformity, 128 × 64-bit SRAM buffer, and 256-step contrast control
-
5-Pin I2C Interface: Pins GND, VCC, SCL, SDA, RES — requires only 2 data lines (SDA/SCL) with default address 0x3C, saving GPIO pins
-
Dedicated RESET Pin: Allows external hardware reset control for reliable display initialization and recovery
-
Wide Operating Temperature: Rated for -40°C to +80°C, suitable for industrial and outdoor applications
-
Ultra-Thin & Lightweight: COG (Chip-on-Glass) construction with 2.15mm thickness, ideal for portable devices
-
Full Viewing Angle: >160° visibility ensures clear readouts from any angle without contrast shift
Technical Specifications
Pinout & Connection Guide
The module features a 5-pin I2C interface. Pin order may vary between manufacturers — always verify the silkscreen on your specific module .
Pin Definitions (5-Pin)
⚠️ Power Supply Warning
The VCC pin requires 3.3V only. Do not apply 5V to VCC — this can damage the module. The I2C lines (SDA/SCL) are 5V tolerant and can be connected directly to 5V microcontrollers, but the power supply must be 3.3V .
RESET Pin Configuration
The RES pin is critical for reliable operation. The module requires a proper reset signal to initialize correctly :
-
Option 1 (Recommended): Connect RES to a microcontroller GPIO pin and drive it HIGH in your setup code
-
Option 2: Pull RES HIGH to VCC through a 10kΩ resistor
-
Option 3: Connect directly to VCC (less reliable for some modules)
Wiring to ESP32
OLED Module → ESP32
─────────────────────────────────────
VCC (3.3V) → 3.3V
GND → GND
SCL → GPIO22 (SCL)
SDA → GPIO21 (SDA)
RES → GPIO4 (with 10kΩ pull-up to 3.3V, optional)
Wiring to Arduino Uno (5V)
⚠️ VCC must be 3.3V — do not use 5V; I2C lines are safe for direct connection .
OLED Module → Arduino Uno
─────────────────────────────────────
VCC (3.3V) → 3.3V pin
GND → GND
SCL → A5 (SCL)
SDA → A4 (SDA)
RES → D9 (with 10kΩ pull-up to 3.3V)
Wiring to Raspberry Pi
OLED Module → Raspberry Pi
─────────────────────────────────────
VCC (3.3V) → Pin 1 (3.3V)
GND → Pin 6 (GND)
SCL → Pin 5 (GPIO 3 / SCL)
SDA → Pin 3 (GPIO 2 / SDA)
RES → GPIO 17 (with 10kΩ pull-up to 3.3V)
Usage Guide
I2C Address Configuration
The SSD1309 I2C address is determined by the DC pin state :
For fixed 5-pin configurations, the address is typically preset to 0x3C.
I2C Address Verification
Run this I2C scanner to verify your display’s address before using it:
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("I2C Scanner");
}
void loop() {
byte error, address;
int nDevices = 0;
for(address = 1; address < 127; address++) {
Wire.beginTransmission(address);
error = Wire.endTransmission();
if(error == 0) {
Serial.print("I2C device found at address 0x");
if(address < 16) Serial.print("0");
Serial.println(address, HEX);
nDevices++;
}
}
if(nDevices == 0) Serial.println("No I2C devices found");
delay(5000);
}
Software Setup (Arduino IDE)
Step 1: Install the U8g2 Library
The U8g2 library by Oliver Kraus is the most reliable for SSD1309 displays, offering excellent support, many font options, and proper handling of the display’s reset requirements .
-
Open Arduino IDE → Sketch → Include Library → Manage Libraries
-
Search for “U8g2” by Oliver Kraus
-
Click Install
Step 2: Basic Test Sketch
This example uses the correct constructor for the 2.42″ SSD1309 display and includes proper RESET pin handling .
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SSD1309_128X64_NONAME0_F_HW_I2C u8g2(U8G2_R0, 4);
void setup() {
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.setFont(u8g2_font_ncenB08_tr);
}
void loop() {
u8g2.firstPage();
do {
u8g2.drawStr(0, 15, "2.42 OLED");
u8g2.drawStr(0, 35, "128x64");
u8g2.drawStr(0, 55, "SSD1309 - I2C");
u8g2.drawStr(0, 75, "Yellow Display");
} while ( u8g2.nextPage() );
delay(1000);
}
Step 3: Setting I2C Address (If Needed)
If your display responds to address 0x3D instead of 0x3C, adjust the address in code:
u8g2.setI2CAddress(0x7A);
Raspberry Pi Setup (Python)
-
Enable I2C: sudo raspi-config → Interface Options → I2C → Yes → Reboot
-
Install required libraries:
sudo apt-get install python3-pip
pip3 install luma.oled
-
Python example code :
from luma.core.interface.serial import i2c
from luma.oled.device import ssd1309
from luma.core.render import canvas
serial = i2c(port=1, address=0x3C, gpio_DC=18, gpio_RST=17)
device = ssd1309(serial, width=128, height=64)
with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline="white", fill="black")
draw.text((10, 25), "2.42 OLED", fill="white")
draw.text((10, 45), "128x64 Ready!", fill="white")
Q: What is the difference between SSD1309 and SSD1306?
The SSD1309 is designed specifically for larger OLED panels (2.42″ and up). Key differences include higher row drive current for brighter, more uniform illumination; external boost regulator instead of internal charge pump; and command compatibility with SSD1306, making library migration straightforward .
Q: Why does my display stay blank after power-up?
The display requires a proper reset signal to initialize. Connect the RES pin to a microcontroller GPIO and pull it HIGH, or pull it HIGH to VCC through a 10kΩ resistor . Some modules require the RES pin to be toggled (HIGH → LOW → HIGH) during startup for reliable initialization.
Q: Can I use this display with a 5V Arduino Uno?
Yes, but with important caveats. The I2C lines (SDA/SCL) are 5V tolerant and can be connected directly to 5V pins. However, the VCC pin must be powered with 3.3V — do not apply 5V to VCC . The Arduino Uno’s onboard 3.3V regulator may not supply enough current; use an external 3.3V regulator for reliable operation.
Q: What is the default I2C address?
The default I2C address is 0x3C (7-bit), corresponding to 0x78 (8-bit write address). Some modules can be configured to 0x3D (0x7A) via the DC pin state . Run an I2C scanner to verify your specific module’s address.
Q: How do I use the RES (reset) pin?
The RES pin is active low — pulling it LOW resets the display. For normal operation, it should be pulled HIGH. The simplest approach is to pull it HIGH to VCC through a 10kΩ resistor. For software-controlled reset, connect it to a GPIO and pulse it LOW → HIGH during setup .
Q: What is the power consumption of this display?
Typical current draw is around 20mA depending on the number of pixels lit . The 2.42″ display has approximately 6 times the active area of 0.96″ displays, requiring more power when fully lit. Use sleep mode and design dark UIs to minimize power consumption.
Q: Can I use this display with MicroPython?
Yes. The SSD1309 is supported in MicroPython. For ESP32, use the ssd1306 module (which works with SSD1309) with I2C interface and appropriate address.
Q: Why does my I2C communication fail at higher speeds?
The larger display panel and PCB layout may add capacitance to the I2C bus. Try reducing the I2C clock speed to 100kHz or 400kHz for more reliable communication.
Q: What is the lifespan of this OLED display?
OLEDs typically have a rated lifespan of approximately 50,000 hours of continuous operation (about 5.7 years). Avoid displaying static images for extremely long periods to prevent uneven pixel wear (“burn-in”) .
Q: What libraries are recommended for this display?
The U8g2 library by Oliver Kraus is the most reliable for SSD1309 displays, offering extensive font support and proper handling of the SSD1309 controller . The Adafruit SSD1306 library is command-compatible and also works with this display .