Product Overview
The 1.3-inch White I2C OLED Display Module is a compact, high-contrast monochrome screen designed for embedded applications requiring crisp visual output without complex wiring. Powered by the SH1106 driver IC and featuring a sharp 128×64 pixel resolution, this display delivers clean white text, detailed graphics, and custom icons on a true black background .
Unlike traditional LCDs that require a power-hungry backlight, OLED (Organic Light Emitting Diode) technology allows each pixel to emit its own light. Inactive pixels are completely off, resulting in true blacks, exceptional contrast (2000:1 typical), and >160° viewing angles – ensuring the display remains readable from virtually any angle .
This module uses the ultra-simple 4-pin I2C interface (VCC, GND, SCL, SDA), requiring only two data lines to connect to your microcontroller. This preserves valuable I/O pins for other sensors and peripherals. With support for both 3.3V and 5V logic, it is directly compatible with Arduino, ESP32, ESP8266, Raspberry Pi, STM32, and most other development boards – no level shifters required .
Key Features
-
Larger 1.3-Inch Active Area: 29.42mm × 14.7mm display area offers better readability than 0.96″ screens while maintaining 128×64 resolution
-
128×64 Pixel Resolution: High-definition display capable of showing detailed graphics, bitmaps, custom icons, and up to 8 lines of text
-
White Monochrome OLED: Clean white pixels on true black background provide excellent contrast and professional appearance
-
SH1106 Driver IC: Industry-standard controller with built-in 132×64-bit SRAM buffer, designed specifically for 128×64 displays
-
I2C Interface: 4-pin connection (VCC, GND, SCL, SDA) requires only 2 data lines – saves valuable I/O pins
-
Wide Voltage Compatibility: Operates on 3.3V–5V DC, compatible with both 5V (Arduino) and 3.3V (ESP32/ESP8266) logic
-
Ultra-Low Power Consumption: OLED self-emissive technology means no backlight – lower battery drain for portable projects
-
Wide Viewing Angle: >160° visibility ensures clear readouts from almost any angle without contrast shift
Technical Specifications
SH1106 vs SSD1306: Important Note
Unlike 0.96″ displays that typically use the SSD1306 driver, this 1.3″ OLED uses the SH1106 driver. The SH1106 has internal RAM of 132×64 pixels (the display area is 128×64) – the extra 4 columns are not visible .
Key implications:
-
Use libraries that explicitly support SH1106, such as U8g2 (recommended), Adafruit SH1106, or MycilaEasyDisplay
-
While some SSD1306 libraries may work, they may not handle the offset correctly, potentially causing display artifacts
-
The U8g2 library is widely tested and provides excellent SH1106 support with many font options
Pinout & Connection Guide
The 4-pin I2C interface is extremely simple, making it perfect for beginners and rapid prototyping .
I2C Pin Mapping for Common Development Boards
Wiring Diagram (Arduino Uno)
OLED Module → Arduino Uno
─────────────────────────────────────
VCC → 5V
GND → GND
SCL → A5 (SCL)
SDA → A4 (SDA)
Tip: The module has onboard pull-up resistors on SDA and SCL lines, so no external resistors are needed .
Usage Guide (Arduino IDE)
Step 1: Install Required Libraries
The U8g2 library is the most reliable choice for SH1106 displays, offering excellent support and many font options.
U8g2 Library Installation:
-
Open Arduino IDE → Sketch → Include Library → Manage Libraries
-
Search for “U8g2” by Oliver Kraus
-
Click Install (U8g2 library is widely tested and recommended for SH1106 displays) .
Alternative Libraries (for SH1106 support):
-
MycilaEasyDisplay – Easy to use, supports carousels and virtual displays
-
Adafruit SH1106 – With Adafruit GFX library support
Step 2: I2C Address Verification
Most 1.3″ I2C OLED modules use address 0x3C . You can verify by running this scanner :
#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);
}
Step 3: Basic Test Sketch (U8g2 Library – Recommended)
The U8g2 library is the most reliable choice for SH1106 displays and offers excellent font support .
#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
void setup() {
u8g2.begin();
u8g2.enableUTF8Print();
}
void loop() {
u8g2.firstPage();
do {
u8g2.setFont(u8g2_font_ncenB08_tr);
u8g2.drawStr(0, 15, "1.3 OLED");
u8g2.drawStr(0, 35, "128x64");
u8g2.drawStr(0, 55, "SH1106");
} while ( u8g2.nextPage() );
delay(1000);
}
Alternative: Adafruit SH1106 Library
If you prefer the Adafruit library style:
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SH1106 display(OLED_RESET);
void setup() {
Serial.begin(9600);
if(!display.begin(SH1106_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SH1106 allocation failed"));
for(;;);
}
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(10, 25);
display.println("1.3 OLED");
display.println("Ready!");
display.display();
}
void loop() {
}
Understanding the Display Buffer Workflow
Most OLED libraries use a buffer-based drawing system :
-
Drawing functions write to an in-memory buffer, not directly to the screen
-
The screen does NOT update immediately
-
You must call display.display() (Adafruit) or use the nextPage() loop (U8g2) to transfer buffer contents to the OLED panel
U8g2 workflow :
u8g2.firstPage();
do {
u8g2.drawStr(0, 20, "Hello");
} while ( u8g2.nextPage() );
Adafruit workflow:
display.clearDisplay();
display.display();
Basic Graphics Functions (Adafruit Library)
display.clearDisplay();
display.drawPixel(10, 10, WHITE);
display.drawLine(0, 0, 127, 63, WHITE);
display.drawRect(10, 10, 50, 30, WHITE);
display.fillRect(70, 10, 40, 30, WHITE);
display.drawCircle(64, 32, 20, WHITE);
display.fillCircle(64, 32, 15, WHITE);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 55);
display.print("Graphics Demo");
display.display();
Power Management for Battery-Powered Projects
OLED displays are excellent for low-power applications because only lit pixels consume power .
Power-Saving Tips:
-
Update the display only when values change rather than continuously refreshing
-
Use display.ssd1306_command(0xAE) to turn the display OFF when not actively needed (Adafruit library)
-
Use the U8g2 library’s power management functions
-
Avoid displaying large white areas continuously to maximize battery life
Q: What is the difference between this 1.3" white OLED and the 0.96" version?
The 1.3″ version has a larger active area (29.42mm × 14.7mm vs 21.74mm × 10.86mm) while maintaining the same 128×64 resolution, resulting in larger, more readable pixels . Additionally, the 1.3″ typically uses the SH1106 driver, while 0.96″ often uses SSD1306.
Q: Can I use an SSD1306 library with this SH1106 display?
Some SSD1306 libraries may work, but they may not handle the SH1106’s offset correctly (SH1106 has 132×64 internal RAM with 2-pixel offset). For guaranteed compatibility, use libraries that explicitly support SH1106, such as U8g2 (recommended), Adafruit SH1106, or MycilaEasyDisplay .
Q: What is the default I2C address for this display?
The default I2C address is 0x3C (7-bit address). When configured for I2C mode, the DC pin (when present) determines the address – connected to GND gives 0x3C; to VCC gives 0x3D .
Q: How does OLED technology compare to LCD?
OLEDs are self-emissive (no backlight needed), providing true blacks, higher contrast ratio (2000:1), wider viewing angles (>160°), and lower power consumption (when displaying dark content). Traditional LCDs require a backlight that constantly draws power and cannot achieve true black .
Q: What is the lifespan of the OLED display?
Rated lifespan is approximately 20,000-30,000 hours of continuous operation (about 2.5-3.5 years). Some manufacturers claim up to 50,000 hours . Avoid displaying static images for extremely long periods to prevent uneven pixel wear (“burn-in”).
Q: Why does my display stay blank after power-up?
Check these common issues:
-
Wiring – verify VCC→5V (or 3.3V), GND→GND, SCL→A5, SDA→A4
-
Confirm I2C address using scanner sketch (should be 0x3C)
-
Use the correct SH1106 library (not SSD1306 library)
-
Ensure display initialization is called before drawing
-
Call display.display() (Adafruit) or use the nextPage() loop (U8g2) after drawing operations
Q: Can I use both 3.3V and 5V logic?
Yes, the module is designed with a wide voltage range of 3.3V–5V. It works with both 5V (Arduino) and 3.3V (ESP32/ESP8266) microcontrollers . The onboard regulator accepts both voltages.
Q: Can I use this display with ESP32 or ESP8266?
Yes. Use 3.3V power. Connect SDA to GPIO21 (ESP32) or GPIO4 (ESP8266), and SCL to GPIO22 (ESP32) or GPIO5 (ESP8266). The same libraries work on these platforms .
Q: Does this module have pull-up resistors for I2C?
Most SH1106 modules include onboard pull-up resistors on the I2C lines. If your specific module doesn’t have them, you may need to add external 4.7kΩ-10kΩ pull-up resistors on SDA and SCL lines to VCC .
Q: Can I use this display with Raspberry Pi?
Yes. Enable I2C via raspi-config, then connect VCC to 3.3V (Pin 1), GND to GND, SCL to GPIO3 (Pin 5), and SDA to GPIO2 (Pin 3). Use Python libraries like luma.oled or Adafruit_CircuitPython_SSD1306 (with SH1106 support).
Q: How much current does the OLED display draw?
Power consumption depends on how many pixels are lit :
-
All pixels off (black screen): <5µA (sleep mode)
-
Typical text/dashboard (~25% pixels lit): ~10-15mA
-
Full screen white (worst case): ~20-30mA
Q: Can I adjust the display brightness?
Yes. The SH1106 supports contrast adjustment through library commands. In Adafruit library, use display.setContrast(value) where value ranges from 0 to 255.
Q: What is the difference between U8g2 and Adafruit libraries?
U8g2 offers many built-in fonts, supports both SPI and I2C, and is widely tested with SH1106. U8g2 uses a “firstPage/nextPage” loop structure for drawing . Adafruit libraries are simpler for basic graphics but have fewer font options. Both are available through the Arduino Library Manager.
Q: Why does the U8g2 sketch use firstPage()/nextPage()?
U8g2 uses a page-buffered approach to manage memory – the firstPage() call starts a drawing session, and nextPage() transfers a “page” of the display buffer to the OLED . This allows the same code to work on both full-buffer and low-memory devices.
Q: Can I display custom bitmap images on this display?
Yes. Use tools like LCD Image Converter, Image2CPP, or online converters to transform 128×64 monochrome bitmap images into C arrays. In Adafruit library, use display.drawBitmap(x, y, array, width, height, color) to display images.
Q: What can I build with this 1.3" OLED display?
Popular applications include :
-
IoT sensor stations: Display temperature, humidity, and pressure readings
-
Smart home control panels: System status and device controls
-
Data loggers: Real-time sensor data visualization
-
Diagnostic tools: Battery testers and instrument displays
-
Menu interfaces: Handheld device navigation
-
Wearable devices: Compact displays for wearables
-
Industrial equipment: Embedded system status screens
Q: What libraries are recommended for beginners?
For SH1106 displays, U8g2 is the most reliable option with excellent SH1106 support . It has many examples and is well-documented. If you prefer simpler syntax, Adafruit SH1106 with Adafruit GFX works well for basic text and graphics. Both are available through the Arduino Library Manager.