LVGL嵌入式GUI入门:从基础Demo到MVP架构实战

张开发
2026/4/14 3:20:10 15 分钟阅读

分享文章

LVGL嵌入式GUI入门:从基础Demo到MVP架构实战
LVGL是一款开源轻量的嵌入式图形库专门用于单片机等资源有限的设备能轻松做出按钮、文字、动画等界面用C语言就能开发。但直接开发容易出现UI和业务代码混写、项目杂乱难维护的问题。本文用通俗的话教你跑通基础Demo、学会MVP分层架构还能搞定动画资源的便捷处理。一、LVGL基础入门极简可跑Demo1. 核心基础概念对象按钮、文字、图片等所有UI元素都叫对象。屏幕界面的根容器所有控件都要放在屏幕上。事件处理点击、长按等用户操作的方式。主循环LVGL靠它持续刷新界面、处理交互。2. 基础Demo代码#include lvgl.h #include lv_port_disp.h #include lv_port_indev.h int main(void) { // 初始化LVGL核心 lv_init(); // 初始化屏幕、触摸驱动 lv_port_disp_init(); lv_port_indev_init(); // 创建居中文字 lv_obj_t *label lv_label_create(lv_scr_act()); lv_label_set_text(label, Hello LVGL!); lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); // 创建按钮 lv_obj_t *btn lv_btn_create(lv_scr_act()); lv_obj_set_size(btn, 120, 50); lv_obj_align(btn, LV_ALIGN_CENTER, 0, 60); // 按钮文字 lv_obj_t *btn_label lv_label_create(btn); lv_label_set_text(btn_label, Click Me); // 按钮点击事件 static void btn_event_cb(lv_event_t *e) { lv_label_set_text(label, 已点击); } lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_CLICKED, NULL); // LVGL主循环 while (1) { lv_timer_handler(); usleep(5000); } return 0; }3. 运行效果屏幕中央显示提示文字下方有一个可点击按钮点击后居中文字会发生变化这就是LVGL最基础的界面交互逻辑。二、原生LVGL开发痛点入门写小Demo很简单但项目做大后问题就很明显UI布局、业务逻辑、数据处理代码混在一起又乱又难读。页面多了之后跳转逻辑混乱改一处牵一发而动全身。代码耦合度高换硬件、改功能、维护升级成本极高。多人协作开发分工不清极易出现代码冲突。想要解决这些问题MVP分层架构是最适合LVGL的解决方案能彻底理清代码结构。三、MVP架构在LVGL中的落地1. 通俗理解MVP三层View视图层只负责做界面画控件、排布局、调样式、播动画不碰任何业务逻辑。Model模型层只负责做业务联网、传感器读取、数据存储、功能逻辑不依赖LVGL。Presenter调度层相当于中间桥梁接收界面操作、调用业务逻辑、再通知界面刷新彻底隔离View和Model。2. 项目目录结构project/ ├── view/ // 界面布局代码 ├── model/ // 业务功能代码 ├── presenter/ // 中间调度代码 └── lvgl/ // LVGL图形库3. 执行流程用户点击按钮View把事件传给PresenterPresenter调用Model处理业务Model返回数据给PresenterPresenter调用View刷新界面4. MVP优势代码分工明确结构清晰可读性、维护性大幅提升界面和业务完全分离方便测试、跨平台复用改界面不动业务改业务不动界面减少bug适合中大型项目多人协作更高效四、LVGL帧动画实现资源工程化处理LVGL里实现表情、动态图标这类效果最常用、最稳定的就是逐帧动画把动画拆成多张连续的静态图片定时切换图片就形成流畅动画。1. 图片转C代码工程化方案嵌入式开发中图片无法直接使用需要转换成C语言数组格式。我们可以用Python脚本一键将PNG/JPG帧图片转换成LVGL可直接调用的.c和.h文件完全不用手动编写繁琐的二进制数组。2. 脚本转换核心优点自动生成合法C语言变量名避免语法报错标准化生成LVGL适配格式直接调用无门槛支持增量更新图片不变则不重复生成节省编译时间省去手动编写资源代码的工作量减少人为失误3. 动画播放将转换后的资源加入项目通过定时器定时切换图片就能实现流畅的逐帧动画代码简洁运行稳定适配各类嵌入式屏幕。总结LVGL轻量好用是嵌入式GUI开发的首选能快速做出界面MVP架构能解决代码混乱、难维护的问题让项目更规范。加上脚本自动处理图片资源不用手动写代码这套LVGLMVP方案不管做简单界面还是带动画的产品都好用又省心。

更多文章