Introduction: Use SPI OLED on PcDuino

About: Let's play together! All about pcDuino,Arduino,Raspberry pi and technology. My facebook :Sherry Wu https://m.facebook.com/sasha.wu.775

OLED is the organic Light Emitting Diode. For the OLED has the good feature of self-luminous, no needing back-light,high contrast ratio, thin,wide visual angle, rapid reaction speed, can use at flexural board, wide temperature range, structure and sample processing manufacture ect , which is regarded as the next generation flat surface display new applied technology. LCD need back light, but OLED do not need, for it is self-luminous. So the same display, OLED is much better. To the recent technology, OLED size is hard to large scale, but the resolution ratio can improve. This screen can use the drive IC SSD1306, every page of SSD1306 include 128 byte, total 8 pages, the matrix array is just exactly 128*64.

Step 1:

GNDVCC:positive(3V~5.5V)DO:SPI clock line pinDI:SPI data line pinRES:reset pinDC:data and order pinCS:chip selection pin

Step 2:

1 x pcDuino3

1 x OLED

Jumper lines

1 x board

Step 3:

#include "SSD1306.h"

#define OLED_DC 11
#define OLED_CS 12
#define OLED_CLK 10
#define OLED_MOSI 9
#define OLED_RESET 13
  
SSD1306 oled(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
  
#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2
  
#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16
static unsigned char __attribute__ ((progmem)) logo16_glcd_bmp[]={
0x30, 0xf0, 0xf0, 0xf0, 0xf0, 0x30, 0xf8, 0xbe, 0x9f, 0xff, 0xf8, 0xc0, 0xc0, 0xc0, 0x80, 0x00, 
0x20, 0x3c, 0x3f, 0x3f, 0x1f, 0x19, 0x1f, 0x7b, 0xfb, 0xfe, 0xfe, 0x07, 0x07, 0x07, 0x03, 0x00, };
  
void setup()   {                
  Serial.begin(9600);
  
  // If you want to provide external 7-9V VCC, uncomment next line and comment the one after
  //oled.ssd1306_init(SSD1306_EXTERNALVCC);
  
  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  oled.ssd1306_init(SSD1306_SWITCHCAPVCC);
  // init done
  
  oled.display(); // show splashscreen
  //while(1);
  delay(3000);
     // clears the screen and buffer
  
  // Fill screen
  oled.fillrect(0, 0, SSD1306_LCDWIDTH-1, SSD1306_LCDHEIGHT-1, WHITE);
  oled.display();
  delay(500);
  
  // draw a single pixel
  oled.setpixel(10, 10, WHITE);
  oled.display();
  delay(3000);
  oled.clear();
  
  // draw many lines
  testdrawline();
  oled.display();
  delay(3000);
  oled.clear();
  
  // draw rectangles
  testdrawrect();
  oled.display();
  delay(3000);
  oled.clear();
  
  // draw multiple rectangles
  testfillrect();
  oled.display();
  delay(3000);
  oled.clear();
  
  // draw mulitple circles
  testdrawcircle();
  oled.display();
  delay(3000);
  oled.clear();
  
  // draw a white circle, 10 pixel radius, at location (32,32)
  oled.fillcircle(32, 32, 10, WHITE);
  oled.display();
  delay(3000);
  oled.clear();
  
  // draw the first ~12 characters in the font
  testdrawchar();
  oled.display();
  delay(3000);
  oled.clear();
  
  // miniature bitmap display
  oled.drawbitmap(30, 16,  logo16_glcd_bmp, 16, 16, 1);
  oled.display();
  
}
  
void loop()                     
{
  // draw a string at location (0,0)
  oled.clear();
  oled.drawstring(0, 1, "Hello pcDuino");
  oled.drawstring(0, 4, "www.LinkSprite.com");
  oled.display();
  while(1);
}
  
void testdrawchar(void) {
  for (uint8_t i=0; i < 168; i++) {
    oled.drawchar((i % 21) * 6, i/21, i);
  }    
}
  
void testdrawcircle(void) {
  for (uint8_t i=0; i

Step 4:

1. wire according to the following instruction:

OLED GND –> pcDuino GND OLED VCC –> pcDuino 3.3V OLED D0 –> pcDuino D10 OLED DI –> pcDuino D9 OLED RES –> pcDuino D13 OLED D/C –> pcDuino D11 OLED CS –> pcDuino D12

2. download the test code in the attachment, then open in the Arduino IDE, click and compile:
3. Run effect as the following picture: Display the character

Display the round dot:

Display segment:

Step 5: Download and Attachment

Test Code: spi_olde_test

SSD1306 Datasheet :SSD1306