#087 SSD1306 OLED Bareback SPI
Test driving a monochrome 128x64 OLED Display with an Arduino and the raw command set over SPI
Here’s a quick video of the circuit in action:
Notes
It runs a simple demo cycle, including the reading and display of a voltage from the A0 pin.
There are a few commonly-used libraries - such as ladyada’s, as demoed in the SSD1306WithAdaFruitLibraries project - however this sketch uses the instruction set for device directly, as documented in the SSD1306 datasheet.
I’m using an Arduino Pro Mini running on 3.3V at 8MHz, and driving the OLED directly.
The OLED is one I got from aliexpress for USD3.93 - see the seller’s page: Yellow+Blue 0.96” SPI Serial 128X64 OLED. Although it’s a monochrome display, this unit comes with two-tinted glass, which makes the upper fifth of the screen yellow and the lower blue.
The pin breakouts are slightly different from the AdaFruit module (used in the Fritzing diagram). These are the actual pin connections for my unit:
Arduino | OLED |
---|---|
D09 | MOSI |
D10 | CLK |
D11 | D/C |
D12 | CS |
GND | GND |
VCC | VCC |
Note that my OLED doesn’t have a reset connection, so I’m not able to use a reset to get the display back to default configuration,
hence the setup
method runs through and sets all the configuration options regardless.
Of course, using the raw command approach means the program leaves out all the unecessary support, so memory requirements are much less than if importing a full library:
Memory | Usage |
---|---|
program storage | 4,650 bytes (15%) |
dynamic memory | 505 bytes (24%) |
Construction
Credits and References
- AdaFruit’s excellent Monochrome OLED Breakouts page
- SSD1306 datasheet
- 1-Day Project: Arduino Uno and I2C OLED Display Challenge - Julian Ilett’s video exploring the OLED
- Tested: Display Libraries - Adafruit, u8glib, Homebrew Code - Julian Ilett’s video that inspired this test
- Introduction to I²C and SPI protocols
- Arduino And SSD1306 Oled Display Tutorial
- Lcd5110BareBack - a similar test but for a Nokia 5110 LCD Display