lvgl-micropython ยท moved

lvgl-micropython has moved into omnipython-lvgl.

lvgl-micropython Moved to omnipython-lvgl as its MicroPython port: build it into your firmware from the same repository that holds the generator. Your code doesn't change. The old repository is archived.

omnipython-lvgl Build MicroPython with LVGL Install Archived repo

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 fs_driver; display_driver, which wires LVGL to a board, comes with pydevices. 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 pydevices and 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

display_driver, and the board_config it reads.