Skip to content

OLED-LCD

Overview

The development board supports monochrome OLED displays with a resolution of 128*64 pixel driven by a SSD1306 driver. The display is not soldered on the board, but there is a four pin connector of a OLED display. The right image shows the component with connected display.

Example

A sample project for the Arduino IDE is provided in OLED_1.ino which could be downloaded here

Activating the component

The component has a dip switch SW309, which have to be activated in order to uhse the component. The component is connected to the following ports:

Function SWITCH IO port Conflicts with Remarks
SCL 1 4 Gyro, SW310-4, SCL/SCLK; Camera, SW402-1, RCK/RCKL; SD Card, SW200-1, CN212 - PIN 6; Grove I2C, SW203-2, I2C - SCL I2C Pull-up by SW308
SDA 2 19 RFID, SW310-3, MISO; Gyro, SW310-3, SDA/SDI; TFT, SW314-1, MSIO; mikroBus, SW405-2, MISO; Unit-Bus, SW200-2, CN212 - PIN 5; Grove I2C, SW203-1, I2C- SDA I2C Pull-up by SW307

Using the component

Info

Required libraries

In order to use the component you need two libraries: Adafruit SSD1306 and Adafruit GFX library. The latest version of the Adafruit SSD1306 library could be downloaded from the GitHub repository. Additionally you could download a tested version. After the download it's necessary to add both libraries to your Arduino IDE. Open Sketch > Include Library > Add .ZIP Library ... and select the downloaded archive. Do it for both libraries.

After a sucessful installation the menu Sketch > Include Library should contain an entry Adafruit GFX library and Adafruit SSD 1306* in the category Recommended libraries.

menu_boards_manager

Import the necessary libraries

Caution

It's important that you use the "-sign for important the Adafruit_SSD1306 library. With the quotation marks the enviroment searches first in the local directory for this library. Here it's important that you put a patched version of this library in your working directory of the sketch. You need Adafruit_SSD1306.h and Adafruit_SSD1306.cpp.

1
#include "Adafruit_SSD1306.h"

You need both libraries (Adafruit_SSD1306, Adafruit GFX) in for using this sample codes. In case of compilation error you should check whether you have added both libraries to your Arduino development environment. The Adafruit GFX library is used from Adafruit_SSD1306.

Setup the display

The first step is to create an instance of the class Adafruit_SSD1306 in order to work with the display.

1
2
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

Open the display on the I2C addr 0x3D (for the 128x64).

1
2
3
4
void setup()   {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}

Note

The line Serial.begin(9600) is only for debugging purposes. You could remove this line if you don't need outputs in the Serial console.

Draw a Pixel

1
2
display.clearDisplay();
display.drawPixel(10, 10, WHITE);

Draw many lines

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void testdrawline() {
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, 0, i, display.height()-1, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(0, 0, display.width()-1, i, WHITE);
    display.display();
    delay(1);
  }
  delay(250);

  display.clearDisplay();
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(0, display.height()-1, i, 0, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t 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 (int16_t i=display.width()-1; i>=0; i-=4) {
    display.drawLine(display.width()-1, display.height()-1, i, 0, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t 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 (int16_t i=0; i<display.height(); i+=4) {
    display.drawLine(display.width()-1, 0, 0, i, WHITE);
    display.display();
    delay(1);
  }
  for (int16_t i=0; i<display.width(); i+=4) {
    display.drawLine(display.width()-1, 0, i, display.height()-1, WHITE);
    display.display();
    delay(1);
  }
  delay(250);
}

Scroll text

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void testscrolltext(void) {
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(10,0);
  display.clearDisplay();
  display.println("scroll");
  display.display();
  delay(1);

  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();
}

Text display tests

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, world!");
display.setTextColor(BLACK, WHITE); // 'inverted' text
display.println(3.141592);
display.setTextSize(2);
display.setTextColor(WHITE);
display.print("0x"); display.println(0xDEADBEEF, HEX);
display.display();
delay(2000);
display.clearDisplay();

Invert the display

1
2
3
4
5
display.invertDisplay(true);
delay(1000);
display.invertDisplay(false);
delay(1000);
display.clearDisplay();

Sample project

A sample project for the Arduino IDE is provided in OLED_1.ino which could be downloaded here. The following image shows the oled display with results from the sample project: