Using the 3.5" 320x480 Color TFT FeatherWing with CircuitPython involves plugging the FeatherWing into to your CircuitPython-compatible Feather microcontroller. Then, you load the code and necessary libraries onto your microcontroller.
This page uses the Feather RP2040 for demonstrating CircuitPython usage. You can use the same concepts to get going with any classic Feather board.
Plug your Feather into the FeatherWing. The Feather USB port will be above the FeatherWing microSD card slot.
CircuitPython Usage
To use with CircuitPython, you need to first install the necessary libraries, and their dependencies, into the lib folder on your CIRCUITPY drive. Then you need to update code.py with the example script.
Thankfully, we can do this in one go. In the example below, click the Download Project Bundle button below to download the necessary libraries and the code.py file in a zip file. Extract the contents of the zip file.
Connect the microcontroller to your computer via a known-good USB power+data cable. The board shows up as a thumb drive named CIRCUITPY. Copy the entire lib folder and the code.py file to your CIRCUITPY drive.
Your CIRCUITPY/lib folder should contain the following folders and files:
- /adafruit_bus_device
- /adafruit_register
- adafruit_ft5336.mpy
- adafruit_hx8357.mpy
Once you have copied over the necessary folders and files, your CIRCUITPY drive should resemble the following:
# SPDX-FileCopyrightText: 2023 Liz Clark for Adafruit Industries
# SPDX-License-Identifier: MIT
"""
Touch paint example for HX83570 + FT5336 TFT Breakout
"""
import board
import displayio
import fourwire
from adafruit_hx8357 import HX8357
import adafruit_ft5336
displayio.release_displays()
spi = board.SPI()
# for eyespi bff
# tft_cs = board.TX
# tft_dc = board.RX
# else:
tft_cs = board.D9
tft_dc = board.D10
display_bus = fourwire.FourWire(spi, command=tft_dc, chip_select=tft_cs)
# display is rotated to align x, y with touch screen x, y
display = HX8357(display_bus, width=320, height=480, rotation=90)
i2c = board.I2C() # uses board.SCL and board.SDA
touch = adafruit_ft5336.Adafruit_FT5336(i2c)
pixel_size = 10
palette_width = 45
palette_height = 320 // 8
splash = displayio.Group()
display.root_group = splash
bitmap = displayio.Bitmap(320, 480, 8)
color_palette = displayio.Palette(8)
color_palette[0] = 0x000000
color_palette[1] = 0xFF0000
color_palette[2] = 0xFFFF00
color_palette[3] = 0x00FF00
color_palette[4] = 0x00FFFF
color_palette[5] = 0x0000FF
color_palette[6] = 0xFF00FF
color_palette[7] = 0xFFFFFF
tile_grid = displayio.TileGrid(bitmap, pixel_shader=color_palette)
# tilegrid is flipped to align x, y with touch screen x, y
tile_grid.flip_y = True
tile_grid.flip_x = True
splash.append(tile_grid)
display.root_group = splash
current_color = 7
for i in range(palette_width):
for j in range(palette_height):
bitmap[j + palette_height, i] = 1
bitmap[j + palette_height * 2, i] = 2
bitmap[j + palette_height * 3, i] = 3
bitmap[j + palette_height * 4, i] = 4
bitmap[j + palette_height * 5, i] = 5
bitmap[j + palette_height * 6, i] = 6
bitmap[j + palette_height * 7, i] = 0
while True:
if touch.touched:
try:
for t in touch.points:
x = t[0]
y = t[1]
print(x, y)
if not 0 <= x < display.width or not 0 <= y < display.height:
continue # Skip out of bounds touches
if y < palette_width:
current_color = bitmap[x, y]
else:
for i in range(pixel_size):
for j in range(pixel_size):
x_pixel = x - (pixel_size // 2) + i
y_pixel = y - (pixel_size // 2) + j
if 0 <= x_pixel < display.width and 0 <= y_pixel < display.height:
bitmap[x_pixel, y_pixel] = current_color
except RuntimeError:
pass
Once everything is copied over, on your display, you should the touch paint example begin to run. You can touch the different colors on the side of the TFT and doodle on the screen.
Page last edited January 21, 2025
Text editor powered by tinymce.