MCU 的 TOP 15 图形GUI库:选择最适合你的图形用户界面(一)

在嵌入式系统开发中,选择一个合适的图形用户界面(GUI)库是至关重要的。在屏幕上显示的时候,使用现成的图形库,这样开发人员就不需要弄清楚底层任务,例如如何绘制像素、线条、形状,如果再高级一点,则可以绘制某些对象,例如窗口、按钮等。

下面将介绍15个备受欢迎的嵌入式GUI库,分析它们的特点、优缺点、使用场景以及生态系统,以便开发人员能够更好地选择适合自己项目的GUI库。

1、LVGL

https://lvgl.io/

LittlevGL(LVGL) 是一款开源的嵌入式图形用户界面(GUI)库,专为嵌入式系统设计。LVGL以其轻量级、灵活性和强大的功能而备受开发者青睐,资源够的情况下可移植到所有MCU。

2c913f7c8d3d5793ae9bdd32b3308fa5.png

LVGL 是完全开源的,可以查看、修改、编译和调试底层源代码,附带 30 多个内置小部件,绘制画面非常的方便,配备强大的软件渲染引擎,可以使用最少的资源以矢量图形方式绘制抗锯齿小部件。

特点:

轻量级:LVGL以其卓越的轻量级设计而著称,适用于资源受限的嵌入式系统。即便在内存和处理器资源有限的情况下,LVGL也能够提供流畅的用户体验

开源:LVGL是一款开源的GUI库,基于MIT许可,使其成为开发者们的理想选择。用户可以自由修改、使用和分发LVGL,促进了广泛的社区支持。

丰富的图形元素和主题:LVGL提供了丰富的图形元素,包括按钮、标签、文本框等,以及可定制的主题支持。这使得开发者能够轻松创建出各种风格独特的用户界面。通过 30 多个小部件、抗锯齿、动画、多语言、阿拉伯语和波斯语文本、编码器和键盘使用等,使 UI 开发变得更容易。

跨平台:LVGL不仅支持多种硬件平台,还可以在不同操作系统上运行,提供了出色的可移植性。

6951ff3d3f22550ec37bea36b8b4a74f.png

使用场景:

资源受限的嵌入式系统:由于其轻量级设计,LVGL非常适用于那些资源受限的嵌入式系统,例如微控制器(MCU)和嵌入式Linux系统。

高度定制的GUI需求:LVGL的灵活性使其能够满足对GUI高度定制的需求。开发者可以轻松地调整和定制界面元素,以适应特定项目的设计要求。

学习难易程度:

尽管LVGL是一款功能强大的GUI库,但其学习曲线相对较陡峭。初学者可能需要一些时间来熟悉其API和功能,但一旦掌握,LVGL将成为一个强大而高效的工具。

生态支持:

LVGL拥有一个活跃的社区,提供广泛的文档、教程和示例代码。这为开发者提供了丰富的资源,以便更好地利用LVGL的功能和特性。

LVGL是一款出色的嵌入式GUI库,适用于各种嵌入式系统和应用。其轻量级设计、开源许可、跨平台支持以及丰富的图形元素和主题,使其成为开发者们构建现代、具有吸引力的嵌入式用户界面的理想选择。尽管学习曲线较陡峭,但通过社区的支持和文档的积累,LVGL的使用变得更加便捷。

2、MiniGUI

https://minigui.fmsoft.cn/zh

MiniGUI 是一款轻量级的开源图形用户界面(GUI)库,专为嵌入式系统设计。MiniGUI以其高度可定制适应性强的特点而备受开发者推崇。资源够的情况下可移植到所有MCU。免费用于非商业用途,使用部分指定的SOC可免费使用。

596b4543dc3652f8cc5e11879f9355da.png

MiniGUI项目于1998年启动,既可以运行在30MHz主频的低端设备上,也可用于带GPU的高端设备上,广泛应用于消费电子于工业仪器仪表领域。

特点

轻量级设计:MiniGUI是一款轻量级的GUI库,专为嵌入式系统而设计。其小巧的体积使其适用于资源受限的环境,例如单片机和嵌入式Linux系统,最低

