Introduction: Use SPI OLED on PcDuino
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