硬件

ESP32 LVGL 教程:构建触摸屏 UI

使用 LVGL 为 ESP32 构建触摸屏 UI,在浏览器中可视化设计,实时预览,并导出可集成到固件的 C 代码。适合初学者的入门指南。

EDEd
esp32lvgluitutorialtouchscreenesp-idfarduino
已更新2026-05-29
01/12

概述

这是一篇面向初学者的 ESP32 LVGL 教程。学完之后,你将学会如何可视化地为 ESP32 设计触摸屏 UI(无需手写数百行 LVGL C 代码),如何在浏览器中实时预览,以及如何为 ESP-IDF、Arduino 或 PlatformIO 项目导出可供集成的代码。

如果你一直在寻找 ESP32 UI 编辑器或清晰的 ESP32 LVGL 指南,本文将通过 PicoPixel(一款基于浏览器的可视化 LVGL 编辑器)带你走完整个流程。无需安装,无需信用卡。

02/12

为什么要用可视化编辑器来构建 ESP32 UI?

用传统方式为 ESP32 构建触摸屏界面非常耗时。你需要手写 LVGL C 代码来放置每个控件,设置颜色和尺寸,烧录到开发板,盯着屏幕看,调整几个像素,再次烧录。每次小修改都要和硬件来回折腾。

可视化编辑器彻底改变了这一切。你把 LVGL 控件拖到画布上,点击设置样式,立即看到效果——满意后再导出 C 代码。你把时间花在设计上,而不是重新编译。

NOTE

PicoPixel 针对 LVGL 8.x。导出的代码使用标准 LVGL 8.x API,没有任何专有运行时,因此可以直接用于任何已运行 LVGL 8.x 的 ESP32 项目。(LVGL v9 支持已在计划中。)

03/12

你需要什么

跟着本教程学习并不需要太多准备:

  • 一块带显示屏的 ESP32 开发板,任何能运行 LVGL 的 ESP32 型号都可以(关于具体支持的开发板,请参阅下文)。
  • 你偏好的固件工具链:ESP-IDF、Arduino 或 PlatformIO,需已添加 LVGL 8.x 并且显示屏和触摸驱动已正常工作。
  • 一个免费的 PicoPixel 账号,本教程所有操作都在浏览器中完成。
TIP

如果 LVGL 还没有在你的开发板上运行,请先使用你的显示库(TFT_eSPI、LovyanGFX 或 ESP LCD panel API)在屏幕上显示一个简单的 "hello world" 标签。只要 LVGL 文字能显示出来,你就可以开始接入真正的 UI 了。

04/12

第一步 - 设置显示屏尺寸

打开编辑器,新建一个项目。首先需要正确设置分辨率,让你的设计与物理屏幕逐像素对应。

选择与你的显示屏匹配的预设:

  • 320×240,最常见的小型 SPI TFT 面板(ST7789、ILI9341)。
  • 240×240,GC9A01 等圆形显示屏。
  • 480×320、480×480 或 800×480,较大的及方形面板。

一开始就设置正确,意味着你设计的内容与设备上显示的内容完全一致。

05/12

第二步 - 拖放设计

现在是最有趣的部分。从控件面板中将 LVGL 控件拖到画布上——按钮、标签、滑块、弧形、开关、图表、下拉菜单等(共 30 多种控件类型)。摆放好位置后,使用侧面板可视化地设置颜色、字体、间距和圆角。这个阶段不需要写任何 C 代码。

构建过程中有几点值得注意:

  • 多屏支持。 根据需要添加任意数量的屏幕,并设置屏幕间的导航——非常适合菜单、设置页面和仪表盘。
  • 从一开始就支持触摸。 控件响应点击,容器支持滚动,因此你可以设计真实的触摸屏交互,而不仅仅是静态布局。
  • 字体和图片也能直接管理。 嵌入式设备上的文字和图形需要转换为 LVGL 可以存储的格式。PicoPixel 会帮你处理这些——如何精简字体大小请参阅我们的字体指南,如果你想要带动画的多状态控件请查看精灵指南。
TIP

从模板开始通常比空白画布更快——打开一个,替换文字和颜色,就有了一个良好的起点。

06/12

第三步 - 实时预览

在动用硬件之前,先点击预览。PicoPixel 将真正的 LVGL 引擎编译为 WebAssembly 并直接在浏览器中运行,因此你看到的是真实的 LVGL 渲染,而不是模拟图或粗略近似。

点击按钮、拖动滑块、滚动并检查屏幕导航。在这里修复布局问题只需几秒钟;在设备上修复则需要一次烧录循环。你甚至可以把预览链接分享给团队成员或客户以获取反馈。

07/12

第四步 - 导出可用于实际项目的 C 代码

确认设计效果后,就可以导出。你将得到一个 picopixel_lvgl_ui.zip,其中包含结构清晰的标准 LVGL 8.x C 代码:

  • ui.c / ui.h,入口点,包含 ui_init() 和 ui_tick()。
  • screens.c / screens.h,你的屏幕及其布局。
  • styles、fonts、images、actions 和 vars,设计中用到的所有内容,均自动生成。
  • README.md,对导出内容的通俗描述(在第五步中介绍)。

