LVGL(Light and Versatile Graphics Library)是一款非常受欢迎的免费开源嵌入式图形库,专门用于为微控制器(MCU)、微处理器(MPU)等资源受限的嵌入式设备创建美观的用户界面(UI)。它因其轻量、高效和高度可定制而受到广泛欢迎。

下面这张表格可以帮你快速了解LVGL的核心信息:

特性维度 具体说明
核心定位 专为嵌入式系统设计的图形用户界面(GUI)库
核心特点 轻量高效:对硬件要求较低(最低要求约64kB Flash,16kB RAM即可运行)
功能丰富:提供按钮、列表、图表等30多种内置控件(Widgets)
强大视觉:支持动画、抗锯齿、渐变、阴影等高级图形效果
硬件无关
可移植到任何满足基本要求的MCU/MPU和显示器上
许可协议 采用宽松的MIT许可证,可免费用于商业项目
开发支持 模拟器:可在PC上先行开发和测试,无需硬件
设计工具:支持SquareLine Studio、GUI Guider等可视化UI设计工具

🛠️ 如何使用LVGL

使用LVGL开发UI通常遵循一个清晰的流程,其核心环节如下图所示:

下面我们来详细讲解图中的各个步骤。

1. 环境准备与移植

首先,你需要将LVGL库集成到你的开发环境中。

  • 获取源码:最直接的方式是从LVGL的官方GitHub仓库(https://github.com/lvgl/lvgl)下载最新版本的源代码。

  • 基础移植:LVGL需要与你的硬件显示屏和输入设备(如触摸屏)协同工作。这需要通过提供或适配底层驱动接口来实现,核心是实现一个显示刷新函数flush_cb),将LVGL绘制好的图像数据输出到屏幕上。官方提供了lv_drivers组件,其中可能已经包含了你所用显示屏或触摸芯片的驱动参考。

对于初学者,强烈建议先在PC模拟器上学习。你可以使用Code::Blocks、Visual Studio等IDE配置LVGL模拟器项目,这样可以专注于LVGL本身的功能学习,无需担心硬件移植问题。

2. 初始化和配置

main函数中,你需要进行一系列初始化操作:

#include "lvgl.h"

int main(void) {
    // 硬件初始化(如LCD、触摸屏)
    LCD_Init();
    Touch_Init();

    // 1. 初始化LVGL库
    lv_init();

    // 2. 初始化显示驱动接口,注册刷新函数
    lv_port_disp_init();

    // 3. (如果有输入设备)初始化输入驱动接口
    lv_port_indev_init();

    // 4. 创建UI(例如:一个按钮)
    lv_obj_t * btn = lv_btn_create(lv_scr_act()); // 在活动屏幕上创建按钮
    lv_obj_set_size(btn, 100, 50); // 设置按钮大小
    lv_obj_center(btn); // 居中按钮

    lv_obj_t * label = lv_label_create(btn); // 在按钮上创建标签
    lv_label_set_text(label, "Click Me!"); // 设置标签文字

    // 5. 进入主循环,定期调用任务处理器
    while(1) {
        lv_task_handler(); // 处理LVGL的内部任务
        usleep(5000);      // 延时5毫秒
    }
    return 0;
}

同时,你需要确保LVGL能获得准确的时间心跳,通常需要在一个高精度的定时器中断中每隔1毫秒调用一次 lv_tick_inc(1)

3. UI设计与开发

这是最核心的创作部分,主要涉及三个方面:

  • 创建对象(Objects):LVGL中的所有界面元素(按钮、标签、滑块等)都称为“对象”。你可以使用类似 lv_btn_create(parent) 这样的函数来创建,对象之间可以形成父子关系。

  • 设置样式(Styles):你可以修改对象的颜色、字体、边框等外观属性,类似于CSS。LVGL支持为对象的不同状态(如按下、禁用)设置不同的样式。

  • 处理事件(Events):为了让界面有交互性,你需要为对象(如按钮)绑定事件回调函数。例如,可以指定当按钮被点击(LV_EVENT_CLICKED)时执行某个函数。

4. 进阶开发方式

当熟悉基础开发后,你可以借助工具提升效率:

  • 使用可视化UI设计工具:如 SquareLine Studio 或 NXP的GUI Guider。这些工具允许你通过拖放控件的方式设计界面,然后自动生成对应的LVGL C代码,极大地提高了开发效率。

  • 学习官方示例:LVGL提供了非常丰富的示例程序(如 lv_demo_widgets()),通过阅读和运行这些示例,你能快速了解各种控件的用法和高级特效。

💎 总结

LVGL是一个强大而灵活的工具,它能帮助你在资源有限的嵌入式设备上实现接近智能手机般的GUI体验。从PC模拟器开始,逐步理解其对象、样式和事件模型,是掌握LVGL的最佳路径。

希望这些信息能帮助你入门。如果你有具体的硬件平台或想实现特定的界面效果,我可以提供更具体的建议。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