lvgl-micropython

lvgl-micropython — MicroPython C usermod for LVGL v9.

lvgl-micropython Native MicroPython C module integrating LVGL v9 graphics engine with displayif bus drivers across ESP32, RP2040, and i.MX RT targets.

Live Pure-Python Device

Build firmware with LVGL

MicroPython 1.29, one manifest line
git clone https://github.com/PyDevices/lvgl-micropython
git clone https://github.com/PyDevices/lvgl-bindings
git -C lvgl-bindings checkout "$(cat lvgl-micropython/LVGL_BINDINGS_COMMIT)"
git -C lvgl-bindings submodule update --init lvgl

# then add one line to the manifest your build already uses
include("/path/to/lvgl-micropython/manifest.py")

The binding is generated and committed in lvgl-bindings, so there is nothing to generate; the build stops if that checkout does not match the pin. The include brings in the lvgl module and freezes display_driver and fs_driver. Builds older than 1.29 and your own FROZEN_MANIFEST are in the README; micropython-pydevices has an lvgl.py preset that adds displayif.

Try this first

A button on a board that has a board_config
import display_driver  # sets up the display, input and a timer
import lvgl as lv

scr = lv.screen_active()
btn = lv.button(scr)
btn.center()
label = lv.label(btn)
label.set_text("Hello MicroPython LVGL!")

Read more

Depth lives in the repository

Newcomer's guide

The generated-bindings boundary, the runtime entry point, and the MicroPython integration map.

lvgl-bindings

Where the binding is generated, once for all three interpreters.

displayif

The bus drivers LVGL draws through on real panels.

pydevices

The board_config that display_driver reads.