Jewelry Box: SSD1306 128×64 OLED Message Board
There are a few different SSD1306 OLED displays, but mine has a yellow top, and blue bottom. Yellow is (0,0) by (127,15), while blue is (16,0) by (127,63). Knowing the dimensions of the display allows me to lay out the message and text.
The library for the display is Adafruit’s own SSD1306 OLED Driver library (github). Their library isn’t specific for single- or dual-color displays, as I’ll simply need to specify a size for my text. As with any message display, it’s a matter of planning the display layout on the screen, and letting the library render it accordingly.
Wiring

Same as I did with the DS3231 RTC module, I wired 5v with the red wire, ground with the black wire, SDA (Serial Data) with the yellow wire, and SCL (Serial Clock) with the green wire. This will require more work to setup than the DS3231 RTC module.
Coding
What’s Your Address?
Before using the display, I need to find its hexadecimal address; 0x00 to 0xFF. This can be quickly found using the I2C Scanner sketch from the Arduino Playground (found here). Upload the sketch to the Uno R3, and open the Serial Monitor. It will report all found I2C devices that are attached to the Uno R3.

Do You Read Me?
To use the SSD1306 OLED display, it’s going to take two libraries from Adafruit: SSD1306 and GFX. When loading the Arduino IDE with these libraries in place, it is going to throw an error message about the library name, but still load the library for use. This can be fixed by renaming the GFX library folder from hyphens to underscores.

After renaming the directory, the Arduino IDE will need to be closed and re-opened. Load the example code from File -> Examples -> Adafruit_SSD1306 -> ssd1306_128x64_i2c, and click on Verify, to ensure it compiles without any errors.

This is in the ‘Adafruit_SSD1306.h’ file, due to the uncommented (chosen) screen size of 128×32. The solution is simple: comment the 128×32 line, and uncomment the 128×64 line. The line numbers are 73 and 74 in ‘libraries/Adafruit_SSD1306/Adafruit_SSD1306.h‘.
ORIGINAL
-----------------------------------------------------------------------*/ //   #define SSD1306_128_64 #define SSD1306_128_32 //   #define SSD1306_96_16 /*=========================================================================*/
UPDATED
-----------------------------------------------------------------------*/ #define SSD1306_128_64 // #define SSD1306_128_32 // #define SSD1306_96_16 /*=========================================================================*/
Save the file, and click on Verify to ensure it compiles successfully.
Back at the example sketch, an edit needs to be made from 0x3D to 0x3C (line 61), to ensure the Uno R3 communicates with the SSD1306. Once successfully edited, click on the Upload button, which will recompile and upload the sketch, and view the OLED to see the Adafruit logo displayed, followed by a series of graphic examples: circles, triangles, squares, rectangles, text in various sizes, scrolling text, and an ongoing display of animated stars. Looking at the example code provided, you can determine the syntax to use for any given graphic design, and text display.
What Do You Have to Say for Yourself?
When creating your display content, there are two main things to remember: clear the previous display with “display.clearDisplay()“, and draw your instructions with “display.display()“. Forgetting to clear the previous screen will add your entries together with what is on the screen, and forgetting to draw your instructions will never display onto the screen.
On my SSD1306 OLED display, I have two color tones: yellow top, with a blue bottom. It is not an even split on the screen. Yellow is from (0,0) to (127,15), and blue is then (0,16) to (127,63). This can be helpful for drawing specific pixels on the 128×64 grid. When using text, the size is in 8-bit height (8 pixels tall), starting from top to bottom, of where you specify your start: “display.setCursor(0,0);“.
Show Me What You Can Do



Conclusion
The text is there to be displayed. Since I can get output of time from the DS3231 RTC module, I can run that information through a loop to see if the day count increased (+86400). With a new day, that isn’t our anniversary, it can count the days. Otherwise, when it’s our anniversary, it can show a count of years, instead of days.