Tutorial: MicroPython + LVGL for ESP32-C6-LCD-1.47
2025-04-14
This is the tutorial to compile micropython with LVGL and burn it into the board
Steps:
git clone https://github.com/lvgl-micropython/lvgl_micropython.git
cd lvgl_micropython
python3 make.py esp32 clean \
--flash-size=4 \
--enable-jtag-repl=y \
BOARD=ESP32_GENERIC_C6 \
DISPLAY=st7789
esptool.py erase_flash
esptool.py --baud 460800 write_flash 0 build/lvgl_micropy_ESP32_GENERIC_C6-4.bin
If success, you should see this

Open thonny and run
import lcd_bus
from micropython import const
import machine
# display settings
_WIDTH = const(172)
_HEIGHT = const(320)
_BL = const(22)
_RST = const(21)
_DC = const(15)
_MOSI = const(6)
_MISO = const(5)
_SCK = const(7)
_HOST = const(1) # SPI2
_LCD_CS = const(14)
_LCD_FREQ = const(80000000)
_OFFSET_X = const(34)
_OFFSET_Y = const(0)
print('s1');
spi_bus = machine.SPI.Bus(
host=_HOST,
mosi=_MOSI,
miso=_MISO,
sck=_SCK
)
print('s2');
display_bus = lcd_bus.SPIBus(
spi_bus=spi_bus,
freq=_LCD_FREQ,
dc=_DC,
cs=_LCD_CS,
)
# we are going to let the display driver sort out the best freame buffer size and where to allocate it to.
# fb1 = display_bus.allocate_framebuffer(_BUFFER_SIZE, lcd_bus.MEMORY_INTERNAL | lcd_bus.MEMORY_DMA)
# fb2 = display_bus.allocate_framebuffer(_BUFFER_SIZE, lcd_bus.MEMORY_INTERNAL | lcd_bus.MEMORY_DMA)
import st7789 # NOQA
import lvgl as lv # NOQA
print('s3');
display = st7789.ST7789(
data_bus=display_bus,
display_width=_WIDTH,
display_height=_HEIGHT,
backlight_pin=_BL,
reset_pin=_RST,
reset_state=st7789.STATE_LOW,
backlight_on_state=st7789.STATE_PWM,
color_space=lv.COLOR_FORMAT.RGB565,
color_byte_order=st7789.BYTE_ORDER_RGB,
rgb565_byte_swap=True,
offset_x=_OFFSET_X,
offset_y=_OFFSET_Y,
)
print('s4');
import task_handler # NOQA
display.set_power(True)
display.init()
display.set_backlight(100)
th = task_handler.TaskHandler()
scrn = lv.screen_active()
scrn.set_style_bg_color(lv.color_hex(0x000000), 0)
label = lv.label(scrn)
label.set_text('HELLO WORLD!')
label.align(lv.ALIGN.CENTER, 0, 0)
print('end');
Then you will see

Links you should read
https://www.waveshare.com/wiki/ESP32-C6-LCD-1.47
https://github.com/lvgl-micropython/lvgl_micropython
Remark:
This program is a little bit crazy, first time you run it will success, but if you run second time, it has error, see below. You need to press the rst button on board before rerun

