esp32s3移植LVGL8.3.6,并在触摸屏上运行

一、基本介绍

本着arduino框架下库多好用的有点,我选择用esp32s3来学习LVGL。移植过程碰了不少壁,还好一路上有大佬帮助,最后是移植成功了这个环境,所以打算以此片博客来感谢大佬们的帮助,同时希望能够帮助到其他朋友。接下来我将从零开始一步步移植LVGL环境,并且成功实现屏幕触摸功能。

硬件配置方面:

触摸屏:屏幕驱动ST7796,触摸驱动:FT6X36。

二、LVGL移植与测试

2.1 移植TFT_eSPI库

编程环境使用的是VSCode+PlatformIO(一下简述pio),网上的安装教程很多这里就不再赘述。

图2.1 PlatformIO IDE

利用pio安装好并成功创建工程后,在pio home的libraries中搜索tft_espi,这是用来调用显示屏的驱动库,也是在esp32s3上使用lvgl的前提。

图2.2 tft_espi库

点进去后在这个界面选择版本2.5.43,并点击“Add to Project”,选择一个自己创建好的工程并添加

图2.3 添加tft_espi库

接下来准备修改库文件来驱动自己的SPI屏幕,通过pio安装的依赖库会在文件夹.pio\libdeps\esp32-s3-devkitc-1(后面这个是创建工程是选择的芯片型号)。接下来找到TFT_eSPI库文件,找到User_Setup.h文件,更改自己的驱动、分辨率和引脚分配

图2.4 更改驱动芯片型号

图2.5 修改分辨率

图2.6 分配引脚

接下来,有个非常关键的点,这个是我初用pio踩过最大最深的坑!使用tft_espi驱动屏幕时,esp32s3一直在重启(通过串口监视器可以查看),但是,非常神奇的是,在arduino ide上安装tft_espi库并驱动时,是正常的,这个问题从9月份开始困扰到国庆后,这段时间就只能用arduino ide来学习lvgl,用过的朋友就知道arduino感人的编译时间。到网上找了好多资料但是没用之后,我向AI求助,没想到真的解决了!解决方法见下图

图2.7 tft_espi库与esp32-s3不兼容的解决方法

找到工程文件夹下面的platformio.ini文件,将platform = espressif32修改成platform = espressif32 @ 6.5.0

[env:esp32-s3-devkitc-1]
platform = espressif32 @ 6.5.0
board = esp32-s3-devkitc-1
framework = arduino
lib_deps = bodmer/TFT_eSPI@^2.5.43

找到文件夹中的例程,复制粘贴到main.cpp中

图2.8 例程

看到success就代表编译成功了,然后连接上esp32s3点击编译右边的上传(Upload)即可

图2.9 编译例程

椭圆显示出来了就代表驱动成功了(可喜可贺可喜可贺),那么接下来正式开始移植LVGL

图2.10 运行例程

2.2 移植

<think>好的,用户想查找关于ESP32驱动触摸屏的教程或示例代码。首先,我需要回顾已有的引用资料,看看有没有相关的内容。引用1、2、4提到了ESP32-S3结合LVGL和XPT2046或CST816触摸芯片的示例代码,还有资源下载地址。引用3是关于ESP32触摸TFT驱动的开发指南,提到了环境配置。引用5提供了GT911触摸芯片的初始化代码示例。 接下来,用户可能需要具体的步骤和资源链接。需要将这些信息组织起来,分点说明不同的驱动方案,包括芯片型号、对应的库和示例代码地址。同时,要提到环境配置,比如Arduino或PlatformIO,以及验证步骤。还要注意引用对应的参考资料,确保用户能追溯到来源。 用户可能对如何选择不同的触摸芯片有疑问,所以需要说明不同方案的适用场景,比如XPT2046是电阻屏,CST816是电容屏。另外,示例代码的下载地址要准确,可能需要检查引用中的项目地址是否正确。最后,生成相关问题时要考虑用户后续可能遇到的问题,比如开发环境配置、触摸屏校准、LVGL集成等。</think>以下是关于ESP32驱动触摸屏的教程和示例代码的详细说明: ### 一、ESP32触屏驱动核心方案 目前主流的ESP32触屏驱动方案主要基于以下两种技术路线: 1. **LVGL图形库+触摸驱动芯片** - 典型组合:$XPT2046$(电阻屏)或$CST816$(电容屏)+$ST7789$(显示驱动) - 示例代码包含触摸初始化、坐标映射、事件回调等核心功能[^1][^2] 2. **专用触摸IC驱动** - 如$GT911$电容触摸芯片,需通过I2C接口通信 - 需要配置中断引脚和寄存器参数[^5] ### 二、开发环境配置 根据引用资料,推荐以下开发环境: ```python # PlatformIO环境配置示例 [env:esp32s3-devkitc-1] platform = espressif32 board = esp32s3-devkitc-1 framework = arduino lib_deps = lvgl/lvgl@^8.3.6 adafruit/Adafruit ST7789@^1.6.0 ``` 开发工具建议选择Arduino IDE或PlatformIO[^3] ### 三、关键代码实现 以XPT2046电阻屏为例(引用[1]): ```c // 触摸屏初始化 void xpt2046_init() { spi_bus_config_t buscfg = { .miso_io_num = GPIO_NUM_13, .mosi_io_num = GPIO_NUM_11, .sclk_io_num = GPIO_NUM_12, .quadwp_io_num = -1, .quadhd_io_num = -1 }; spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO); } // 触摸事件处理 static void touch_event_cb(lv_indev_drv_t * drv, lv_indev_data_t * data) { uint16_t x, y; if(xpt2046_get_touch(&x, &y)) { data->point.x = x; data->point.y = y; data->state = LV_INDEV_STATE_PR; } else { data->state = LV_INDEV_STATE_REL; } } ``` ### 四、验证与调试 烧录后可通过以下方法验证: 1. 使用逻辑分析仪检查SPI/I2C信号 2. 通过串口打印触摸坐标数据 3. LVGL内置的触摸测试工具(如`lv_demo_music`)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值