OLED or Organic Light-Emitting Diode is a future of display technology that is used in smartphones, laptops, monitors, tablets, TVs, etc. So, the OLED industry is growing daily, producing billions of AMOLED screens from LG Display, Samsung Display, BOE, etc. The OLED display module is a flat screen based on light emitting technology which represents a superior display technology, designed with light-emitting organic material’s thin film. Thus, these are emission displays that do not need a backlight thus; these are more efficient as compared to LCDs. In addition, manufacturers can potentially make them foldable, transparent, flexible, and even stretchable in the future. So, this article discusses an overview of SSD1306 OLED Display, pin-out, specifications, and its applications.
What is an SSD1306 OLED Display?
SSD1306 is an OLED display module that displays text, images, and graphics on a thin & flexible screen with organic materials. When electric current is provided then it emits light. So, OLED displays are famous due to their potentially flexible nature and extreme light that generates brighter & crisper images as compared to fixed displays because of being nearly paper-thin. Thus, these displays are also very famous within battery-operated devices because of lower power consumption.
How SSD1306 OLED Display Work?
The SSD1306 OLED display module works by controlling an OLED display with the powerful single-chip CMOS OLED driver controller to turn on or off every pixel. Thus, this controller can handle all RAM buffering & demands minimum effort from the microcontroller connected.
The SSD1306 controller chip communicates with a microcontroller using SPI or I2C. This controller chip updates every pixel on the OLED display. Additionally, the SSD1306 driver contains 1KB of GDDRAM (Graphic Display Data RAM) that stores the bit pattern to display on the screen Every bit in the GDDRAM signifies a single OLED pixel above the screen.
Pin Configuration:
The SSD1306 OLED display pin configuration is shown below. So this module includes seven pins which are discussed below.

SSD1306 OLED Display Pin Configuration
- Pin-1 (GND): This is a common ground pin of the display module.
- Pin-2 (Power (VCC, VDD, 5V)): It is a single power pin of the module, thus it supplies to the module.
- Pin-3 (SCK (CLK, SCL)): This pin performs a common CLK signal for the microcontroller with OLED. So it acts as a CLK pin in I2C & SPI communication.
- Pin-4 (SDA (MOSI, DI)): This pin gets the data from the microcontroller. So, this pin acts as data input for both I2C & SPI.
- Pin-5 (RES (Reset, RST)): This pin resets all the inside buffers of the OLED driver.
- Pin-6 (D/C (A0)): This pin changes the data & command registers on the input necessities.
- Pin-7 (Chip Enable (CS, CE)): This is an enable pin, thus it activates the display on the LOW input signal.
Features & Specifications:
The features and specifications of the SSD1306 OLED display include the following.
- SD1306 is an OLED display module including seven pins.
- It has an OLED-type display.
- Display colors are Yellow, Blue & Monochrome.
- Operating voltage ranges from 3.3V to 5V
- The interface used is I2C.
- The operating current is 20mA.
- Its viewing angle is 160 degrees.
- It has high resolution @ 128×64 pixels.
- Power consumption is low – 0.06W.
- It communicates with SPI/IIC.
- It supports several SPI or I2C devices.
- This module supports decent bitmap image graphics.
- Its working temperature ranges from -30 degrees Celsius to 70 degrees Celsius.
Equivalents & Alternatives
Here are the equivalents to SSD1306 OLED displays: OLED 128×32, GLCD 128×64, LCD 16×2, Nokia 5110 display, and more. In addition, alternative OLED displays include QLED, Mini LED, MLA, QD-OLED, Samsung Odyssey OLED G9, Corsair XENEON FLEX 45, Sony A95L, LG C4, and others.
SSD1306 OLED Interfacing with Arduino through SPI
SSD1306 OLED interfacing with Arduino through SPI is shown below. So this OLED display is based on an SSD1306 chip which can be interfaced directly to a microcontroller (or) single-board computer with a SPI, I2C (or) parallel interface. Thus, SPI and I2C interfaces are commonly used in interfacing OLED display modules.
SSD1306 module is used commonly within monochromatic OLED displays with screen resolutions up to 128×64. So these displays at present are the best alternatives to usual character LCDs. SSD1306 OLED displays are simple to interface through I2C (or) SPI that displays many complex graphics like bitmap images, animations & text. So these OLED displays are much more visual and solid to utilize in portable and wearable consumer devices.
This seven-pin OLED module provides different interfacing options such as 4-wire SPI & I2C, and 3-wire SPI. But the 4-wire SPI is the best communication mode with this module and it also is the default one. Additionally, the OLED module uses minimal power, thus it does not need any external power supply. It is significant to note that the module does not light up its backlight by providing power. Thus, until it is correctly programmed, there are no changes within the OLED display are observable.
Components
The required components of this interfacing mainly include; Arduino UNO, SSD1306 OLED Module, and connecting wires (or) jumper wires. So, the connections of this interfacing follow as;
- Connect the GND pin of the OLED display to the GND pin of the Arduino board.
- Connect the VDD/VCC pin of the OLED display to the 5V pin of the Arduino board.
- Connect the D0/SCL/SCK/CLK pin of the OLED display to pin 10 of the Arduino board.
- Connect the D1/SDA/MOSI pin of the OLED display to pin 9 of the Arduino board.
- Connect the RES/RST/RESET pin of the OLED display to pin 13 of the Arduino board.
- Connect the DC/A0 pin of the OLED display to pin 11 of the Arduino board.

