Postion:Home > OLED Display technology

OLED Display technology

0.96 inch SSD1306 Oled Arduino application tuitorial

We are introducing the 0.96" oled screen that with 4 pins connection, it is designed that easily to connect with Arduino board. one power supply (+5V), it has been in-bulit DC-DC on board,  IIC interface that can be connected directly to Arduino by pin to pin. let's see as following:

Pin wiring

Because the OLED display uses I2C communication protocol, wiring is very simple. You just need to connect to the Arduino Uno I2C pins as shown in the table below.

Pin

Wiring to Arduino Uno

Vin

5V

GND

GND

SCL

A5

SDA

A4

If you’re using a different Arduino board, make sure you check the correct I2C pins:

  • Nano: SDA (A4); SCL (A5);
  • MEGA: SDA (20); SCL (21);
  • Leonardo: SDA (20); SCL (21);


0.96 <a href=https://www.szmaclight.com/new/OLED-display-technology.html target='_blank'>oled display module</a> arduino

Libraries

To control the OLED display you need the adafruit_SSD1306.h and the adafruit_GFX.h libraries. Follow the next instructions to install those libraries.

1. Open your Arduino IDE and go to Sketch > Include Library > Manage Libraries. The Library Manager should open.

2. Type “SSD1306” in the search box and install the SSD1306 library from Adafruit.

3. After installing the SSD1306 library from Adafruit, type “GFX” in the search box and install the library.

4. After installing the libraries, restart your Arduino IDE.

Tips for writing text using these libraries

Here’s some functions that will help you handle the OLED display library to write text or draw simple graphics.

  • display.clearDisplay() – all pixels are off
  • display.drawPixel(x,y, color) – plot a pixel in the x,y coordinates
  • display.setTextSize(n) – set the font size, supports sizes from 1 to 8
  • display.setCursor(x,y) – set the coordinates to start writing text
  • display.print(“message”) – print the characters at location x,y
  • display.display() – call this method for the changes to make effect

Testing the OLED Display

After wiring the OLED display to the Arduino and installing all required libraries, you can use one example from the library to see if everything is working properly.

In your Arduino IDE, go to File > Examples > Adafruit SSD1306 and select the example for the display you’re using.


The following code should load:

If your OLED display module doesn’t have a RESET pin, you should set the OLED_RESET variable to -1 as shown below:

#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)


Upload the code to your Arduino board. Don’t forget to select the right board and COM port in the Tools menu.

You should get a series of different animations in the OLED as shown in the following short video.


If your OLED display is not showing anything:

  • Check that the OLED display is properly wired to the Arduino
  • Double-check the OLED display I2C address: with the OLED connected to the Arduino, upload this code and check the I2C address in the Serial Monitor

