1. 课程导入
各位工程师朋友,咱们直接进入正题。LVGL 是什么?说白了,它就是嵌入式领域里一套开源的图形库,专门给那些资源受限的 MCU 用的。你想想看,一个只有几百 KB Flash、几十 KB RAM 的单片机,想跑个像样的界面,靠裸机画点画线?那得累死。LVGL 就是来解决这个问题的。
我个人第一次接触 LVGL 是在一个智能家居面板项目上。当时老板要求 3 天出原型,用传统方式写 UI 代码,光画个按钮就要半天。后来用了 LVGL,嗯,半天就把整个界面框架搭起来了。从那以后,我就再也没手写过像素级别的 UI 代码了。
为什么选择 LVGL
市面上的嵌入式 GUI 方案不少,比如 emWin、TouchGFX、LittlevGL(LVGL 的前身)。但 LVGL 有几个点特别打动我:
- 开源免费:商业项目不用交授权费,这点对初创公司太友好了。我曾经在一个项目里用过某商业 GUI 库,光授权费就花了 5 万美金,心疼啊。
- 资源占用低:最低配置只要 64KB Flash 和 16KB RAM 就能跑起来。我手头有个 STM32F103 的老项目,Flash 只剩 32KB 了,硬是塞进去了一个精简版 LVGL。
- 组件丰富:按钮、滑块、图表、键盘、动画……你能想到的 UI 元素,它基本都有。不用自己造轮子。
- 社区活跃:GitHub 上 15k+ star,遇到问题搜一下基本都有答案。我当年踩过一个坑,在论坛发帖,2 小时就有人回复了。
核心优势对比:LVGL 在开源、资源占用、组件丰富度三个维度上,目前是嵌入式 GUI 领域的第一梯队。如果你做的是量产产品,选它基本不会错。
LVGL 在嵌入式领域的地位
这么说吧,现在做嵌入式带屏产品,十有八九用的是 LVGL。从智能手表到工业 HMI,从家电面板到医疗设备,到处都有它的影子。我去年参加一个嵌入式展会,逛了一圈,发现 70% 的展品界面都是 LVGL 做的。
为什么会这样?因为 LVGL 已经形成了一个完整的生态。有官方的 SquareLine Studio 做拖拽式设计,有丰富的第三方库支持,还有各种开发板的移植教程。说白了,它已经成了嵌入式 GUI 的事实标准之一。
| 对比项 | LVGL | emWin | TouchGFX |
|---|---|---|---|
| 开源 | 是 (MIT) | 否 (商业) | 部分开源 |
| 最低 Flash | 64KB | 128KB | 256KB |
| 最低 RAM | 16KB | 32KB | 64KB |
| 组件数量 | 30+ | 20+ | 25+ |
| 社区活跃度 | 高 | 低 | 中 |
开发板选型建议
选开发板这事,我踩过不少坑。刚开始做 LVGL 项目时,我随便买了一块便宜的开发板,结果发现 Flash 不够,跑个 demo 都卡。后来换了块带外部 RAM 的板子,才算是真正玩起来了。
我的建议是:
- 入门级:STM32F429 系列,带 TFT-LCD 控制器,Flash 2MB,RAM 256KB。跑 LVGL 8.x 完全够用,价格 100 元左右。
- 进阶级:ESP32-S3,Flash 16MB,PSRAM 8MB。适合做 WiFi 联网的智能设备,价格 50 元左右。
- 量产级:全志 V3s,带硬件 2D 加速,适合做复杂动画。不过开发门槛稍高,适合有经验的团队。
个人经验:如果你刚开始学,建议买 STM32F429 的板子,资料最多,遇到问题好解决。别一上来就搞高端芯片,容易劝退。
SDK 与工具链安装
工具链这块,我习惯用 VS Code + PlatformIO,或者 STM32CubeIDE。下面以 STM32 为例,说说安装步骤:
- 安装 STM32CubeIDE:去 ST 官网下载,安装过程一路 Next 就行。注意选对操作系统版本。
- 安装 ARM GCC 工具链:如果不用 CubeIDE,可以单独装 gcc-arm-none-eabi。我一般用 10.3 版本,稳定。
- 安装 OpenOCD:用于调试和烧录。Windows 下建议用 xpack 版本,省心。
- 安装 Git:用来拉取 LVGL 源码。这个应该都有吧?
注意:工具链版本别追新。我去年用 gcc 12 编译 LVGL 8.3,结果报了一堆警告。后来换回 10.3,一切正常。稳定压倒一切。
源码获取与编译
源码获取很简单,直接 Git 拉取:
git clone https://github.com/lvgl/lvgl.git
cd lvgl
git checkout v8.3.0 # 建议用稳定版
编译的话,我习惯用 CMake。LVGL 官方提供了 CMake 支持,直接这样:
mkdir build
cd build
cmake ..
make -j4
如果你用的是 STM32CubeIDE,可以直接导入 LVGL 源码到项目里。具体做法是:
- 在 CubeIDE 中新建一个 STM32 项目。
- 把 lvgl 文件夹复制到项目根目录。
- 在工程设置中添加 lvgl 的 include 路径。
- 把 lvgl/src 下的所有 .c 文件添加到编译列表。
嗯,这里要注意一点:LVGL 的配置文件 lv_conf.h 需要你自己创建。你可以从 lvgl 目录下复制 lv_conf_template.h,改名为 lv_conf.h,然后根据你的硬件配置修改里面的宏定义。
避坑指南:我曾经在配置 lv_conf.h 时忘了改 LV_COLOR_DEPTH,默认是 32 位,结果我的屏幕只支持 16 位,显示出来全是花屏。折腾了半天才发现是这里的问题。所以拿到源码后,第一件事就是检查颜色深度和屏幕分辨率。
LVGL 知识体系总览
下面这张图是我自己整理的 LVGL 学习路线,你可以对照着看看自己现在在哪个阶段:
这张图把 LVGL 的学习分成了四个层次。第一层是基础,也就是咱们这章讲的环境搭建和基本概念。后面我们会一层层往上走,直到你能独立完成一个量产级的项目。
好了,环境搭建这块就讲这么多。工具链装好、源码拉下来、编译通过,你就已经迈出了第一步。后面的事情,咱们慢慢来。