可能是当下最能打的MCU图形库:LVGL

在讨论图形用户界面(GUI)库时,很多人会想到emWin、TouchGFX以及QT等。这些库虽然功能强大,但它们普遍存在一个共同的问题:对资源的需求较高,不适用于资源有限的微控制器(MCU)。有没有一种既能满足基本GUI需求又能尽可能减少资源占用的GUI库呢?答案是有的,当前最具潜力的选择之一是LVGL(Light and Versatile Graphics Library)。

仪表盘DEMO

概述

成熟且知名

LVGL 是当前最流行的免费开源嵌入式图形库,能够为任何MCU、MPU和显示器类型创建美观的用户界面。它得到了许多行业领先供应商和项目的支持,包括Arm、STM32、NXP、Espressif、Nuvoton、Arduino、RT-Thread、Zephyr、NuttX、Adafruit等。

功能丰富

LVGL 拥有创建现代美观GUI所需的所有功能:30多个内置控件、强大的样式系统、类似网页的布局管理器以及支持多种语言的排版系统。要将LVGL集成到你的平台中,只需要至少32 KB RAM和128 KB Flash、C编译器、帧缓冲区以及至少1/10屏幕大小的渲染缓冲区。

特性

免费和可移植性

  • 一个完全可移植的 C(C++ 兼容)库,没有外部依赖关系。
  • 可以编译到任何 MCU 或 MPU,使用任何 RTOS 或者操作系统。
  • 支持单色、ePaper、OLED、TFT 显示器或者模拟器。
  • 移植指南
  • 该项目使用 MIT 许可证,因此您可以在商业项目中轻松使用它。
  • 仅需 32 KB RAM 和 128 KB Flash,一个帧缓冲区,以及至少 1/10 屏幕大小的渲染缓冲区。
  • 支持使用可选的操作系统、外部存储器和 GPU。

控件、样式、布局等

  • 30+ 内置控件:按钮、标签、滑块、图表、键盘、仪表、弧形、表格等等。
  • 灵活的样式系统支持约 100 个样式属性,可在任何状态下自定义控件的任何部分。
  • Flex 布局 和 Grid 布局可以响应式自动调整控件的大小和位置。
  • 文本支持 UTF-8 编码,支持 CJK、泰语、印地语、阿拉伯语和波斯语书写系统。
  • 支持自动换行、字距调整、文本滚动、亚像素渲染、拼音输入法、文本表情符号。
  • 渲染引擎支持动画、抗锯齿、不透明度、平滑滚动、阴影、图形变换等。
  • 支持鼠标、触摸板、小键盘、键盘、外部按钮、编码器输入设备。
  • 支持多显示器。

绑定和构建支持

  • Microython 绑定公开 LVGL的API
  • PikaScript 绑定在 MCU 上的更轻更简单的 Python 版本
  • 未使用自定义生成系统。您可以在构建项目的其他文件时构建 LVGL。
  • 支持开箱即用的 Make 和 CMake编译系统。
  • 支持在 PC 上开发,并可以在嵌入式硬件上使用相同的 UI 代码。
  • 支持使用我们的 Emscripten 移植从而将 C 写的 UI 代码转换为 HTML 文件。

文档、工具和服务

  • 包含 100 多个简单示例的详细文档
  • 服务如用户界面设计、实施和咨询,使 UI 开发更简单、更快。

支持包

LVGL 可用于以下几种:

  • Arduino library
  • PlatformIO package
  • Zephyr library
  • ESP-IDF(ESP32) component
  • NXP MCUXpresso component
  • NuttX library
  • RT-Thread RTOS
  • CMSIS-Pack
  • RIOT OS package

使用LVGL的优势

资源占用低

LVGL 是专为资源有限的MCU设计的,只需要最低32 KB的RAM和128 KB的Flash,这使得它特别适合嵌入式系统。

高性能

尽管资源占用低,LVGL仍然提供了高性能的图形渲染能力,包括支持动画、抗锯齿、阴影效果等高级特性。

高度可定制

LVGL 提供了高度灵活的样式和布局系统,使得用户可以根据需要定制控件的外观和行为。此外,LVGL 的开源性质允许用户根据项目需求进行修改和扩展。

强大的社区支持

作为一个开源项目,LVGL 拥有活跃的开发者社区和广泛的用户基础。你可以在官方论坛、GitHub、Discord等平台上获得支持和。

跨平台支持

LVGL 支持多种显示器类型和输入设备,并且可以运行在多种MCU、MPU和RTOS上,确保了其广泛的适用性和灵活性。

