试用 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?#

ESP32Espressif 开发的强大 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 端口

ILI9341ST7789SSD1306 是三种实际具有 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 引脚配置

要驱动显示屏,表中只需要 MOSISCLK

因此,让我们使用更快的引脚。最大时钟速率由于 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 示例

如果进入触摸屏引脚配置,您只会看到 CSIRQ 引脚设置。这意味着它使用与屏幕驱动程序相同的 SPI,并且 MOSIMISOCLK 引脚是共享的。但是,我的屏幕具有触摸板和屏幕的专用 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.mklv_example_component.mk 作为 component.mk 分别复制到 lvgllv_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