finds.dev← search

// the find

russhughes/st7789_mpy

★ 716 · Python · NOASSERTION · updated Apr 2026

Fast MicroPython driver for ST7789 display module written in C

A MicroPython driver for ST7789 (and compatible ST7735/ILI9341) SPI displays, written in C as a native module for performance. It covers the full stack from raw pixels to bitmap fonts, TrueType-derived fonts, Hershey vector fonts, JPG/PNG decoding, and polygon rendering — all on microcontrollers with 256KB–8MB of RAM. The audience is hobbyists and embedded developers building display UIs on ESP32, RP2040, or pyboard hardware.

The C implementation keeps SPI throughput high enough for animation — the roids.py asteroid demo on a T-Display is genuinely smooth. Pre-compiled firmware binaries for a dozen common boards mean you can be running in minutes without setting up the ESP-IDF toolchain. The `cfg_helper.py` diagnostic tool is a practical touch: it lets you determine color order and pixel offsets empirically rather than hunting through datasheets. The three font systems (bitmap, TrueType-converted, Hershey vector) give you real options depending on memory constraints.

The pre-compiled firmware is pinned to MicroPython v1.20.0 / ESP-IDF v4.4.4 — both several releases behind — so if your project requires a current MicroPython build you're compiling from source. PNG rendering has no frame buffer, so transparency compositing isn't supported; masked PNGs work but draw segment-by-segment and are noticeably slow. The SLOW JPG mode (MCU-by-MCU decoding for images that don't fit in RAM) is honest about being slow but there's no guidance on what frame rates to realistically expect. Scrolling setup requires you to manually calculate `tfa + height + bfa = 320` with display-specific offsets that aren't always documented, which means trial and error for any panel not already in the examples.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →