首页
学习
活动
专区
圈层
工具
发布

简单三步编译一个LVGL-Micropython固件

之前我们发过几篇关于编译LVGL Micropython固件的笔记(点击查看),该方法基于LVGL官方github(https://github.com/lvgl/lv_micropython),通过LVGL binding for MicroPython进行绑定,需要搭建ESP-IDF开发环境,切换lv_micropython版本,过程相对比较繁琐。

最近发现,GitHub上Kevin Schlosser大佬开发的项目lvgl_micropython已较为成熟(行空板K10也是基于此项目,点击查看)。该项目改变了绑定的设计,并提供了一个Python脚本来处理绑定的构建工作,只需四条命令即可。

项目地址:https://github.com/lvgl-micropython/lvgl_micropython

一、编译固件编译环境:ubuntu22.04第一步,安装依赖包

sudo apt-get install python3 python3-pip python3-venv build-essential cmake ninja-build git libusb-1.0-0-dev

第二步,克隆lvgl_micropython

git clone https://github.com/lvgl-micropython/lvgl_micropythoncd lvgl_micropython

第三步,编译

python3 make.py {build target} {build options} {target options} {global options}

{build target}:指定编译目标平台。可选值包括:esp32、stm32、rp2等。

{build options}:可选的构建选项。选项只有:clean:删除构建目录,用于清理之前的构建残留。

{{model/variant} {model/variant specific options}}:指定目标平台的型号/变体及其特定选项。如:esp32可以指定BOARD=ESP32_GENERIC_S3。

{global options}:全局选项。常见选项包括:DISPLAY={ic model or path}:指定显示驱动型号或路径。INDEV={ic model or path}:指定输入设备驱动型号或路径。

以实战派ESP32C3为例:

python3 make.py esp32 clean BOARD=ESP32_GENERIC_C3 --flash-size=8 DISPLAY=st7789 INDEV=ft6x36

编译时间取决于网络,如果因为网络原因导致编译失败,重新执行以上命令即可。

如果是编译ESP32C3开发板,编译过程会报错,需要将ESP-IDF降为5.2.2版本。(ESP32或ESP32S3忽略以下步骤)

ESP-IDF版本切换:

cd lib/esp-idfgit checkout v5.2.2

将ESP-IDF的版本切换为5.2.2。

执行第三步的命令,重新编译。

如果有报错,可将错误信息发AI解决。

二、烧录测试

参考官方示例运行第一个lvgl程序:

import lcd_busfrom micropython import constimport machineimport lcd_utils

# 定义显示屏的参数_WIDTH = const(240)_HEIGHT = const(320)_BL = const(2)_RST = const(-1)_DC = const(6)

_MOSI = const(5)_MISO = const(-1)_SCK = const(3)_HOST = const(1) # SPI2

# 设置SPI通信的模式(polarity=1, phase=0)spi_mode = lcd_utils.spi_polarity_phase_to_mode(1, 0)

_LCD_CS = const(4)_LCD_FREQ = const(40000000)

# 创建SPI总线对象spi_bus = machine.SPI.Bus(   host=_HOST,   mosi=_MOSI,   miso=_MISO,   sck=_SCK,   )

# 创建显示屏的SPI通信对象display_bus = lcd_bus.SPIBus(   spi_bus=spi_bus,   freq=_LCD_FREQ,   dc=_DC,   cs=_LCD_CS,   spi_mode=spi_mode)

import st7789import lvgl as lv

# 创建显示屏对象display = st7789.ST7789(   data_bus=display_bus,   display_width=_WIDTH,   display_height=_HEIGHT,   backlight_pin=_BL,   color_space=lv.COLOR_FORMAT.RGB565,   color_byte_order=st7789.BYTE_ORDER_BGR,   rgb565_byte_swap=True,)

import i2cimport task_handlerimport ft6x36

# 初始化显示屏display.init()

# 定义触摸屏的I2C通信参数i2c_bus = i2c.I2C.Bus(host=0, scl=1, sda=0, freq=400000, use_locks=False)touch_dev = i2c.I2C.Device(bus=i2c_bus, dev_id=0x38, reg_bits=ft6x36.BITS)

# 创建触摸屏设备对象indev = ft6x36.FT6x36(touch_dev)

# 如果未校准,则进行校准#indev.calibrate()#indev._cal.mirrorX = False#indev._cal.mirrorY = True#indev._cal.save()

# 启用输入优先级indev.enable_input_priority()

# 旋转显示display.set_rotation(lv.DISPLAY_ROTATION._90)

# 打开屏幕背光(实战派ESP32C3是相反的)display.set_backlight(0)

# 创建一个任务处理器实例th = task_handler.TaskHandler()

scrn = lv.screen_active()# 获取当前激活的屏幕对象scrn.set_style_bg_color(lv.color_hex(0x000000), 0)# 设置屏幕的背景颜色为黑色slider = lv.slider(scrn)# 创建一个滑块slider.set_size(300, 50)# 设置滑块的大小为宽度300,高50slider.center()# 将滑块居中显示

label = lv.label(scrn)# 创建一个标签label.set_text('HELLO LVGL_MICROPYTHON!')# 标签内容label.align(lv.ALIGN.CENTER, 0, -50)# 将标签对齐到屏幕中心,并向上偏移50

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OjviLSaSKnXyqAzpbDleOtQw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券