Summary of SSD1306xLED Tinusaur ATtiny85 Library for SSD1306
SSD1306xLED is a C library enabling ATtiny85-based boards like Tinusaur to control 128×64 OLED displays via SSD1306 drivers over I²C. It manages communication, graphical commands, and text rendering through high-level functions. The project requires specific pin definitions for SCL and SDA, includes initialization delays, and supports both character fonts and bitmap output.
Parts used in the SSD1306xLED Project:
- ATtiny85 microcontroller
- Tinusaur board
- SSD1306 display driver circuit
- 128×64 OLED/PLED dot matrix display
- IIC_without_ACK library code
- Source code repository on Bitbucket
Story

The 128×64 OLED is controlled by a SSD1306 circuit and could be interfaced over I²C.
The code could be divided in 3 pieces:
- Communication over I²C with the SSD1306;
- Sending graphical commands to the display;
- High-level functions such as printing characters.
The I²C communication part is based on a code from the IIC_wtihout_ACK library that is available on the Internet but its original website (http://www.14blog.com/archives/1358) is no longer functional. Basically, the SSD1306xLED library makes SSD1306 to work with ATtiny85 and Tinusaur.
Using this library to control an OLDE display is very easy. The necessary header files that should be included with the program could be found in the source code repository – the link is at the bottom of this document.
First, the controlling PINs should be specified in the source code:
#define SSD1306_SCL PB2 // SCL, Pin 3 on SSD1306 Board
#define SSD1306_SDA PB0 // SDA, Pin 4 on SSD1306 Board
There are defaults, of course, but make sure they work for you.
There is also I2C slave address specified in the source code but you probably don’t want to change that.
Second, the display controller should be initialized.
_delay_ms(40);
ssd1306_init();
The delay is necessary if the initialization is at the beginning of the program. This is required by the SSD1306 circuit as it needs time to initialize itself after power-on.
Then, the simplest example would be to clear the screen (fill it out with blanks) and output some text.
ssd1306_fillscreen(0x00);
ssd1306_setpos(0, 10);
ssd1306_string_font6x8("Hello World!");
The ssd1306_string_font6x8 function call will output at the specified by the ssd1306_setpos function coordinates the provided text using 6×8 character font.
Similarly, a bitmap could be output on the screen with the following code:
ssd1306_draw_bmp(0,0,128,8, img1_128x64c1);
The above function call specifies (0,0) coordinates, width of 128 pixels and height of 8 bytes – 64 pixels.
Documentation
This project often changes so more current information could be found in the source code repository – in the text files and source files as well.
Source code
The source code along with very simple example is available on Bitbucket at this address: https://bitbucket.org/tinusaur/ssd1306xled
This SSD1306xLED library still needs more work and some improvements.
For more detail: SSD1306xLED Tinusaur ATtiny85 Library for SSD1306
- What microcontrollers does this library support?
The library is intended for the Tinusaur board and works with any board based on ATtiny85 or similar microcontrollers. - How is the display connected to the controller?
The 128×64 OLED is controlled by an SSD1306 circuit and interfaced over I²C. - Which pins are required for SCL and SDA connections?
SCL connects to PB2 (Pin 3) and SDA connects to PB0 (Pin 4) on the SSD1306 Board. - Why is a delay necessary during initialization?
A 40ms delay is required because the SSD1306 circuit needs time to initialize itself after power-on. - Can I output images on the screen?
Yes, bitmaps can be output using the ssd1306_draw_bmp function with specified coordinates and dimensions. - Where can I find the source code?
The source code and examples are available on Bitbucket at the provided link in the document. - Does the library handle text rendering?
Yes, it provides high-level functions like ssd1306_string_font6x8 to print characters using a 6×8 font.

