试用 LVGL Pro,一套完整的工具包,助您高效构建、测试、分享和交付 UI!
LVGL
教程

ESP32 + LVGL 快速入门指南

在 15 分钟内让 LVGL 在 ESP32 上运行。了解 SPI 优化、DMA 以及如何在 320x240 显示屏上实现 30 FPS。

加博尔·基什-瓦莫希加博尔·基什-瓦莫希10 分钟阅读

Espressif 宣布他们在 ESP32 芯片上官方支持 LVGL。为基于 ESP32 的 IoT 设备添加 GUI 比以往任何时候都容易。我在 15 分钟内就让它运行起来了,所以真的值得一试!我将向您展示两种方法,包括一个我在 320x240 显示屏上使用 ESP32 实现 30 FPS 的项目。

以下是 Espressif 创建的一些示例:

ESP32 上使用 LVGL 的音频播放器示例
ESP32 上使用 LVGL 的音频播放器示例
ESP32 上使用 LVGL 的咖啡机和恒温器示例
ESP32 上使用 LVGL 的咖啡机和恒温器示例

还不了解 ESP32?#

ESP32 是 Espressif 开发的强大 SoC(片上系统)。使用此芯片构建的模块在 IoT 应用中极受欢迎,其中连接性和低功耗运行至关重要。此外,ESP32 提供双核 200 MHz 微控制器的高性能。模块通常配备外部闪存(通常为 4 MB),可以映射为程序内存。

关于连接性,模块配备完全认证的 Wi-Fi、BT 和 BLE 接口。

最流行的模块之一是 ESP32 WROOM,价格仅为 4 美元。

要开始,您应该购买带有 ESP32 模块的开发板。例如 ESP32-DevkitC。

ESP32-DevKitC 开发板
ESP32-DevKitC 开发板

您不需要任何额外的硬件,如编程器,因为 ESP32 可以使用简单的 Micro USB 电缆通过串口编程。

使用 ESP32 实现 GUI#

尽管 ESP32 芯片没有 RGB LCD 接口或并行端口来驱动显示屏,但它有快速的 SPI 端口。

ILI9341、ST7789 和 SSD1306 是三种实际具有 SPI 接口的显示控制器,您会发现许多配备它们的显示模块。

ESP32 可以期待什么图形性能?#

有两个主要因素决定图形性能:

  1. 渲染时间 - 绘制一帧(或其一部分)的时间。
  2. 刷新时间 - 将渲染图像传输到显示屏的时间。

渲染时间取决于微控制器的速度。GPU 可以加速它,但不幸的是,ESP32 没有 GPU。无论如何,200 MHz 的核心速度应该足以快速渲染出色的 GUI!

刷新时间取决于系统架构和微控制器的外设。在 ESP32 的情况下,您需要使用 SPI 将渲染的帧发送到显示控制器。

一些计算#

默认情况下,ESP32 的最大 SPI 时钟速度为 40 MHz。这意味着什么?在 320x240 显示屏上,16 位色深,您需要传输 320 x 240 x 16 = 1,228,000 位。在 40 MHz 下,这意味着 1,228,000 / 40,000,000 = 30 ms。

因此传输完整帧需要 30 ms。

如果您有例如 40 ms 渲染时间,整个过程需要 70 ms,这意味着只有 14 FPS。

如何加速 ESP32 用于 GUI 应用?#

有两个选项:

  1. 加速 SPI
  2. 使刷新和渲染并行

我们首先讨论 SPI 速度。此表来自 ILI9341 的数据手册(第 230 页):

ILI9341 SPI 时序
ILI9341 SPI 时序

第一行说一个时钟周期最少可以是 100 ns,这意味着只有 10 MHz。那将非常慢。

结果发现 ILI9341 实际上可以在更高的时钟速率下工作。他们说甚至可以达到 48 MHz,但与之前计算中的 40 MHz 相比,这仍然不是很大的增益。

无论如何,在 ESP32 中,如果使用专用引脚,可以将 SPI 速度提高到 80 MHz。

根据 ESP32 SPI 文档:

当使用 GPIO 矩阵时,快于 40MHz 的信号无法传播,并且 MISO 的建立时间更容易被违反,因为 MISO 信号的输入延迟增加。使用 GPIO 矩阵的最大时钟频率为 40MHz 或更低,而使用所有 IOMUX 引脚允许 80MHz。

因此,只需选择以下 SPI 引脚即可拥有 80 MHz 时钟速度:

ESP32 SPI:80 MHz 引脚配置
ESP32 SPI:80 MHz 引脚配置

要驱动显示屏,表中只需要 MOSI 和 SCLK。

因此,让我们使用更快的引脚。最大时钟速率由于 ILI9341 仍然是 40 MHz,但希望它能提供更好的信号。

