Small OLED displays are one of the most popular choices for modern embedded systems. They offer high contrast, low power consumption and compact size, making them ideal for Arduino, ESP32 and CANABLOX projects.
This article explains how OLED displays work and compares the most common controller chips: SSD1306, SH1106 and SSD1309.
What Is an OLED Display?
OLED stands for Organic Light Emitting Diode. Each pixel generates its own light, which means no backlight is required.
This results in:
Very high contrast
Deep black levels
Wide viewing angles
Good readability in dark environments
OLED displays are typically monochrome in small modules used for embedded systems.
Common OLED Resolutions
Most small OLED modules use one of the following resolutions:
128x32 pixels
128x64 pixels
These resolutions are sufficient for:
Status information
Menus
Simple graphics
Small icons
SSD1306 OLED Displays
The SSD1306 is the most widely used OLED controller.
Typical features:
Supports I2C and SPI
Common resolutions: 128x32 and 128x64
Very strong library support
Used in many low-cost modules
Advantages of SSD1306
Excellent compatibility with Arduino libraries
Large number of example projects
Easy to integrate
Limitations of SSD1306
Limited resolution
Monochrome only
SH1106 OLED Displays
The SH1106 is similar to SSD1306 but has some internal differences.
Typical features:
Usually I2C interface
128x64 resolution
Slightly different memory layout
Advantages of SH1106
Often used in larger OLED modules
Good availability
Limitations of SH1106
Not fully compatible with SSD1306 libraries
May require different initialization code
Even though the resolution is the same, software must handle SH1106 differently.
SSD1309 OLED Displays
The SSD1309 is a more advanced controller used in some higher-quality OLED modules.
Typical features:
Supports SPI and sometimes I2C
128x64 resolution
Improved performance compared with SSD1306
Advantages of SSD1309
Faster communication in SPI mode
Better suited for more dynamic content
Limitations of SSD1309
Less common than SSD1306
Library support may vary
SSD1306 vs SH1106 vs SSD1309
Feature
SSD1306
SH1106
SSD1309
Resolution
128x32 / 128x64
128x64
128x64
Interface
I2C / SPI
I2C (mostly)
SPI / I2C
Library support
Excellent
Good (but different)
Moderate
Performance
Good
Good
Better in SPI mode
Typical use
General-purpose OLED
Alternative OLED modules
Faster SPI applications
I2C vs SPI on OLED Displays
Many OLED modules support both I2C and SPI.
I2C uses fewer wires and is easier to connect
SPI is faster and better for frequent updates
For simple status displays, I2C is usually sufficient. For animations or fast updates, SPI is preferred.
Power Consumption
OLED displays consume power based on how many pixels are lit.
Black pixels use almost no power
White or bright pixels increase consumption
No backlight means lower idle power than LCD
This makes OLED displays well suited for battery-powered projects.
Typical Use Cases
Sensor displays
Status panels
Small menus
Portable devices
Compact embedded systems
OLED displays are especially useful where space is limited and readability is important.
Important Practical Notes
Most modules use 3.3V logic
Some boards tolerate 5V, but verify before use
Always check the controller chip before selecting a library
SH1106 is not fully compatible with SSD1306 code
I2C addresses may vary between modules
Conclusion
OLED displays based on SSD1306, SH1106 and SSD1309 are excellent choices for compact, high-contrast displays in embedded systems. SSD1306 is the most widely supported option, SH1106 offers similar functionality with slight differences, and SSD1309 provides improved performance in some applications.
Choosing the right controller and interface ensures reliable operation and easier integration into your project.