没有专有依赖,也不需要添加 PicoPixel 运行时库——这是原生 LVGL,无论你使用 ESP-IDF、Arduino 还是 PlatformIO,效果完全一样。

08/12

第五步 - 将 UI 添加到 ESP32 项目中

将导出内容解压到你的项目中(大多数人将其放在 ui/ 文件夹下)。然后你只需在固件中完成两项接入操作:在 LVGL 和显示/触摸驱动初始化完成后调用一次 ui_init(),并在主循环中调用 ui_tick()。

在 Arduino 程序中,大致如下:

cpp
#include <lvgl.h>
#include "ui/ui.h"          // exported by PicoPixel

void setup() {
  lv_init();
  // ... initialize your display + touch drivers here ...
  ui_init();                // builds the UI you designed
}

void loop() {
  lv_timer_handler();       // let LVGL render and handle input
  ui_tick();                // keep PicoPixel's screens updated
  delay(5);
}

要在运行时切换屏幕(例如按下按钮时),使用目标屏幕调用 loadScreen()。集成就这么简单——编译、烧录,ESP32 上的 UI 与你在浏览器中看到的完全一致。

TIP

希望让 AI 助手来完成接入工作?将导出的 zip(包含 README.md)交给 Claude Code、GitHub Copilot 或 Codex 等编程助手。该文件说明了项目结构、公共 API 以及控件所需的 lv_conf.h 设置,助手可以据此将 UI 集成到你的项目中并为你完成构建。

09/12

哪些 ESP32 开发板可以使用?

由于 PicoPixel 导出标准的 LVGL C 代码,它几乎可以在任何能运行 LVGL 8.x 的 ESP32 上使用。各型号的特点如下:

  • ESP32-S3,大多数显示项目的最佳选择:双核带 PSRAM,有充足的余量运行复杂 UI。
  • ESP32(原版)/ ESP32-S2,适合较简单的界面;注意内存预算。
  • ESP32-C3 / C6,轻量级单核 RISC-V 芯片,适合较小的 UI。
  • ESP32-P4,Espressif 最强大的芯片,带有专用 GPU,可实现流畅的高分辨率界面。PicoPixel 的导出已在 Waveshare 和 Guition 的 ESP32-P4 开发板上测试通过。

常见的成品开发板——LILYGO T-Display-S3、M5Stack Core2/CoreS3、Waveshare 和 Sunton 显示板、Espressif ESP32-S3-BOX 以及经济实惠的"Cheap Yellow Display"——均可使用,常见驱动如 ST7789、ILI9341、GC9A01(圆形)和 ILI9488 也同样支持。

10/12

减少 UI 的内存占用

嵌入式显示屏的内存远少于手机或电脑,因此稍加注意就能让 UI 保持快速且节省 Flash:

  • 合理控制字体大小。 每种字体以固定的像素大小存储,而大型字符集(尤其是中文、日文和韩文)会迅速占满空间。字体指南介绍了如何只包含你实际使用的字符。
  • 颜色深度与显示屏匹配。 16 位面板不需要 32 位图片——选择合适的颜色深度可以缩小资源文件。
  • 复用而非重复创建。 将控件创建一次,在不同屏幕和项目中复用。
11/12

常见问题

PicoPixel 支持 ESP32 吗?

支持。它生成标准的 LVGL C 代码,可在所有能运行 LVGL 8.x 的 ESP32 型号上与 ESP-IDF、Arduino 和 PlatformIO 配合使用——导出内容已在 ESP32-P4 硬件上测试通过。

支持哪个 LVGL 版本?

LVGL 8.x。导出的代码使用 LVGL 8.x API,不要与 LVGL 9.x 的调用混用。(v9 支持已在计划中。)

需要写 C 代码吗?

只需要第五步中少量的集成代码——调用 ui_init() 和 ui_tick()。UI 本身通过可视化方式设计并自动生成。

免费吗?

是的。PicoPixel 个人学习和业余项目可免费使用,无需信用卡。商业使用从 $17/月($204/年)起。

12/12

下一步

你现在已经掌握了从创意到烧录完成的完整流程:设置分辨率、拖放设计、实时预览、导出并集成。接下来:

继续阅读

接着学点什么

如何在 PicoPixel 中使用宠物 thumbnail
PICOPIXEL

如何在 PicoPixel 中使用宠物

宠物是预制的动画精灵,包含多种动画模式,可根据设定的条件切换。从目录中选一个,添加到项目中,然后将其连接起来,让它对设备正在做的任何事情做出反应:获取数据、过热、代码审查等等。

pets · sprites · picopixel
如何使用 PicoPixel 模板、UI 套件和完整应用 thumbnail
PICOPIXEL

如何使用 PicoPixel 模板、UI 套件和完整应用

查找 PicoPixel 模板、UI 套件、示例、精灵、控件和完整应用,了解如何打开、下载、导入和修改项目,并导出用于设备的 LVGL C 代码。

templates · ui-kits · full-apps
PicoPixel LVGL MCP Server Setup Guide thumbnail
PICOPIXEL

PicoPixel LVGL MCP Server Setup Guide

Set up the PicoPixel LVGL MCP server for Claude, ChatGPT, Codex, or Cursor. Learn agent settings, reusable components, colors, fonts, and assets.

LVGL MCP · MCP server setup · AI UI design