本文参考自:ESP32+st7789/ili9341运行LVGL例程,依赖ESP-IDF编译。有额外修改。
下载源码
LVGL 官方对 ESP32 系列有对应的驱动支持:源码地址
注意,不能简单 clone 或者下载源码压缩包,需要递归 clone,命令如下:
git clone --recurse-submodules https://github.com/lvgl/lv_port_esp32.git
这里如果 clone 不了,可能是 git 的代理问题。
如果使用了科学上网,可执行以下代码,设置后代理端口即可(端口号换成工具对应端口号)
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890
软硬件列表
硬件 |
---|
ESP32-S3 |
320*240 TFT 无触摸屏(ILI9341 驱动) |
杜邦线*8 |
软件 |
---|
ESP-IDF v4.4.1(例程库要求至少 v4.2,v4.4 实测可用) |
LVGL v7.9 |
引脚连接
ESP32-S3 有 4 组 SPI 接口,其中 SPI0 和 SPI1 用于访问 flash/PSRAM,SPI2 和 SPI3 可用于驱动屏幕(ESP32-S3 引脚参考大全 – 凌顺实验室)。这里我用的是 SPI3。
使用 SPI3 时不需要指定引脚,任意引脚皆可。
ESP32-S3 | 屏幕 | 含义 |
---|---|---|
IO7 | CS | 片选 |
IO15 | RESET | 重启 |
IO16 | DC | 数据/命令 |
IO17 | MOSI | 主机输出/从机输入 |
IO18 | SCK | 时钟信号 |
IO8 | LED (BL) | 背光控制 |
创建项目,添加组件
进行下一步之前需要先创建一个空项目,参考:在CLion中配置ESP-IDF
将源码中的 components
复制到项目中。
将源码的 main
的 main.c
复制并代替空项目的 main.c
。
在 CLion 中点击 Tool-Cmake-Reload Cmake Project
,重载一下项目。
配置驱动参数
- 打开 ESP-IDF CMD
- 用
cd
命令移动到项目目录 - 执行命令:
idf.py menuconfig
,打开图形化配置工具
配置驱动
- 依次进入
Component config -> LVGL TFT Display controller
,按下图配置
- 进一步进入
Display Pin Assignments
,按照引脚连接表,配置引脚,如下图所示。
配置 LVGL
- 按两次 ESC,进入
LVGL configuration
,按下图进行配置
选择例程
- 按一次 ESC,进入
lv_examples configuration
,可以选择运行哪个例程,这里就默认了,不用更改
保存退出
按 S 保存配置,按多次 ESC 退出 menuconfig
修改驱动文件
源码对 ESP32 和 ESP32-S2 进行了适配,而没有对 ESP32-S3 进行适配,因此需要进行少量修改(esp32-s3芯片esp-idf-v4.4-dev编译带LVGL工程出错 - ESP32 Forum)。
- 进入
components/hal/include/hal/spi_types.h
,将第 66 行修改为
#elif CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3
- 进入
components/lvgl_esp32_drivers/lvgl_helpers.c
,将第 212 行修改为
#elif defined (CONFIG_IDF_TARGET_ESP32S2) || defined (CONFIG_IDF_TARGET_ESP32S3)
- 在第二步的同一个文件中,在第 235 行添加以下代码
dma_channel = SPI_DMA_CH_AUTO;
编译,下载
在 ESP-IDF CMD 窗口中执行以下命令:
- 编译
idf.py build
- 下载,把 COMx 改成 ESP32-S3 在自己电脑上对应的端口号,可在设备管理器中查看到
idf.py -p COM7 flash