1. 课程导入
各位同学好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊LVGL到底是什么,以及怎么把它跑起来。
说实话,我最早接触LVGL是在2019年。那时候项目需要一个带触摸屏的智能家居面板,市面上能选的GUI方案不多。试过几个,要么太臃肿,要么文档稀烂。直到我翻到了LVGL——嗯,就是它了。
1.1 LVGL是什么
LVGL的全称是 Light and Versatile Graphics Library,轻量且通用的图形库。说白了,它就是一套专门给嵌入式设备用的UI框架。你想想看,你的单片机、开发板,本来只能点个灯、显示个字符,有了LVGL,就能画出按钮、滑动条、图表,甚至跑个动画。
它用C语言写的,核心代码非常精简。我见过有人在只有几百KB Flash的单片机上跑LVGL,效果还挺流畅。
核心特点:
- 轻量:最小配置下,ROM占用不到64KB,RAM几十KB就能跑
- 丰富组件:按钮、标签、滑块、图表、键盘、日历……30多种现成控件
- 硬件无关:你只需要提供显示器的“画点”函数和触摸屏的“读坐标”函数
- MIT开源协议:商用随便用,不用交钱
1.2 LVGL发展史
LVGL的故事挺有意思的。最早它叫 LittlevGL,是匈牙利一位叫Gábor Kiss的工程师在2016年捣鼓出来的。那时候他做项目需要GUI,但市面上的方案都不满意,干脆自己写了一个。
我印象很深,2018年LVGL发布了v6版本,开始有了像样的文档和示例。到了2020年的v7,架构大改,引入了对象树和样式系统。2021年的v8,性能又上了一个台阶。现在最新的v9,已经支持了GPU加速和更复杂的动画效果。
| 版本 | 发布时间 | 主要变化 |
|---|---|---|
| v5 / v6 | 2016-2018 | 雏形期,基础控件,文档简陋 |
| v7 | 2019-2020 | 对象树、样式系统、官方文档上线 |
| v8 | 2021-2022 | 性能优化、新控件、更完善的API |
| v9 | 2023-至今 | GPU加速、多显示器支持、更丰富的动画 |
我个人建议,新项目直接上v8或v9。v7虽然稳定,但API风格和现在差别挺大,学起来容易混淆。
1.3 LVGL应用场景
LVGL能用在哪些地方?我简单列几个我见过的真实案例:
- 智能家居面板:控制灯光、空调、窗帘,带触摸屏
- 工业HMI:设备状态监控、参数设置、报警显示
- 可穿戴设备:手表、手环,屏幕小但要求流畅
- 消费电子:咖啡机、洗衣机、空气净化器的显示面板
- 仪器仪表:示波器、信号发生器的屏幕界面
你可能会问,为什么不用Qt或Android?原因很简单——资源不够。那些框架动辄几十MB,而LVGL在几百KB的单片机上就能跑。说白了,它是为资源受限的嵌入式设备量身定做的。
1.4 LVGL源码获取
获取LVGL源码很简单,直接去GitHub:
git clone https://github.com/lvgl/lvgl.git
如果你想用稳定版,可以切换到对应的tag:
git checkout v8.3.0
我个人习惯用v8.3.x,这个版本非常成熟,社区资源也最多。v9虽然新,但有些API还在调整,做产品的话建议再等等。
小技巧: 下载源码后,先看 lv_conf_template.h 这个文件。把它复制成 lv_conf.h,里面几乎所有的配置项都有注释。我每次移植新平台,第一件事就是打开这个文件,把不需要的功能关掉,能省不少内存。
1.5 开发板选型与SDK准备
选开发板,说白了就是看你的项目需求。我按经验分了三类:
| 类型 | 推荐芯片 | Flash | RAM | 适合场景 |
|---|---|---|---|---|
| 入门级 | ESP32 / STM32F4 | 1-2MB | 256-512KB | 简单界面、小屏幕 |
| 进阶级 | STM32H7 / i.MX RT | 2-8MB | 1-2MB | 复杂界面、动画、大屏 |
| 高性能 | 全志F1C200s / 瑞芯微 | 16MB+ | 64MB+ | Linux + LVGL,跑复杂应用 |
这门课我选的是 ESP32 + 3.5寸TFT触摸屏。为什么?便宜、好买、社区活跃。你淘宝搜“ESP32 3.5寸屏”,一百块以内就能搞定一套。我曾经用这个组合给客户做了个原型,从拿到板子到跑出第一个界面,只用了两天。
SDK方面,我们用的是 ESP-IDF,乐鑫官方的开发框架。安装步骤很简单:
- 去乐鑫官网下载ESP-IDF离线安装包
- 运行安装程序,选择你的目标芯片(ESP32)
- 安装完成后,打开终端运行
idf.py --version验证
注意: 安装路径不要有中文和空格。我之前有个学生装在了“Program Files (x86)”下面,编译时各种报错,折腾了半天才发现是路径问题。
好了,环境准备好之后,我们来看看整个课程的知识体系:
这张图就是我们整个课程的路线图。从最底层的环境搭建,到控件、布局、动画,再到触摸、字体、存储,最后用四个实战项目把知识串起来。每一步我都会带着你走一遍,踩过的坑也会提前告诉你。