ESP32+micropython+lvgl小黄版设置单独xpt2046触控

bilibili-视频演示

点击本文字,打开哔哩哔哩APP

NO.1
本期内容

2.8寸触控屏和开发板

使用MicroPython单独设置屏幕xpt2046触控

img

NO.2
micropython-ili9341

github地址

https://github.com/rdagger/micropython-ili9341

MicroPython ILI9341Display & XPT2046 触摸屏驱动程序

img

NO.3
xpt2046触控

本文仍然使用lv_micropyhon的ili9431驱动画图形化元素

但是单独使用micropython-ili9341使用xpt2046设置屏幕触控(没有lvgl联动)

参考文档

https://github.com/rdagger/micropython-ili9341/blob/master/demo_touch.py

核心代码

from xpt2046 import Touchfrom machine import idle, Pin, SPIspi2 = SPI(2, baudrate=1000000, sck=Pin(18), mosi=Pin(23), miso=Pin(19))touch = Touch(spi2, cs=Pin(5), int_pin=Pin(0),                           int_handler=self.touchscreen_press)
NO.4
本文代码

前提条件

  1. 刷入MicroPython+LVGL固件(ESP32)

  2. micropython-ili9341依赖文件xpt2046.py放入ESP32

  3. 使用本文的小黄版(如果了解接线引脚,可以使用自己的开发板和屏幕)

    代码

import lvgl as lvimport timefrom espidf import VSPI_HOST,HSPI_HOSTfrom ili9XXX import ili9341import fs_driverfrom machine import Pin, SPIfrom xpt2046 import Touch# 屏幕宽高WIDTH = 320HEIGHT = 240# # 创建显示屏对象disp = ili9341(miso=12, mosi=13, clk=14, cs=15, dc=2, rst=12, power=-1, backlight=21, backlight_on=1, power_on=1, rot=0x20,         spihost=HSPI_HOST, mhz=60, factor=16, hybrid=True, width=WIDTH, height=HEIGHT,         invert=False, double_buffer=True, half_duplex=False, initialize=True)def test( x, y):    print("屏幕中断处理程序", x, y)spi2 = SPI(2, baudrate=1000000, sck=Pin(25), mosi=Pin(32), miso=Pin(39))touch=Touch(spi2,cs=Pin(33), int_pin=Pin(36),int_handler=test)# # 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()class Event_1():    def __init__(self):        self.cnt = 1        #        # Add click event to a button        #        btn = lv.btn(lv.scr_act())        btn.set_size(100, 50)        btn.center()        btn.add_event(self.event_cb, lv.EVENT.CLICKED, None)        label = lv.label(btn)        label.set_text("Click me!")        label.center()    def event_cb(self,e):        print("Clicked")        btn = e.get_target_obj()        label = btn.get_child(0)        label.set_text(str(self.cnt))        self.cnt += 1evt1 = Event_1()
NO.5
Tips

本文固件lvgl为master分支

本文触控和lvgl没有联动效果,仅用于记录触控点击屏幕,适用于一些简单的开关等图形化元素

往期文章

2.8寸触控屏和ESP32使用ESP_IDF和C语言编译LVGL移植写自定义可点击按钮

END