高度可定制:MiniGUI提供了高度可定制的皮肤和界面元素,使开发者能够轻松地适应项目的外观和感觉需求。

多平台支持:MiniGUI不仅支持嵌入式Linux系统,还可以运行在其他嵌入式平台上。eCos 和其他传统 RTOS (RT-Thread、RTEMS、FreeRTOS、VxWorks、ThreadX、Nucleus、pSOS、uC/OS-II、OSE 等),特别是 MiniGUI 作为 HybridOS 的窗口系统运行,这使得MiniGUI成为一个具有广泛可移植性的选择。

270cd54f52b35ba9b293055bef4cecc4.jpeg

使用场景:

嵌入式系统:MiniGUI主要面向嵌入式系统,特别是那些资源有限、需要轻量级GUI的项目。它适用于多种硬件平台,包括一些较为简单的单片机。

定制UI需求:MiniGUI的高度可定制性使其非常适合需要特定外观和交互风格的项目。开发者可以根据项目需求自由调整皮肤和界面元素。

学习难易程度:

MiniGUI的学习曲线相对较平缓,这使得初学者能够较为迅速地上手使用。尽管文档可能相对较少,但其简洁的设计有助于用户快速理解和使用。

生态支持:

MiniGUI拥有一个积极的社区,提供了一些基础的文档和示例代码。虽然社区规模不如一些大型的GUI库,但对于MiniGUI的问题,仍然能够得到一定的支持。

MiniGUI作为一款轻量级开源嵌入式GUI库,注重于适应资源受限的环境,特别适合嵌入式系统和一些简单的项目。其高度可定制的特性使其在定制UI方面表现出色。虽然文档相对较少,但其简单直接的设计有助于开发者迅速上手。对于那些需要轻量级GUI的项目,MiniGUI是一个值得考虑的选择

3、uGUI

http://embeddedlightning.com/ugui/

uGUI 是一款轻量级的开源图形用户界面(GUI)库,专为资源受限的嵌入式系统设计。其注重简洁性和易用性,使其成为开发者在嵌入式环境下构建用户友好界面的理想选择。资源够的情况下可移植到所有MCU。

77bfe67a1427913e35db4a46a2e168a4.jpeg

只要显示器能够显示图形,μGUI就不受特定显示技术的限制。因此,支持 LCD、TFT、E-Paper、LED 或 OLED 等显示技术。整个模块由两个文件组成:ugui.c和ugui.h,所以移植起来非常的方便

特点

轻量级设计:uGUI的设计目标是在资源有限的环境中运行,因此具有小巧的体积和较低的内存占用。这使其适用于单片机等资源受限的嵌入式系统。

易于集成和使用:uGUI的API设计简单直观,易于学习和使用。开发者可以迅速集成uGUI到他们的项目中,并通过简单的API调用实现基本的GUI功能。

可扩展性:虽然uGUI的核心设计简单,但它仍提供了一些可扩展的特性,如支持多种字体和颜色配置。这使得开发者可以通过简单的配置满足一些基本的定制需求。

605082292c197d979914e9d6fd29fec5.png

使用场景:

简单嵌入式系统:uGUI适用于资源有限的简单嵌入式系统,特别是那些对内存和处理器资源有严格要求的项目。

快速原型设计:由于其易于集成和使用的特性,uGUI也可以用于快速原型设计,帮助开发者迅速搭建界面并验证概念。

学习难易程度:

uGUI的学习曲线相对较平缓,尤其适合初学者。其简单的API设计和清晰的文档使得开发者能够快速上手并开始构建GUI界面。

生态支持:

uGUI虽然规模相对小,但仍有一定的社区支持。用户可以在社区中获取一些基础的文档和示例代码,尽管相较于一些大型GUI库,支持和社区参与度相对较低。

uGUI是一款适用于资源受限嵌入式系统的轻量级GUI库。其简洁的设计和易用的API使其在简单项目或需要快速原型设计的情况下表现出色。然而,对于一些复杂的GUI需求,可能需要考虑更为功能丰富的GUI库。对于初学者或对资源有严格要求的项目,uGUI是一个简单而可靠的选择

4、GUISlice

https://github.com/ImpulseAdventure/GUIslice