SSD1306 OLED Interfacing with Arduino
Code
The required code for SSD1306 OLED interfacing with Arduino through SPI is shown below. So the library to interface the SSD1306 module with the Arduino board is available from Adafruit. Thus, to find it navigate to Arduino IDE library manager, Sketch –> Include Library —> Manage Libraries. After that need to search for the SSD1306 module and choose the new Adafruit SSD1306 library version. Thus, it will also download the GFX library like one dependency. Once the library is included, then it can be imported within the code. So this library has numerous useful functions.
#include <SPI.h>
#include <Wire.h> <Adafruit_GFX.h> <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for SSD1306 display connected using software SPI (default case):
#define OLED_MOSI 9
#define OLED_CLK 10, OLED_DC 11, OLED_CS 12, OLED_RESET 13;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
// ‘eeworldonlineblack-135×45’, 130x45px
const unsigned char epd_bitmap_eeworldonlineblack_135x45 [] PROGMEM = {
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xf8,
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff,
0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f,
0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc,
0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xfc, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
ff, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, ff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xf8, 0x00, 0xe0, 0x00, 0x60, 0x00, 0x67, 0xf8,
0x1f, 0xc1, 0xf8, 0x00, 0x3f, 0x06, 0x0c, 0x1f, 0xe0, 0x18, 0x00, 0xe0, 0x00, 0x60, 0x00, 0x67,
0xf0, 0x1f, 0xc1, 0xe0, 0x00, 0x1f, 0x04, 0x0c, 0x1f, 0x80, 0x00, 0x00, 0xe0, 0x00, 0x60, 0x00,
0x47, 0xf0, 0x1f, 0xc1, 0xe0, 0x00, 0x0f, 0x00, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0xe1, 0xff, 0xe1,
0xff, 0xc3, 0xf0, 0x1f, 0xc1, 0xc0, 0x00, 0x0f, 0x00, 0x0c, 0x1f, 0x00, 0x00, 0x00, 0xe3, 0xff,
0xe1, 0xff, 0xc3, 0xf0, 0x0f, 0xc3, 0xc0, 0x00, 0x07, 0x00, 0x0c, 0x1e, 0x00, 0x00, 0x00, 0xe3,
0xff, 0xe3, 0xff, 0xc3, 0xe0, 0x0f, 0x83, 0xc1, 0xfe, 0x07, 0x03, 0xfc, 0x1e, 0x07, 0xf0, 0x00,
0xc3, 0xff, 0xe3, 0xff, 0xc3, 0xe0, 0x0f, 0x83, 0xc1, 0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8,
0x00, 0xc3, 0xff, 0xc3, 0xff, 0xc3, 0xe1, 0x0f, 0x83, 0x83, 0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f,
0xf8, 0x00, 0xc3, 0xff, 0xc3, 0xff, 0xc1, 0xe1, 0x07, 0x87, 0x83, 0xff, 0x07, 0x07, 0xfc, 0x1e,
0x0f, 0xf8, 0x00, 0xc3, 0xff, 0xc3, 0xff, 0xc1, 0xe1, 0x07, 0x87, 0x83, 0xff, 0x07, 0x07, 0xfc,
0x1e, 0x0f, 0xf8, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc1, 0xc1, 0x87, 0x07, 0x83, 0xff, 0x07, 0x07,
0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe1, 0xc1, 0x87, 0x07, 0x83, 0xff, 0x07,
0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xe0, 0xc3, 0x87, 0x07, 0x83, 0xff,
0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0x80, 0x01, 0xc0, 0x01, 0xe0, 0xc3, 0x83, 0x0f, 0x83,
0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0x87, 0xff, 0x87, 0xff, 0xe0, 0xc3, 0xc3, 0x0f,
0x83, 0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0x87, 0xff, 0x87, 0xff, 0xf0, 0x83, 0xc2,
0x0f, 0x83, 0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0x87, 0xff, 0x87, 0xff, 0xf0, 0x87,
0xc2, 0x0f, 0x83, 0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0x8f, 0xff, 0x87, 0xff, 0xf0,
0x07, 0xc2, 0x1f, 0xc1, 0xff, 0x07, 0x07, 0xfc, 0x1e, 0x0f, 0xf8, 0x00, 0x8f, 0xff, 0x87, 0xff,
0xf0, 0x07, 0xc0, 0x1f, 0xc1, 0xfe, 0x07, 0x07, 0xfc, 0x1e, 0x07, 0xf0, 0x00, 0x8f, 0xff, 0x8f,
0xff, 0xf0, 0x07, 0xe0, 0x1f, 0xc0, 0x00, 0x07, 0x07, 0xfc, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x03,
0x80, 0x03, 0xf8, 0x0f, 0xe0, 0x1f, 0xc0, 0x00, 0x0f, 0x07, 0xfc, 0x1f, 0x00, 0x00, 0x00, 0x00,
0x03, 0x80, 0x01, 0xf8, 0x0f, 0xe0, 0x1f, 0xe0, 0x00, 0x0f, 0x07, 0xfc, 0x1f, 0x00, 0x00, 0x00,
0x00, 0x03, 0x00, 0x03, 0xf8, 0x0f, 0xe0, 0x3f, 0xf0, 0x00, 0x1f, 0x07, 0xfc, 0x1f, 0x80, 0x08,
0x00, 0x00, 0x03, 0x00, 0x03, 0xf8, 0x0f, 0xf0, 0x3f, 0xf8, 0x00, 0x7f, 0x07, 0xfc, 0x1f, 0xe0,
0x3c, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0xff, 0x7d, 0xfe, 0x7f,
0xf7, 0xfb, 0xef, 0xf0, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7d, 0xff, 0x3d, 0xfe,
0x7f, 0xf7, 0xf9, 0xef, 0xf7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, 0xff, 0x5d,
0xfe, 0x7f, 0xf7, 0xfa, 0xef, 0xf7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff,
0x4d, 0xfe, 0x7f, 0xf7, 0xfa, 0xef, 0xf3, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe,
0xff, 0x6d, 0xfe, 0x7f, 0xf7, 0xfb, 0x6f, 0xf0, 0x40, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe,
0xfe, 0xff, 0x75, 0xfe, 0x7f, 0xf7, 0xfb, 0xaf, 0xf7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x7e, 0xff, 0x71, 0xfe, 0x7f, 0xf7, 0xfb, 0x8f, 0xf7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xff,
ff, 0xff, 0x3d, 0xff, 0x79, 0xfe, 0x7f, 0xf7, 0xfb, 0xcf, 0xf7, 0xc0, 0xff, 0xff, 0xff, 0xff, ff, 0xff, 0xff, 0x83, 0xff, 0x7d, 0xff, 0x0f, 0xf7, 0xfb, 0xef, 0xf8, 0x00};
// Array of all bitmaps for convenience.
(Total bytes used to store images in PROGMEM = 784)
const int epd_bitmap_allArray_LEN = 1;
const unsigned char* epd_bitmap_allArray[1] = {
epd_bitmap_eeworldonlineblack_135x45
};
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.display();
}
void loop() {
printtext();
drawtext();
scrolltext();
drawbm();
}
void printtext(void){
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(“EEWORLDONLINE”);
display.setTextColor(SSD1306_BLACK, SSD1306_WHITE); // Draw ‘inverse’ text
display.println(“EngineersGarage.com!”);
display.setTextColor(SSD1306_WHITE, SSD1306_BLACK); // Draw ‘inverse’ text
display.println(“EngineersGarage.com!”);
display.display();
delay(2000);
}
void drawtext(void) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.cp437(true);
display.write(“EE”);
display.write(‘\n’);
display.setTextSize(1.5);
display.write(“WORLDONLINE”);
display.display();
delay(2000);
}
void scrolltext(void) {
display.clearDisplay();
display.setTextSize(1.5); // Draw 2X-scale text
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F(“EEWorldOnline”));
display.display(); // Show initial text
delay(100);
// Scroll in various directions, pausing in between:
display.startscrollright(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrollleft(0x00, 0x0F);
delay(2000);
display.stopscroll();
delay(1000);
display.startscrolldiagright(0x00, 0x07);
delay(2000);
display.startscrolldiagleft(0x00, 0x07);
delay(2000);
display.stopscroll();
delay(1000);
}
void drawbm(void) {
display.clearDisplay();
display.drawBitmap(0, 0, epd_bitmap_eeworldonlineblack_135x45, 130, 45, WHITE);
display.display();
delay(1000);
}
Working
Once the connections are made, the above code needs to be uploaded to control the display content. So the Adafruit SSD1306 & Adafruit GFX libraries are necessary for interfacing with OLED displays while using SPI or I2C. These displays provide countless possibilities for visual representation from displaying numbers & text to images and drawing shapes. Thus, by using the functions provided by the Adafruit GFX library, we can control text color, size & position, as well as draw various shapes easily.
When working with OLED displays, encountering problems is not special. But, by following a systematic troubleshooting approach, you can quickly identify and resolve common problems related to hardware connections, power supply, code errors, and display settings. Thus, by providing a power supply to the board the output will be displayed on the display.
Advantages & Disadvantages
The advantages of the SSD1306 OLED display include the following.
- This display generates its light & doesn’t require any other backlight source.
- These displays always have superior brightness, contrast & viewing angles as compared to LCDs.
- These are popular due to their easy interfacing & low cost.
- It has deep black levels so every pixel generates its light within an OLED Display. So the individual pixel can be disabled to generate a black color,
- They use low power because they emit light only whenever activated.
- These displays have a high contrast ratio.
- They can be viewed without losing brightness or contrast from a wide angle.
- These displays have faster response times so it decreases motion blur.
- This display is flexible which makes it perfect to use in small displays & wearable devices.
The disadvantages of the SSD1306 OLED display include the following.
- Its lifespan is limited because of the organic materials used within OLED displays which are less stable..
- They can be injured by water which can affect their organic materials.
- Additionally, these displays have a visible impression above the display so it is difficult to remove.
- Blue OLEDs corrupt faster as compared to other colors, thus the blue light o/p reduces over time.
- These displays are more costly to manufacture.
- OLED displays are emissive, thus they depend on changing electricity into light so they are not suitable for use outdoors.
Applications
The applications of the SSD1306 OLED display include the following.
- The SSD1306 OLED display is used frequently in wearable devices due to its tiny size & less power consumption.
- It is the best choice for mainly portable electronics.
- It is used frequently in IoT devices.
- This OLED display is used to check OLED screens mainly for fitness tracking and intelligent devices.
Please refer to this link for the SSD1306 OLED display Datasheet.
Thus, this is all about the SSD1306 OLED display, its working & its applications. So this is a monochrome display that utilizes a single-chip controller to handle an OLED display. Due to the utilization of the SSD1306 driver, the required external components & power consumption have decreased. So this display is used to display images, text, and different patterns which are used frequently in devices like health trackers, MP3 players & smartwatches. Thus, here is a question for you, what is the OLED G9 module?