The mini OLED 0.96 in display is 128 x 64 pixels and communication protocol is I2C.

There is also a SPI version which has more pins 6 or 7.

The I2C model has only 4 pins Vcc,Gnd,SCL & SDA.

The supply volt is 3.3 to 5v. As an I2C device it has got an address , by default it is 0x3C or decimal 60. This can be changed by soldering the position of a resistor on the back of pcb.



Connect Vcc of OLED to 3.3v, Gnd to Gnd

SCL  –>  GPIO 22

SDA  –> GPIO 21


Resolution of display is 128 x 64 pixels. 0 to 127 in X axis and 0 –63 on Y axis.



MicroPython provides some built-in support for these displays, and a simple framebuffer which can be used as a drawing surface.

However, we still need a driver to interface the buffer to the display.

There is a Python ssd1306 module for OLED displays available.This is python library for interfacing OLED (both I2C & SPI supported).

Click on Raw button and save as file on your computer.This save as appears only in Chrome browser.


Use File  –> Open and browse to the location to select the file.

Click File  –>  Save as

Select Micropython device (ESP32)



Save the file as

Now the driver module is on ESP32.


By default already you have

Now we have loaded the driver


From interpreter of Thonny Python , the individual code can be tested.

From machine module import Pin , I2C

Pin Class handles all GPIO pins and I2C handles i2c protocol..

Then import the OLED driver module ssd1306.



To use the display you first need to create an I2C interface. In MicroPython I2C is  via a software implementation so you can select any GPIO pins you like.

We shall select the default SCL pin GPIO 22 &  SDA pin GPIO 21.




Then create an oled object from class SSD1306_I2C

as this class is inside file ssd1306, we use


The arguments are  128 – width , 64 – height , i2c – protocol, 0x3c – address




Once the object is instantiated , the methods can be used.

.text() method is to print message on display.

Pass on the message to print and the X,Y coordinates.

.show() method is used to show the message from buffer to display.

Unless you issue this , you cannot see the result.




The framebuffer class provides support for writing text using a simple 8×8 bitmap font. The pixel x,y positions are relative to the top-left of the 8×8 character, so positioning at 0,0 will give the absolute top left of the screen.

Here we have selected x= 30, y =30 POSITION.




To CLEAR the display we call   fill ( 0) method an then show()




To draw an illuminated  line. Origin  Origin (10,10) and final (80,20)

For illuminated , we use 1 at end





Draw an illuminated horizontal line. Origin (5, 30) width 100 pixels




Draw an illuminated filled rectangle. Origin (20,10) and width x height 60×40 pixels






The ssd1306 object itself  provides methods for direct control of the display component.

The display can be turned on and off using

oled.poweron() and oled.poweroff() respectively.



You can set the contrast for the display using

.contrast() passing in parameter c which is a value between 0 and 255. This controls the contrast between the foreground, active colour 1 and the background 0.


To invert the display, switching foreground and background colours, call .invert(1).

Calling .invert(0) will return the display to how it was originally. You can use this for display-flashing visual effects:


Download code and library module from here :

After testing OLED using interpreter , we shall write code on to EDITOR of Thonny Python.


Save this file as on Micro Python device.

Now you have 3 files on ESP32



Micropython executes on power on , then looks for to execute.

Click on F5 to execute and see the result on OLED display.

Video :