要使渲染和刷新并行,您应该使用带 DMA 的 SPI。DMA 使得可以在后台通过 SPI 发送渲染的图像,并让 CPU 执行其他操作。ESP32 支持将 DMA 与 SPI 一起使用,因此这只是驱动程序和一些 LVGL 配置的问题。(在 lv_conf.h 中启用 LV_VDB_DOUBLE)

构建和烧录官方示例#

安装 ESP32 工具链#

要开始,您需要安装 ESP32 开发工具链。请参阅此指南并按照步骤操作。

获取 ESP IoT Solution#

ESP IoT Solution 是一个庞大的集合:

  • 驱动程序
  • 库
  • 和示例

将其克隆到某处(最好在安装工具链的 esp 文件夹中):

  1. cd ~/esp/
  2. git clone https://github.com/espressif/esp-iot-solution --recurse-submodules
  3. export IOT_SOLUTION_PATH=~/esp/esp-iot-solution

配置示例#

选择一个示例并配置它:

  1. cd esp-iot-solution/examples/hmi/lvgl_example
  2. make defconfig
  3. make menuconfig

在 menuconfig 中,转到 IoT Solution Settings > IoT Component Management > HMI Components > LVGL Settings

在 Config Driver 中:

  • 选择您的屏幕驱动程序。在我的情况下是 ILI9341
  • 设置屏幕引脚,如下图所示
  • 将 LCD SPI 时钟设置为 40,000,000。这是最大值,所以之前计算的 80 MHz 无法在这里尝试。
配置 ESP32 以运行 LVGL 示例
配置 ESP32 以运行 LVGL 示例

如果进入触摸屏引脚配置,您只会看到 CS 和 IRQ 引脚设置。这意味着它使用与屏幕驱动程序相同的 SPI,并且 MOSI、MISO 和 CLK 引脚是共享的。但是,我的屏幕具有触摸板和屏幕的专用 SPI 引脚,并且我没有 "Y" 电缆。因此,我暂时在 "LittlevGL Touchscreen Enable" 中禁用了触摸板。

在 menuconfig 的主菜单中,在 Serial flasher config 中,确保选择了正确的串口。(需要将 ESP32 连接到 PC 才能看到使用的串口。)

之后,保存设置并退出 menuconfig。

构建和烧录#

要构建和烧录,在终端中输入:

  1. make 构建项目。或 make -j8 在 8 个线程上构建。
  2. make flash 对 ESP32 进行编程

结果是:

在 ESP32 上运行官方 LVGL 示例
在 ESP32 上运行官方 LVGL 示例

直接使用 ESP-IDF 的 LVGL#

如果您想要一个更简单的项目,拥有更多自由,您应该使用 ESP-IDF,这是核心 ESP SDK。

有一个可以与 ESP-IDF 一起使用的 LVGL 项目:https://github.com/littlevgl/esp32_ili9431

该项目附带 ILI9341 显示驱动程序和 XPT2046 触摸板驱动程序。显示驱动程序使用 DMA 并使渲染和刷新并行,从而产生不错的帧率。您可以根据需要自定义这些驱动程序。

  1. 获取此项目:git clone https://github.com/littlevgl/esp32_ili9431.git --recurse-submodules

  2. 将 LVGL 添加到构建中。将 lvgl_component.mk 和 lv_example_component.mk 作为 component.mk 分别复制到 lvgl 和 lv_examples 目录。

  3. 连接触摸板(可选):

    • MOSI: 32
    • MISO: 25
    • SCLK: 26
    • CS: 33
    • IRQ: 25
  4. make

  5. make flash

ESP32 运行 LVGL 示例
ESP32 运行 LVGL 示例

可以实现什么 FPS?#

使用上图中的 GUI - 通过使渲染和刷新并行 - 我实现了约 30 FPS!

总结#

ESP-IoT-Solution 是一个很棒且易于使用的框架。如您所见,只需几分钟即可开始。

但是,您也可以使用 ESP-IDF 来尝试 LVGL。这样您将对项目有更多控制。

如果您有使用 ESP32 和 LVGL 的产品,可以在 LVGL 网站上分享!

关于作者

加博尔·基什-瓦莫希
加博尔·基什-瓦莫希

LVGL 创始人

LVGL 的创始人和首席开发者,这是一个被全球数百万设备使用的开源嵌入式图形库。

认识博客背后的作者们

了解那些分享 LVGL 知识的优秀作者们

查看作者

订阅我们的通讯 不错过任何关于 LVGL 的新闻。我们每月最多发送 2 封邮件。

LVGL

LVGL 是最受欢迎的免费开源嵌入式图形库,支持任何 MCU、MPU 和显示类型,助您构建精美的用户界面。

我们还提供 UI 设计、实现和咨询等服务。

© 2026 LVGL。保留所有权利。
YouTubeGitHubLinkedIn