It's easy to use the Adafruit 128x64 OLED FeatherWing with CircuitPython and the Adafruit CircuitPython DisplayIO SH1107 module.Ā This module allows you to easily write CircuitPython code to control the display.
- Solder the Feather with female headers on top or stacking headers.
- Attach the OLED FeatherWing using the stacking method.
CircuitPython Installation of DisplayIO SH1107 Library
To use the 128x64 OLED FeatherWing with your Adafruit CircuitPython Feather board you'll need to install theĀ Adafruit CircuitPython DisplayIO SH1107 module on your board.
you'll need to install the necessary librariesĀ to use the hardware--carefully follow the steps to find and install these libraries fromĀ Adafruit's CircuitPython library bundle.Ā Our CircuitPython starter guide has a great page on how to install the library bundle.
Install the following libraries individually on your board:
- adafruit_displayio_sh1107
- adafruit_bus_device
To work through the code example below, you'll also need the following library:
- adafruit_display_text
Before continuing make sure your board's lib folder or root filesystem has the adafruit_displayio_sh1107.mpy, adafruit_bus_deviceĀ andĀ adafruit_display_text files and foldersĀ copied over.
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
#
# SPDX-License-Identifier: Unlicense
"""
Author: Mark Roberts (mdroberts1243) from Adafruit code
This test will initialize the display using displayio and draw a solid white
background, a smaller black rectangle, miscellaneous stuff and some white text.
"""
import board
import displayio
import terminalio
# can try import bitmap_label below for alternative
from adafruit_display_text import label
from i2cdisplaybus import I2CDisplayBus
import adafruit_displayio_sh1107
displayio.release_displays()
# oled_reset = board.D9
# Use for I2C
i2c = board.I2C() # uses board.SCL and board.SDA
# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller
display_bus = I2CDisplayBus(i2c, device_address=0x3C)
# SH1107 is vertically oriented 64x128
WIDTH = 128
HEIGHT = 64
BORDER = 2
display = adafruit_displayio_sh1107.SH1107(display_bus, width=WIDTH, height=HEIGHT)
# Make the display context
splash = displayio.Group()
display.root_group = splash
color_bitmap = displayio.Bitmap(WIDTH, HEIGHT, 1)
color_palette = displayio.Palette(1)
color_palette[0] = 0xFFFFFF # White
bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0)
splash.append(bg_sprite)
# Draw a smaller inner rectangle in black
inner_bitmap = displayio.Bitmap(WIDTH - BORDER * 2, HEIGHT - BORDER * 2, 1)
inner_palette = displayio.Palette(1)
inner_palette[0] = 0x000000 # Black
inner_sprite = displayio.TileGrid(inner_bitmap, pixel_shader=inner_palette, x=BORDER, y=BORDER)
splash.append(inner_sprite)
# Draw some white squares
sm_bitmap = displayio.Bitmap(8, 8, 1)
sm_square = displayio.TileGrid(sm_bitmap, pixel_shader=color_palette, x=58, y=17)
splash.append(sm_square)
med_bitmap = displayio.Bitmap(16, 16, 1)
med_square = displayio.TileGrid(med_bitmap, pixel_shader=color_palette, x=71, y=15)
splash.append(med_square)
lrg_bitmap = displayio.Bitmap(32, 32, 1)
lrg_square = displayio.TileGrid(lrg_bitmap, pixel_shader=color_palette, x=91, y=28)
splash.append(lrg_square)
# Draw some label text
text1 = "0123456789ABCDEF123456789AB" # overly long to see where it clips
text_area = label.Label(terminalio.FONT, text=text1, color=0xFFFFFF, x=8, y=8)
splash.append(text_area)
text2 = "SH1107"
text_area2 = label.Label(terminalio.FONT, text=text2, scale=2, color=0xFFFFFF, x=9, y=44)
splash.append(text_area2)
while True:
pass
That's all there is to using CircuitPython with your 128x64 OLED FeatherWing!
Page last edited January 21, 2025
Text editor powered by tinymce.