How to Use an OLED Display With Raspberry Pi Pico (Updated)

OLED Display With Raspberry Pi Pico
(Image credit: Tom's Hardware)

Update April 23 2021:

We've expanded this how to and it now includes sections on drawing shapes and objects to the display, how to convert bitmap images for OLED displays and how to animate images.

Latest Videos FromTom's Hardware
TOPICS
Les Pounder
Associate Editor

Les Pounder is an associate editor at Tom's Hardware. He is a creative technologist and for seven years has created projects to educate and inspire minds both young and old. He has worked with the Raspberry Pi Foundation to write and deliver their teacher training program "Picademy".

  • WalexNET
    Hi,
    I'm trying to copy your example, but I can't get the oled display to work, I've tried several libraries, including the one you propose, but always in all cases it throws me this error:

    The error is thrown at me whenever I try to instantiate the SSD1306_I2C object

    This is my simple code

    from machine import Pin, I2C
    from time import sleep_ms
    from ssd1306 import SSD1306_I2C

    import framebuf

    ANCHO = 128
    ALTO = 64

    PinSDA = Pin(0)
    PinSCL = Pin(1)
    Address = 0x3C

    i2c =I2C(0, sda=PinSDA, scl=PinSCL, freq=400000)
    sleep_ms(100)

    oled = SSD1306_I2C(ANCHO, ALTO, i2c)
    This is the error that it returns to me

    >>> %Run -c $EDITOR_CONTENT
    Traceback (most recent call last):
    File "<stdin>", line 17, in <module>
    File "/lib/ssd1306.py", line 110, in __init__
    File "/lib/ssd1306.py", line 36, in __init__
    File "/lib/ssd1306.py", line 73, in init_display
    File "/lib/ssd1306.py", line 101, in show
    File "/lib/ssd1306.py", line 119, in write_data
    OSError: EIO
    >>> Could you help me by indicating what the problem would be?
    From already thank you very much
    Reply
  • Kananaskis
    I had the same problem and error message. I think there may have been some problem with the ssd1306.py program that was downloaded from PyPl
    I had downloaded that program from the micropython website and didn't have an issue.
    When I replaced it with the one from PyPl the errors showed up.

    My question is how can we enlarge the text?
    I want to display temperature and want the 128 x 64 OLED to display 2 large numbers so that it is easier to read.
    I'm not sure how to change the font size in this software?
    Thanks,
    Robin
    Reply
  • Rob Latour
    When I try to install the micropython-ssd1306 library I get the following error:

    ERROR: Could not find a version that satisfies the requirement micropython-ssd1306
    ERROR: No matching distribution found for micropython-ssd1306
    Process returned with code 1

    any idea on how to fix this?
    Reply
  • vikingsraven
    HI, thanks for the tutorial.
    The i2c port in micropython needs a slight delay before it sends data, to fix the
    OSError: EIO
    import utime , then add utime.sleep(100) after the i2c initialisation i2c = I2C...
    Reply
  • brokian
    Admin said:
    OLED displays are a cost effective way to add small text output to a project. They are super small but with a bright and clear display.

    How to Use an OLED Display With Raspberry Pi Pico : Read more
    Thanks for your example, it worked really well for me with some simple changes to work with the SPI version of the display that I have.

    from machine import SPI, Pin
    from ssd1306 import SSD1306_SPI
    import framebuf

    # Assign chip select (CS) pin
    cs = machine.Pin(16, machine.Pin.OUT)
    dc = machine.Pin(20, machine.Pin.OUT)
    res = machine.Pin(21, machine.Pin.OUT)

    # Initialize SPI
    spi = machine.SPI(0,
    baudrate=10000000,
    polarity=1,
    phase=1,
    bits=8,
    firstbit=machine.SPI.MSB,
    sck=machine.Pin(18),
    mosi=machine.Pin(19))

    oled = SSD1306_SPI(128, 64, spi, dc, res, cs)

    while True:
    .............as per your example.
    Reply
  • mgh128
    Many thanks for this very helpful tutorial. Just one remark - that the photo at https://cdn.mos.cms.futurecdn.net/bExDKgAi9dCiAA9j9wqQqj-1200-80.jpg (at the end of step 6) shows the GND and VCC labels swapped relative to such OLED modules (and also contradicting the wiring diagrams elsewhere in the tutorial), so to avoid confusion and potential damage to displays, it could be a good idea to update that photo to show the sequence 1=GDN, 2=VCC, 3=SCK, 4=SDA as shown correctly in the Fritzing wiring diagram earlier in the tutorial and also in the other photos and the initial video in this tutorial.
    Reply