如何开始使用LVGL

安装和配置

要开始使用LVGL,你需要先下载和安装库文件。可以从GitHub获取最新版本的LVGL库,并按照文档中的指引进行配置。以下是一个简单的步骤概述:

  1. 克隆LVGL库:

    git clone https://github.com/lvgl/lvgl.git
    
  2. 配置你的开发环境,确保编译器、工具链和显示驱动程序已正确安装。

  3. 在你的项目中包含LVGL库文件,并根据需要配置样式、控件和布局。

创建一个简单的UI

下面是一个简单的示例代码,展示如何使用LVGL创建一个按钮并响应点击事件:

#include "lvgl/lvgl.h"int main(void)
{lv_init();/* Your hardware initialization code here */lv_obj_t *btn = lv_btn_create(lv_scr_act());     // Create a buttonlv_obj_set_pos(btn, 10, 10);                     // Set its positionlv_obj_set_size(btn, 100, 50);                   // Set its sizelv_obj_t *label = lv_label_create(btn);          // Add a label to the buttonlv_label_set_text(label, "Button");              // Set the label textlv_obj_add_event_cb(btn, my_event_handler, LV_EVENT_CLICKED, NULL);  // Add event handlerwhile(1) {lv_task_handler();  // Handle LVGL tasksusleep(5 * 1000);}return 0;
}void my_event_handler(lv_event_t *e)
{printf("Button clicked!\n");
}

这个示例展示了如何创建一个按钮,并为其添加一个点击事件处理程序。在实际使用中,你可以根据项目需求创建更复杂的UI界面。

LVGL 是一个强大且资源高效的嵌入式图形库,适用于各种MCU和显示设备。其丰富的功能、高度的可定制性和强大的社区支持,使其成为嵌入式开发中的一个理想选择。无论是小型项目还是复杂系统,LVGL 都能帮助你快速创建美观、高性能的用户界面。如果你正在寻找一个既能满足基本GUI需求又能在资源占用上做到最小的解决方案,那么LVGL无疑是一个非常值得考虑的选项。

你会将它用在什么项目上呢?

公众号 | FunIO
微信搜一搜 “funio”,发现更多精彩内容。
个人博客 | blog.boringhex.top

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/22417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot既打jar包又打war包如何做

你好,我是柳岸花开。 引言 在软件开发中,根据不同的部署需求,我们可能需要将应用打包成不同的格式。Spring Boot作为目前流行的Java应用开发框架,提供了一种简单的方式来打包应用。本文将介绍如何利用Maven Profiles在Spring Boot…

【linux】swap学习

在 Linux 系统中,swap 是一种用于扩展系统内存的技术。当物理内存(RAM)不足时,系统会将一部分不常用的内存数据移至 swap 空间,从而释放物理内存供其他程序使用。Swap 空间可以是一个单独的分区(swap 分区&…

交互规范:苹果 iOS 11 设计规范

文件格式:PDF(请与班主任联系获取原型文档) 文件名称:苹果 iOS 11 设计规范 文件大小:29.2 MB 文档内容介绍 免费领取资料 添加班主任回复 “210421” 领取

泛微OA调用发送消息接口 .Net C#示例

泛微OA调用接口步骤文档 泛微OA发送消息接口文档 详细步骤查看上面两个文档 泛微OA发送消息,只有java代码示例,这里整理了一套.Net版本的示例,仅供参考,目前写的可以调用,后期泛微接口做调整,本文章不做…

数据结构_手撕七大排序(快排,归并,堆排,希尔,选择,插入,冒泡)

✨✨所属专栏:数据结构✨✨ ✨✨作者主页:嶔某✨✨ 排序的概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序…

企业数据安全管理容易忽视的关键点:云存储权限管控

云存储已经广泛应用于企业用户、教育领域、医疗领域以及政府和公共服务部门。具体应用场景包括文件共享、数据备份、在线课程、教学资源库、电子病历、医学影像、实验室数据、政务数据的集中管理和共享等。 云存储的优势非常明显: 可扩展性:云存储空间可…

Nginx漏洞解析及复现

Nginx漏洞 Nginx能做到正向代理、反向代理、负载均衡、HTTP服务器等,强大的功能不言而喻,但也伴随着使用 上的风险,深入理解Nginx的漏洞有助于创建安全的业务系统。 Nginx解析漏洞 漏洞原理 Nginx的解析漏洞的出现和Nginx的版本没有关系&…

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)【已开源】