You should change the OLED address in the following line, if necessary. In our case, the address is 0x3C.

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {

Write Text – OLED Display

The Adafruit library for the OLED display comes with several functions to write text. In this section, you’ll learn how to write and scroll text using the library functions.

“Hello, world!” OLED Display

The following sketch displays Hello, world! message in the OLED display.

/*********


#include

#include

#include

#include


#define SCREEN_WIDTH 128 // OLED display width, in pixels

#define SCREEN_HEIGHT 64 // OLED display height, in pixels


// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)

#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


#define NUMFLAKES     10 // Number of snowflakes in the animation example


#define LOGO_HEIGHT   16

#define LOGO_WIDTH    16

static const unsigned char PROGMEM logo_bmp[] =

{ B00000000, B11000000,

B00000001, B11000000,

B00000001, B11000000,

B00000011, B11100000,

B11110011, B11100000,

B11111110, B11111000,

B01111110, B11111111,

B00110011, B10011111,

B00011111, B11111100,

B00001101, B01110000,

B00011011, B10100000,

B00111111, B11100000,

B00111111, B11110000,

B01111100, B11110000,

B01110000, B01110000,

B00000000, B00110000 };


void setup() {

Serial.begin(115200);


// SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally

if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {

Serial.println(F("SSD1306 allocation failed"));

for(;;); // Don't proceed, loop forever

}


// Show initial display buffer contents on the screen --

// the library initializes this with an Adafruit splash screen.

display.display();

delay(2000); // Pause for 2 seconds


// Clear the buffer

display.clearDisplay();


// Draw a single pixel in white

display.drawPixel(10, 10, WHITE);


// Show the display buffer on the screen. You MUST call display() after

// drawing commands to make them visible on screen!

display.display();

delay(2000);

// display.display() is NOT necessary after every single drawing command,

// unless that's what you want...rather, you can batch up a bunch of

// drawing operations and then update the screen all at once by calling

// display.display(). These examples demonstrate both approaches...


testdrawline();      // Draw many lines


testdrawrect();      // Draw rectangles (outlines)


testfillrect();      // Draw rectangles (filled)


testdrawcircle();    // Draw circles (outlines)


testfillcircle();    // Draw circles (filled)


testdrawroundrect(); // Draw rounded rectangles (outlines)


testfillroundrect(); // Draw rounded rectangles (filled)


testdrawtriangle();  // Draw triangles (outlines)


testfilltriangle();  // Draw triangles (filled)


testdrawchar();      // Draw characters of the default font


testdrawstyles();    // Draw 'stylized' characters


testscrolltext();    // Draw scrolling text


testdrawbitmap();    // Draw a small bitmap image


// Invert and restore display, pausing in-between

display.invertDisplay(true);

delay(1000);

display.invertDisplay(false);

delay(1000);


testanimate(logo_bmp, LOGO_WIDTH, LOGO_HEIGHT); // Animate bitmaps

}


void loop() {

}


void testdrawline() {

int16_t i;


display.clearDisplay(); // Clear display buffer


for(i=0; i

display.drawLine(0, 0, i, display.height()-1, WHITE);

display.display(); // Update screen with each newly-drawn line

delay(1);

}

for(i=0; i

display.drawLine(0, 0, display.width()-1, i, WHITE);

display.display();

delay(1);

}

delay(250);


display.clearDisplay();


for(i=0; i

display.drawLine(0, display.height()-1, i, 0, WHITE);

display.display();

delay(1);

}

for(i=display.height()-1; i>=0; i-=4) {

display.drawLine(0, display.height()-1, display.width()-1, i, WHITE);

display.display();

delay(1);

}

delay(250);


display.clearDisplay();


for(i=display.width()-1; i>=0; i-=4) {

display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);

display.display();

delay(1);

}

for(i=display.height()-1; i>=0; i-=4) {

display.drawLine(display.width()-1, display.height()-1, 0, i, WHITE);

display.display();

delay(1);

}

delay(250);


display.clearDisplay();


for(i=0; i

display.drawLine(display.width()-1, 0, 0, i, WHITE);

display.display();

delay(1);

}

for(i=0; i

display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);

display.display();

delay(1);

}


delay(2000); // Pause for 2 seconds

}


void testdrawrect(void) {

display.clearDisplay();


for(int16_t i=0; i

display.drawRect(i, i, display.width()-2*i, display.height()-2*i, WHITE);

display.display(); // Update screen with each newly-drawn rectangle

delay(1);

}


delay(2000);

}


void testfillrect(void) {

display.clearDisplay();


for(int16_t i=0; i

// The INVERSE color is used so rectangles alternate white/black

display.fillRect(i, i, display.width()-i*2, display.height()-i*2, INVERSE);

display.display(); // Update screen with each newly-drawn rectangle

delay(1);

}


delay(2000);

}


void testdrawcircle(void) {

display.clearDisplay();


for(int16_t i=0; i

display.drawCircle(display.width()/2, display.height()/2, i, WHITE);

display.display();

delay(1);

}


delay(2000);

}


void testfillcircle(void) {

display.clearDisplay();


for(int16_t i=max(display.width(),display.height())/2; i>0; i-=3) {

// The INVERSE color is used so circles alternate white/black

display.fillCircle(display.width() / 2, display.height() / 2, i, INVERSE);

display.display(); // Update screen with each newly-drawn circle

delay(1);

}


delay(2000);

}


void testdrawroundrect(void) {

display.clearDisplay();


for(int16_t i=0; i

display.drawRoundRect(i, i, display.width()-2*i, display.height()-2*i,

display.height()/4, WHITE);

display.display();

delay(1);

}


delay(2000);

}


void testfillroundrect(void) {

display.clearDisplay();


for(int16_t i=0; i

// The INVERSE color is used so round-rects alternate white/black

display.fillRoundRect(i, i, display.width()-2*i, display.height()-2*i,

display.height()/4, INVERSE);

display.display();

delay(1);

}


delay(2000);

}


void testdrawtriangle(void) {

display.clearDisplay();


for(int16_t i=0; i

display.drawTriangle(

display.width()/2  , display.height()/2-i,

display.width()/2-i, display.height()/2+i,

display.width()/2+i, display.height()/2+i, WHITE);

display.display();

delay(1);

}


delay(2000);

}


void testfilltriangle(void) {

display.clearDisplay();


for(int16_t i=max(display.width(),display.height())/2; i>0; i-=5) {

// The INVERSE color is used so triangles alternate white/black

display.fillTriangle(

display.width()/2  , display.height()/2-i,

display.width()/2-i, display.height()/2+i,

display.width()/2+i, display.height()/2+i, INVERSE);

display.display();

delay(1);

}


delay(2000);

}


void testdrawchar(void) {

display.clearDisplay();


display.setTextSize(1);      // Normal 1:1 pixel scale

display.setTextColor(WHITE); // Draw white text

display.setCursor(0, 0);     // Start at top-left corner

display.cp437(true);         // Use full 256 char 'Code Page 437' font


// Not all the characters will fit on the display. This is normal.

// Library will draw what it can and the rest will be clipped.

for(int16_t i=0; i<256; i++) {

if(i == '\n') display.write(' ');

else          display.write(i);

}


display.display();

delay(2000);

}


void testdrawstyles(void) {

display.clearDisplay();


display.setTextSize(1);             // Normal 1:1 pixel scale

display.setTextColor(WHITE);        // Draw white text

display.setCursor(0,0);             // Start at top-left corner

display.println(F("Hello, world!"));


display.setTextColor(BLACK, WHITE); // Draw 'inverse' text

display.println(3.141592);


display.setTextSize(2);             // Draw 2X-scale text

display.setTextColor(WHITE);

display.print(F("0x")); display.println(0xDEADBEEF, HEX);


display.display();

delay(2000);

}


void testscrolltext(void) {

display.clearDisplay();


display.setTextSize(2); // Draw 2X-scale text

display.setTextColor(WHITE);

display.setCursor(10, 0);

display.println(F("scroll"));

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 testdrawbitmap(void) {

display.clearDisplay();


display.drawBitmap(

(display.width()  - LOGO_WIDTH ) / 2,

(display.height() - LOGO_HEIGHT) / 2,

logo_bmp, LOGO_WIDTH, LOGO_HEIGHT, 1);

display.display();

delay(1000);

}


#define XPOS   0 // Indexes into the 'icons' array in function below

#define YPOS   1

#define DELTAY 2


void testanimate(const uint8_t *bitmap, uint8_t w, uint8_t h) {

int8_t f, icons[NUMFLAKES][3];


// Initialize 'snowflake' positions

for(f=0; f< NUMFLAKES; f++) {

icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());

icons[f][YPOS]   = -LOGO_HEIGHT;

icons[f][DELTAY] = random(1, 6);

Serial.print(F("x: "));

Serial.print(icons[f][XPOS], DEC);

Serial.print(F(" y: "));

Serial.print(icons[f][YPOS], DEC);

Serial.print(F(" dy: "));

Serial.println(icons[f][DELTAY], DEC);

}


for(;;) { // Loop forever...

display.clearDisplay(); // Clear the display buffer


// Draw each snowflake:

for(f=0; f< NUMFLAKES; f++) {

display.drawBitmap(icons[f][XPOS], icons[f][YPOS], bitmap, w, h, WHITE);

}


display.display(); // Show the display buffer on the screen

delay(200);        // Pause for 1/10 second


// Then update coordinates of each flake...

for(f=0; f< NUMFLAKES; f++) {

icons[f][YPOS] += icons[f][DELTAY];

// If snowflake is off the bottom of the screen...

if (icons[f][YPOS] >= display.height()) {

// Reinitialize to a random position, just off the top

icons[f][XPOS]   = random(1 - LOGO_WIDTH, display.width());

icons[f][YPOS]   = -LOGO_HEIGHT;

icons[f][DELTAY] = random(1, 6);

}

}

}

}

CATEGORIES

CONTACT US

Tel: +86-755-27205930 / 36613676

Email: [email protected]

Add: No.615,C Zone,Mingyou Purchasing center,Baoyuan Road,Baoan District,Shenzhen,China

Scan the Wechat codeClose
the qr code