使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程

一、目的


        这一节我们学习如何运用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏停止LVGL图形化编程:控件显现。


二、环境


        ESP32 + ILI9341 3.2寸TFT-LCD触摸屏+ Thonny IDE + 几根杜邦线


接线办法:见前面文章。


三、滑杆代码


import lvgl as lv

import time

from espidf import VSPI_HOST

from ili9XXX import ili9341

from xpt2046 import xpt2046

import fs_driver

# ------------------------------ 屏幕初始化操作 --start------------------------

# 屏幕宽高

WIDTH = 240

HEIGHT = 320

# 创立显现屏对象

disp = ili9341(miso=19, mosi=23, clk=18, cs=5, dc=26, rst=27, power=14, backlight=-1, backlight_on=0, power_on=0, rot=0x80,

        spihost=VSPI_HOST, mhz=60, factor=16, hybrid=True, width=WIDTH, height=HEIGHT,

        invert=False, double_buffer=True, half_duplex=False, initialize=True)

# 创立触摸屏对象

touch = xpt2046(cs=25, spihost=VSPI_HOST, mosi=-1, miso=-1, clk=-1, cal_y0 = 423, cal_y1=3948)  # 触摸屏芯片型号xpt2046

# ------------------------------ 屏幕初始化操作 --stop------------------------

# 1. 创立显现screen对象。将需求显现的组件添加到这个screen才干显现

scr = lv.obj()  # scr====> screen 屏幕

fs_drv = lv.fs_drv_t()

fs_driver.fs_register(fs_drv, 'S')

scr = lv.scr_act()

scr.clean()

# 2. 封装要显现的组件

class MyWidget():

    def __init__(self, scr):

        # 创立滑块slider组件

        self.slider = lv.slider(scr)

        self.slider.set_width(180)  # 设置滑块的长度

        # self.slider.set_range(10, 50)  # 默许值是0-100

        self.slider.center()  # 在窗口的中间位置

        self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加事情的回调函数

        # 创立一个标签label

        self.label = lv.label(scr)

        self.label.set_text("0")  # 默许值

        self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -15)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变

    def slider_event_cb(self, evt):

        slider = evt.get_target()

        # 修正label的值

        self.label.set_text(str(slider.get_value()))

# 3. 创立要显现的组件

MyWidget(scr)

# 4. 显现screen对象中的内容

lv.scr_load(scr)

# ------------------------------ 看门狗,用来重启ESP32设备 --start------------------------

try:

    from machine import WDT

    wdt = WDT(timeout=1000)  # enable it with a timeout of 2s

    print("提示: 按下键盘Ctrl+C键完毕程序")

    while True:

        wdt.feed()

        time.sleep(0.9)

except KeyboardInterrupt as ret:

    print("程序中止运转,ESP32曾经重启...")

    time.sleep(10)