可能是当下最能打的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” 领取

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

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

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

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

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-…

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

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

组件框架信息泄露

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

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

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

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

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

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

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

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

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

ABAP 长文本编辑器弹窗控件

前言 用户想在ALV上编辑长文本,但是ALV只有128个字符肯定是不够用的,所以需要用一个长文本编辑器来输入,本来想自己写的,发现有标准的函数,还挺好用的 代码 在用户双击ALV字段时,触发下述form&#xff0…

使用Rufus工具制作Ubuntu To Go——很详细

一、准备工作 准备工具: 1、下载Rufus(主角)软件 2、准备一个U盘或硬盘(小白128G足够,装Ubuntu系统) 3、下载Ubuntu系统镜像文件 1、下载软件Rufus 先来看一下官网介绍: Rufus 是一款格式化和创建 USB 启动盘的辅助工…

“GPT-4o深度解析:技术演进、能力评估与个人体验综述“

文章目录 每日一句正能量前言对比分析模型架构性能应用场景用户体验技术创新社区和生态系统总结 技术能力语言生成能力语言理解能力技术实现总结 个人感受关于GPT-4o的假设性观点:关于当前语言模型的一般性观点: 后记 每日一句正能量 又回到了原点&#…

“智能分析赋能等保:大数据技术在安全审计记录中的应用“

智能分析技术在信息安全领域,尤其是等保(等级保护)合规性方面,发挥了关键作用。特别是结合大数据技术,安全审计记录的处理和分析能力得到了显著增强。以下几点阐述了大数据技术是如何赋能等保安全审计的: …

【Python】 Python中的functools.wraps:装饰器的优雅包装

基本原理 在Python中,装饰器是一种非常强大的工具,它允许我们以一种非常灵活的方式修改或增强函数的行为。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。然而,当我们使用装饰器时,…

【笔记】Sturctured Streaming笔记总结(Python版)

目录 相关资料 一、概述 1.1 基本概念 1.2 两种处理模型 (1)微批处理 (2)持续处理 1.3 Structured Streaming和Spark SQL、Spark Streaming关系 二、编写Structured Streaming程序的基本步骤 三、输入源 3.1 File源 &a…