GUISlice 是一款轻量级的开源嵌入式图形用户界面(GUI)库,专为资源受限的系统设计。它注重简洁性和易用性,旨在帮助开发者快速实现基本的嵌入式用户界面。资源够的情况下可移植到所有MCU。

ee9e85ae9cc60a7a7e9ecbfa43dbec4a.png

特点

轻量级设计:GUISlice以小巧的体积低内存占用著称,纯C库,无动态内存分配,有一个用于生成布局的跨平台GUIslice Builder应用程序

易于使用:GUISlice的API设计简单直观,易于学习和使用。它提供了一些基本的图形元素,如按钮、文本框等,使得开发者能够迅速构建简单的用户界面。

支持触摸屏和非触摸屏:GUISlice支持触摸屏和非触摸屏设备,为开发者提供了更多的输入选项。

4b164efd89abc3bac7c491dfd5a4a5f0.png

使用场景:

资源受限嵌入式系统:由于其轻量级设计,GUISlice非常适用于资源受限的嵌入式系统,如一些简单的MCU项目。

简单嵌入式用户界面:GUISlice适用于对用户界面要求相对简单的嵌入式项目,如温度计、遥控器等。

学习难易程度:

GUISlice的学习曲线相对较平缓。由于其专注于提供基本的图形元素和易用的API,开发者可以比较迅速地上手使用,特别是对于有一定嵌入式经验的开发者而言。

02e27c2fe2cde629fae3269345960633.png

生态支持:

GUISlice的社区相对较小,但仍然提供了一些基本的文档和示例代码。用户可以在社区中获取支持,但相较于一些大型GUI库,社区参与度可能相对有限

GUISlice是一款专注于轻量级和简单嵌入式GUI的库,适用于一些对资源有限和用户界面需求相对简单的嵌入式项目。其易用性和小巧的体积使其成为一些简单嵌入式系统中的合适选择。然而,对于需要更复杂、功能丰富的用户界面的项目,可能需要考虑使用其他更全面的GUI库。

5、µGFX

https://ugfx.io/index

µGFX 是一个用于显示器和触摸屏的轻量级嵌入式库,提供构建功能齐全的嵌入式 GUI 所需的一切。该库非常小而且速度很快,因为每个未使用的功能都被禁用并且没有链接到完成的二进制文件中

992164feca37b36d483a5e732070cba3.jpeg

µGFX设计注重性能可移植性,使得开发者能够轻松地在各种硬件平台上实现优秀的图形用户界面(GUI)。资源够的情况下可移植到所有MCU。免费版本可用于非商业用途。

特点

跨平台支持:µGFX支持多种嵌入式系统和操作系统,包括裸机环境、FreeRTOS、ChibiOS等。这为开发者提供了广泛的硬件和软件平台选择。

硬件加速:µGFX充分利用硬件加速技术,提高了图形渲染性能,使其适用于一些对性能有高要求的嵌入式应用。

显示类型:单色、灰度、彩色、电阻式、电容式或根本没有触摸屏。µGFX 可使用的显示器类型没有限制

开放源代码:µGFX是一款开源图形库,基于MIT许可,开发者可以自由使用、修改和分发代码。这促进了社区的积极参与和贡献。

多操作系统支持:除了支持多种嵌入式系统外,µGFX还兼容多个主流的操作系统,包括Windows、Linux等,方便开发者在桌面环境进行GUI开发和调试。

ad3708f5d824a2215ad0621b402a336d.png

使用场景:

跨平台嵌入式项目:µGFX适用于需要在不同硬件平台和操作系统上运行的嵌入式项目,为开发者提供了灵活的选择。

高性能要求的应用:µGFX的硬件加速特性使其非常适合对图形性能有高要求的嵌入式应用,如医疗设备、汽车仪表盘等。

学习难易程度:

µGFX的学习曲线相对较平缓,尤其是对有一定嵌入式开发经验的开发者而言。它提供了清晰的文档和范例,帮助用户快速上手。

4a7c61385d280c5adfbadb5aa15fb015.jpeg

生态支持:

µGFX拥有活跃的社区和强大的生态系统。用户可以在社区中获取支持、交流经验,并获得额外的文档和教程。社区的积极参与使µGFX得以不断改进和更新。