基于深度学习的中文标点预测模型-中文标点重建(Transformer模型)提供模型代码和训练好的模型 前言 目前以深度学习对文本自动添加标点符号研究很少,已知的开源项目并不多,详细的介绍就更少了,但对文本自动添加标点符号…

三菱MR-J4系列伺服驱动器E7.1和32.3故障报警处理总结

三菱MR-J4系列伺服驱动器E7.1和32.3故障报警处理总结 三菱MR-J4系列伺服驱动器出现报警,故障代码为:E7.1和32.3,查阅手册可以看到E7.1和32.3的报警解释信息, 如下图所示,此时简单运动控制模块上的ERROR灯亮, 如下图所示,用GX WORKS3打开备份程序,找到FX5-80SSC-…

【Axure视频教程】推动和拉起

今天教大家在Axure制作推动和拉起效果的原型模板,点击上下能头可以展开或收起对应的内容,并且推动或拉起下方对应的元件。该教程从0开始制作,手把手教学,无论是新手小白还是有一定基础的同学,都可以学习的哦。 【视频…

插件:vite-plugin-electron

源文档地址:vite-plugin-electron 安装 npm i -D vite-plugin-electron 将vite-plugin-electron添加到vite.config.ts的插件部分 import electron from vite-plugin-electron/simpleexport default {plugins: [electron({main: {// build.lib.entry的快捷方式entry: electr…

3 - 大的国家(高频 SQL 50 题基础版)

3.大的国家 -- 查询属性:国家名称、人口和面积 select name,population,area fromWorld where area>3000000 OR population>25000000;

组件框架信息泄露

后端spring-boot框架 actuator组件信息泄露 Actuator是Spring-Boot提供的服务监控和管理中间件,默认配置会出现接口未授权 访问,部分接口会泄露网站流量信息和内存信息等,使用Jolokia库特性甚至可以远程执行任意代码,获 取服务器…

科技赋能,无障碍出行的新纪元

在现代社会,公共设施的建设不仅是衡量城市文明程度的标尺,更是实现社会公平与包容的重要载体。对于盲人群体而言,一个完善的公共设施网络,意味着他们能够更加独立、自信地融入社会,享受与视力健全者同等的公共服务与便…

CSS实现图形效果

CSS实现图形效果 CSS实现正方形、长方形、圆形、半圆、椭圆、三角形、平行四边形、菱形、梯形、六角星、五角星、心形、消息框。 正方形 <section><div id"square"></div> </section> <style type"text/css">#square{wid…

使用onnxruntime加载YOLOv8生成的onnx文件进行目标检测

在网上下载了60多幅包含西瓜和冬瓜的图像组成melon数据集&#xff0c;使用 LabelMe 工具进行标注&#xff0c;然后使用 labelme2yolov8 脚本将json文件转换成YOLOv8支持的.txt文件&#xff0c;并自动生成YOLOv8支持的目录结构&#xff0c;包括melon.yaml文件&#xff0c;其内容…

干货!如何在Jmeter中实现对NCR响应的解析

最近做接口测试时发现了一个问题&#xff0c;部分请求的响应是通过NCR编码实现的&#xff0c;这样就导致了无法对这些请求进行断言&#xff0c;为了解决这个问题进行了如下调研&#xff0c;大家可以参考下面两篇文章&#xff1a; 使用Java apache commons包五分钟搞定NCR解析&…

CCIG 2024:大模型技术及其前沿应用论坛深度解析

一、CCIG论坛介绍 中国图象图形大会&#xff08;CCIG 2024&#xff09;是一场备受瞩目的学术盛会&#xff0c;近期在陕西省西安市曲江国际会议中心举行。这次会议以“图聚智生&#xff0c;象合慧成”为主题&#xff0c;由中国图象图形学学会主办&#xff0c;旨在汇聚图像图形领…

架构每日一学 14:架构师如何进行可行性探索?

架构活动中&#xff0c;如果不进行可行性探索可能会导致重大失误&#xff0c;为企业发展带来风险。 可行性探索是架构活动的最后一个节点&#xff0c;在这之后的架构活动就像是离弦之箭&#xff0c;即便发现重大风险也很难再回头了。 互联网公司之间的竞争非常激烈&#xff0…

elementUI中,el-table-column中设定min-width无效的解决办法

方案一&#xff1a;必须为所有的列都设置min-width&#xff0c;只设定几项是无法生效的。而且不能使用px。 <el-table-column ......(省略其它设置) :min-width"122" ......(省略其它设置) </el-table-column>