0.96" OLED i2c display review
For 0.96" OLED i2c Display (3.3V - 5.0V)
My primary microprocessor is the Teeny 3.0, which is 3.3v, though I also use 5v Arduino Uno's and Digisparks. Most of the displays available are 5v displays. I didn't want to mess with voltage level shifters to get a display I could use on the Teensy. So, I bought the OLED display from tindie, and hooked it up.
It is tiny, but very readable at a normal distance. I am 55 and I tend to use computer glasses when I'm typing at the screen, but I can usually read a normal LCD without the glasses. Looking at the OLED display, I need those glasses to read the size 1 font when the display is an arm's length away, but I can read the size 2 and size 3 without the glasses. I can read the display from an angle. I have not tried reading the display outdoors.
I downloaded the Adafruit drivers for the SSD1306 and the GFX library that the SSD1306 drivers use. Once I changed the i2c address in the ssd1306_128x64_i2c.ino example from 0x3D to 0x3C it worked fine. The example shows drawing lines, rectangles, circles, text, scrolling text, and bitmaps.
Note, the example uses pin 4 as an unused pin, and the code turns it on/off, so you might want to change this to an unused pin.
Also, when you install the Adafruit library, make sure SSD1306_128_64 is defined, and not SSD1306_128_32, since evidently the Adafruit libraries cannot support both displays at the same time.
Evidently, the u8glib library also supports the SSD1306, but I haven't tried it out yet (the u8glib library is rather complex in that it supports many different types of display, and you have to pick the right one).
In writing my own tests, I discovered that the display can show 8 lines of 20 characters at size 1, 4 lines of 9 characters at size 2, and 3 lines of 7 characters at size 3. If you aren't using println or \n to end lines, you might be able to get a 21st character at size 1 and a 10th character at size 2. Since I was originally looking for a 20x4 text display, the OLED display essentially gives me another 4 lines (assuming I don't mind wearing the glasses).
One thing I don't like about the Adafruit libraries is they don't seem to provide auto scrolling. What I would like to do is random prints and printlns and have each line just scroll down and replace the line above it like you get with the serial monitor. I will likely have to implement this at a higher level to use the display.
I was reading the Adafruit forum where they were discussing the Adafruit OLED device that this device is a clone of, and it looks like these devices can't be used on small memory systems (like the Trinket, Gemma, Digispark, or Lilypad), since the software needs to buffer the entire screen in memory (1,024 bytes), and you run out of memory. On the Uno, Leonardo and Flora, it would take about 1/2 of the available memory.
Note, I damaged my first OLED display, and I'm not sure how I did it. I suspect I reversed the power and ground lines, or plugged power into SDA/SCL.
It is unfortunate that there is no standardization in the i2c world for the order of the 4 pins, with some devices wanting power, ground, SDA, and SCL (like this display does) and others wanting ground, power, SDA, and SCL (like my previous 5v i2c 16x2 text display did). Because I have slagged several devices by mis-wiring them, I now need to check carefully when moving a device to a different setup.