µGFX是一款强大而灵活的嵌入式图形库,适用于跨平台的嵌入式项目。其硬件加速和跨平台支持使其在各种应用场景中表现出色。对于需要高性能、多平台支持的嵌入式GUI项目,µGFX是一个强大的选择。

篇幅问题,本期介绍5个,下一期继续介绍。

往期推荐

f7669b61372497a4f8123828cc4a894b.jpeg

ESP32 制造便携式 IoT 显示器

14e60bccac00a4b582539a0c5cd026ee.jpeg

【开源项目】用ESP32制作一个桌面天气预报站

450fec4708d86d18dc284143d9f27538.jpeg

介绍一个4000行代码的开源GuiLite,并移植到STM32,收藏

ac8f1ec45a223ee1899a4e0c0cff99fd.jpeg

介绍一款开源的GUI,LittlevGL,附带野火STM32F429 Demo,使用深黑色皮肤

7d0a78a6537511e94d27bea928c1e742.jpeg

又一款极棒的开源免费小型GUI,仅需三个文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一种全新且灵活的 Prompt 对齐优化技术

并非所有人都熟知如何与 LLM 进行高效交流。 一种方案是,人向模型对齐。 于是有了 「Prompt工程师」这一岗位,专门撰写适配 LLM 的 Prompt,从而让模型能够更好地生成内容。 而另一种更为有效的方案则是,让模型向人对齐。 这也是…

ES 查询语法-详解

文章目录 1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.总结 1.3.精准查询1.3.1.term查询1.3.2.总结 1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff…

信号的处理时机(内核态,用户态,如何/为什么相互转换,内核空间,cpu寄存器),信号的处理流程详细介绍+抽象图解

目录 信号的处理时机 引入 思考 -- 什么时候才能算合适的时候呢? 用户态转为内核态 引入 内核地址空间 引入 思考 -- 进程为什么能切换成内核态呢? 虚拟地址空间 注意点 原理 (总结一下) 为什么如何进入内核态 引入 介绍 底层原理(int 80) cpu的寄存器 用…

LOIS: Looking Out of Instance Semanticsfor Visual Question Answering

目录 一、论文速读 1.1 摘要 1. 2 论文概要总结 二、论文精度 2.1 论文试图解决什么问题? 2.2 论文中提到的解决方案之关键是什么? 2.3 用于定量评估的数据集是什么?代码有没有开源? 2.4 这篇论文到底有什么贡献&#xff…

智能座舱架构与芯片- (15) 测试篇 下

三、持续集成与交付 3.1 自动化编译框架 在智能座舱软件中,分为上层应用软件和底层软件。有些上层应用软件是与指令集平台无关的,例如Java应用程序等,它们对所运行的CPU平台没有依赖性,可以很好的适配当前平台进行执行。而在底层…

基于WEB的停车场管理系统的设计和实现【附源码】

基于WEB的停车场管理系统的设计和实现 摘 要 随着现代社会的快速发展,人民生活水平快速提高,汽车的数量飞速增加,与此同时停车问题也越来越受到人们的关注,为了实现对停车场进行有效的管理,结合一些停车场的模式和现状…

机器学习与计算机视觉 D2

整合为学习笔记!参考阅读了几位大佬的作品,已标注出处~ 机器学习的数学基础 线性与非线性变换 从几何意义上,线性变换表示的是直线的特性,符合两个性质: 变换前后零点不变,变换前后直线还是直线。 线性变换意味着可以…

亚马逊美国站买家号注册流程

注册亚马逊美国站买家号一般用邮箱及手机号注册就可以了,具体操作如下: 1、在浏览器里面输入亚马逊美国站的官网地址。 2、点击注册,输入姓名、邮箱或手机号、密码,然后进行验证邮箱或者手机号。如果是用的邮箱进行注册验证&…

c语言上机作业:给函数增加防御机制

1.题目 2.思路 1.首先,我们可以知道,我们必须先要把z求出来,但这里需要注意的是x,y并不包含了全部的定义域,所以我们必须先判断是否输入的数据满足条件。而这,就是我们所需要突破的函数的防御,…

