5寸触摸屏ESP32-S3开发板Micropython+LVGL代码分享

文摘   2024-11-09 00:01   湖南  

原视频代码未经优化,触摸有些卡顿,这篇文章提供了优化后的完整代码,开发板固件参考文章《LVGL_MicroPython:在MicroPython上使用LVGL图形库一个第三方开源项目》。开发板为优奕视界5inch触摸屏esp32-s3开发板,屏幕分辨率480*800,屏幕驱动IC为ST7262,触摸驱动为GT911。

对视频中展示的代码进行了部分优化,这里分享给大家:

  • • 提高了触摸驱动I2C频率

  • • 减小了主循环中延迟时间

import lvgl as lv  # 导入 LVGL 库
import lcd_bus  # 导入 LCD 总线库
import rgb_display  # 导入 RGB 显示库
import i2c  # 导入 I2C 通信库
import gt911  # 导入 GT911 触摸屏驱动库
import time  # 导入时间库

# 定义显示屏参数
_WIDTH = 800  # 显示屏宽度
_HEIGHT = 480  # 显示屏高度

# 定义 RGB 总线配置
rgb_bus = lcd_bus.RGBBus(  # 创建 RGB 总线对象
    hsync=39,  # 水平同步信号引脚
    vsync=41,  # 垂直同步信号引脚
    de=40,  # 数据使能信号引脚
    disp=-1,  # 显示屏选择引脚(未使用)
    pclk=42,  # 像素时钟信号引脚
    data0=8, data1=3, data2=46, data3=9, data4=1,  # 数据信号引脚
    data5=5, data6=6, data7=7, data8=15, data9=16, data10=4,
    data11=45, data12=48, data13=47, data14=21, data15=14,
    freq=12500000,  # 像素时钟频率
    hsync_front_porch=8,  # 水平同步信号前沿脉冲宽度
    hsync_pulse_width=4,  # 水平同步信号脉冲宽度
    hsync_back_porch=8,  # 水平同步信号后沿脉冲宽度
    hsync_idle_low=False,  # 水平同步信号空闲状态为低电平
    vsync_front_porch=8,  # 垂直同步信号前沿脉冲宽度
    vsync_pulse_width=4,  # 垂直同步信号脉冲宽度
    vsync_back_porch=8,  # 垂直同步信号后沿脉冲宽度
)

# 分配帧缓冲区
_BUF1 = rgb_bus.allocate_framebuffer(_WIDTH * _HEIGHT * 2, lcd_bus.MEMORY_SPIRAM)  # 分配第一个帧缓冲区,使用 SPIRAM 内存
_BUF2 = rgb_bus.allocate_framebuffer(_WIDTH * _HEIGHT * 2, lcd_bus.MEMORY_SPIRAM)  # 分配第二个帧缓冲区,使用 SPIRAM 内存

# 初始化 RGB 显示屏
display = rgb_display.RGBDisplay(  # 创建 RGB 显示屏对象
    data_bus=rgb_bus,  # 设置数据总线
    display_width=_WIDTH,  # 设置显示屏宽度
    display_height=_HEIGHT,  # 设置显示屏高度
    frame_buffer1=_BUF1,  # 设置第一个帧缓冲区
    frame_buffer2=_BUF2,  # 设置第二个帧缓冲区
    backlight_pin=2,  # 设置背光控制引脚
    color_space=lv.COLOR_FORMAT.RGB565,  # 设置颜色空间为 RGB565
    rgb565_byte_swap=False,  # 设置 RGB565 字节顺序为正常
)
display.set_power(True)  # 打开显示屏电源
display.set_backlight(5)  # 设置背光亮度

# 初始化 LVGL
lv.init()  # 初始化 LVGL 库

# 创建屏幕和控件
scrn = lv.screen_active()  # 获取当前活动屏幕
lslider = lv.slider(scrn)  # 创建一个水平滑块
lslider.set_style_size(40480, lv.PART.MAIN)  # 设置滑块大小
lslider.align(lv.ALIGN.TOP_LEFT, 500)  # 将滑块放置在屏幕左上角
rslider = lv.slider(scrn)  # 创建一个垂直滑块
rslider.set_style_size(40480, lv.PART.MAIN)  # 设置滑块大小
rslider.align(lv.ALIGN.TOP_RIGHT, -500)  # 将滑块放置在屏幕右上角
btn = lv.button(scrn)  # 创建一个按钮
btn.align(lv.ALIGN.CENTER, 00)  # 将按钮放置在屏幕中央
label = lv.label(btn)  # 创建一个标签
label.set_text('Hello World!')  # 设置标签文本
arc2 = lv.arc(scrn)  # 创建一个圆弧 仅作展示
arc2.align(lv.ALIGN.CENTER, 00)  # 将圆弧放置在屏幕中央
arc2.set_end_angle(135)  # 设置圆弧结束角度
arc2.set_size(300300)  # 设置圆弧大小

# 初始化触摸驱动
i2c_bus = i2c.I2CBus(scl=20, sda=19, freq=400000, host=None, use_locks=False)  # 创建 I2C 总线对象
touch_driver = gt911.GT911(i2c_bus=i2c_bus, reset_pin=None, interrupt_pin=None, touch_cal=None)  # 创建 GT911 触摸屏驱动对象

# 主循环
while True:
    # 更新 LVGL
    time.sleep_ms(1)  # 延迟 1 毫秒
    lv.tick_inc(1)  # 更新 LVGL 时间
    lv.task_handler()  # 处理 LVGL 任务
   

DIY太阳系
专注分享嵌入式系统、电子产品diy,iot、机器人等相关知识!
 最新文章