单链表——OJ题(一)

目录 ​一.前言 二.移除链表元素 三.返回链表中间节点 四.链表中倒数第K个节点 五.合并两个有序链表 六.反转链表 七.链表分割 八.链表的回文结构 九.相交链表 十.环形链表 十一.环形链表(二) ​六.结语 一.前言 本文主要对平时的链表OJ进行…

Vue2+Vue3

文章目录 第 1 章:Vue 核心1、 Vue 简介1.官网2.介绍与描述3. Vue 的特点4. 与其它 JS 框架的关联5. Vue 周边库 2、初始Vue3、模板语法1、Vue模板语法有2大类:2、插值语法和指令语法 4、数据绑定1. 单向数据绑定2. 双向数据绑定 5、el与data的两种写法1.e1有2种写法…

专访特斯拉工程师杨硕:跟着机器人上天入地、探索地外行星丨智源独家

导读 十几岁时,他痴迷《终结者》,曾在百科全书中窥见卡内基梅隆大学机械臂的介绍,从而得知了研究机器人「圣地」的存在。 在CMU,他深耕足式机器人感知定位算法,期待未来涉足太空,走上火星。 在大疆&#xf…

水果音乐制作软件FL Studio21.2中文版新功能介绍

FL Studio21.2中文版,一般又称水果音乐制作软件。 FL Studio 21.2简称FL,全称FruityLoopsStudio,因此国人习惯叫它"水果"。它让你的计算机就像是全功能的录音室,大混音盘,非常先进的制作工具,让…

【C语言】数据结构——栈和队列实例探究

💗个人主页💗 ⭐个人专栏——数据结构学习⭐ 💫点击关注🤩一起学习C语言💯💫 目录 导读:一、 栈1. 栈的概念及结构2. 栈的实现3. 实现代码3.1 定义结构体3.2 初始化栈3.3 销毁栈3.4 入栈3.5 出栈…

java io流中为什么使用缓冲流就能加快文件读写速度

FileInputStream的read方法底层确实是通过调用JDK层面的read方法,并且这个JDK层面的read方法底层是使用C语言编写的,以实现高效的文件读取功能。但是它会涉及多次内核态与操作系统交互。当我们使用FileInputStream的read方法读取文件时,首先会…

微服务 Spring Cloud 8,开源RPC框架如何选型?

目录 一、开源RPC框架有哪些?1、跟语言平台绑定的开源RPC框架2、跨语言平台的开源RPC框架 二、跟语言平台绑定的开源RPC框架 -- Dubbo1、Dubbo的架构主要包含四个角色2、Dubbo的调用框架是如何实现的? 三、如何选择?四、跨语言平台的开源RPC框…

继承【C++】

继承【C】 一.什么是继承?二. 继承的方式与权限三. 继承中的成员3.0 基类和派生类中的重名成员i. 限定符ii. 隐藏 3.1 继承与默认成员函数i. 默认构造ii. 析构函数 3.2 继承与友元函数3.3 继承与静态成员变量 四. 基类和派生类的赋值五. 多继承5.1 菱形继承5.2 菱形…

CFCA证书——基于SM2/3算法的安全信任

在中国金融认证中心(CFCA)发行的证书中,采用了最新的国密SM2/3算法来提供更高的安全保障。这一创新举措进一步增强了我国网络安全能力,并为用户提供了一种更可靠、更安全的选择。 SM2/3算法是中国自主研发的非对称加密算法&#…

瑞格心理咨询系统设置多个管理员的操作方法

使用瑞格心理咨询系统,需要设置多个admin权限的管理员账号来管理,咨询厂家答复只能有1个管理员,个人觉得不可能,于是开始折腾。 解决办法: 在没有数据字典的情况下, 通过遍历数据库,发现用户信…

python趣味编程-5分钟实现一个石头剪刀布游戏(含源码、步骤讲解)

Python 中的石头剪刀布代码是 使用Tkinter和图形用户界面(GUI)设计的。 Python 石头剪刀布游戏是使用Python 编程语言开发的简单桌面应用程序。 项目系统文件包含资源文件和Python脚本。游戏画面流畅,用户控制起来很容易。