主流嵌入式GUI框架盘点
2023-09-02 20:59:15 阿炯
早些年的单片机开发中,因为单片机的资源和性能的限制,很多都是使用文字菜单界面,这种界面让人感觉非常的朴实无华,内容言简意赅,如果使用图形库进行开发,产品一下子就让别人觉得有点高级感。现在来说,单片机资源和性能更为丰富,很多的嵌入式图形库都可以做出绚丽的界面。
嵌入式GUI框架对比
下面仅介绍几款常用的图形库。
1、LVGL
LVGL免费开源的嵌入式图形库,可为任何 MCU、MPU 和显示器创建漂亮的UI界面,现在它可以使用UI 编辑器SquareLine Studio来简化开发。
代码可以直接到LVGL官方GitHub中提取,同时也提供了在线文档、Demo示例程序等,目前版本已经更新到了V8.3.4了。
1.1 特性
强大的构建块,例如按钮、图表、列表、滑块、图像等。
具有动画、抗锯齿、不透明度、平滑滚动的高级图形
各种输入设备,如触摸板、鼠标、键盘、编码器等。
使用 UTF-8 编码的多语言支持
多显示器支持,即同时使用多个TFT、单色显示器
具有类 CSS 样式的完全可定制的图形元素
独立于硬件:与任何微控制器或显示器一起使用
支持操作系统、外部存储器和 GPU,但不是必需的
单帧缓冲操作,即使具有高级图形效果
用 C 编写以获得最大兼容性(C++ 兼容)
1.2 硬件要求
绝大多数MCU都能满足要求。
16、32 或 64 位微控制器或处理器
推荐 大于16 MHz 时钟速度
闪存/ROM:> 64 kB 用于非常重要的组件(建议 > 180 kB)
内存:静态 RAM 使用:~2 kB,具体取决于使用的功能和对象类型
堆栈:> 2kB(建议> 8 kB)
动态数据(堆):> 4 KB(如果使用多个对象,建议> 48 kB)。由lv_conf.h中的LV_MEM_SIZE设置。
显示缓冲区:> “水平分辨率”像素(推荐>10× “水平分辨率”)
1.3 移植
lvgl移植到嵌入式项目中也比较简单,首先下载好源码、调好LCD的显示驱动程序(画点函数那些),画图函数与lvgl显示接口衔接上即可,stm32中有提供DMA2D优化显示驱动,lvgl也支持触摸屏触摸,有相应的接口,另外还需要提供时钟给lvgl(提供心跳,使其保持响应)。
1.4 模拟器
LVGL可以使用模拟器在Windows/Linux/MacOS下运行,这可以大大加快你的开发进程,调试也很方便,Sim源码(它有别于嵌入式源码)可以到GitHub中下载,需要用到SDL库。
1.5 配套工具
LVGL还提供了图形、文字转换工具等.......
2、emWin
emWin是Segger公司针对嵌入式平台开发的稳定、高效的图形软件库,适合用于任何图形LCD的操作应用,并可输出高质量的无锯齿的文字和图形。它是不开源的,只提供调用库。该公司授权给 ST、NXP,Energy Micro 等,凡是使用这些芯片厂商生产的处理器的都可以免费使用 emWin。ST芯片的emwin叫STemWin,其针对 ST 的芯片做了优化。
官方有各种工具下载,也提供了各种Demo示例程序。
2.1 可视化工具AppWizard
可视化工具可以大大加快开发,可以实时的查看制造的UI界面,便于细微的调整。英文版使用教程,中文版的教程有很多,例如安富莱的emwin教程、正点原子的emwin视频教程,入门相对简单,熟悉了控件功能、函数接口后就能得心应手设计界面了。
2.2 模拟器的使用
目前官网提供的最新sim版本是V6.30,下载之后使用VS打开,直接在PC上运行模拟器示例(有些VS的版本过高,编译例程会报错,配置下链接器即可)。
3、AWTK
AWTK意为Toolkit AnyWhere,顾名思义就是一个可以在任何地方开发的工具集,是一个开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。其本身是用 C 语言开发并在LGPL协议下授权使用,上层界面开发目前支持C/JS;它性能高、内存开销小,无需学习 AWTK 控件本身的 API,而且有很多的示例代码直接用。
3.1 AWTK Designer可视化软件
需要注册后才能下载使用,流程参考链接。不再需要手写 XML,拖拽方式设计界面,所见即所得,快速预览,一键打包资源。
3.2 例程展示
在AWStudio中,有几个例程可供下载编译,以下展示手表UI;
4、MiniGUI
MiniGUI是一款国产GUI,一款面向嵌入式系统的高级窗口系统和图形用户界面(GUI)支持系统,由魏永明先生于1998年底开始开发。2002 年,魏永明先生创建北京飞漫软件技术有限公司,为MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软件是中国地区为开源社区贡献代码最多的软件企业。
其为免费软件,但不能免费用于商业用途。
4.1 特点
支持10多种操作系统
MiniGUI是为嵌入式系统或基于Linux/uClinux、eCos和其他传统RTOS(RT-Thread、RTEMS、FreeRTOS、VxWorks、ThreadX、Nucleus、pSoS、uC/OS-l、OSE等)的智能物联网设备设计的。特别是 MiniGUI作为HybridOS的窗口系统运行。
4.2 丰富的小部件/控件
MiniGUI为应用程序提供了30多个小部件/控件,包括标签、按钮、单行编辑框、多行编辑框、列表框、组合框、进度条、属性表、工具栏、轨迹栏、树视图、列表视图、月份日历、网格视图、图标视图、动画、滑轮选择器、动画切换按钮等。
5、uC/GUI
uC/GUI是Micrium公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LCD的应用程序提供独立于处理器和LCD控制器之外的有效的图形用户接口。可以应用于单一任务环境,也可以应用于多任务环境中。uC/GUI能够应用于任何LCD控制器和CPU的任何尺寸的物理显示或者模拟显示中。
特点如下:
适用于任何8位/16位/32位CPU,可允许于支持ANSI C的任何编译器
适用于任何控制器驱动任何LCD(单色,灰度,或者彩色)
通过配置宏,可支持任何接口,可配置显示尺寸
可在LCD的任何一点上显示字符和画位图
对于显示尺寸和速度提供优化进程,编译时间依赖于采用的优化进程
支持虚拟显示,虚拟显示的尺寸比实际显示大。
2000年出非常火爆的一个GUI,轻量级,易于移植,免费的,只是现在没有人维护了,使用的人也越来越少。
6、柿饼UI
柿饼UI(Persimmon UI)是RT-Thread一款专注于嵌入式领域,由C/C++语言构建,为用户提供类安卓效果的GUI解决方案。为用户提供了设计器+JavaScript语言的开发模式,用户只需拖拽UI控件,写一些简单的JS控制逻辑,就可以实现绚丽、复杂的UI效果。相对于传统纯C语言开发模式的GUI,柿饼UI可以极大的提高开发效率,降低代码调试难度,加快产品迭代速度。
7、其它GUI
为什么叫其它GUI呢?因为对此没有过多的了解过,只是对其进行归纳总结,用的时候方便查询。
7.1 QT for MCU
QT都知道,使用C++开发,重在理解信号与槽,可以发出出一款在PC上运行的软件,例如串口调试软件等。QT for MCU,是一个可以在嵌入式MCU上跑的QT UI。
7.2 GUIX
Azure RTOS GUIX (GUIX) 是图形界面框架的一种高性能实时实现,专用于基于 ThreadX 的嵌入式应用程序,可立即移植到几乎任何具有 ANSI C 编译器和 ThreadX 支持的处理器体系结构。
介绍的几个GUI里面,最为推荐的是LVGL,即Little VGL,开源免费又好用。
嵌入式GUI框架对比
Features/框架 | LVGL | Flutter-elinux | ArkUI(鸿蒙OS) | AWTK | QT | MIniGUI | emWin | uC/GUI | 柿饼UI |
---|---|---|---|---|---|---|---|---|---|
跨平台 | 是 | 是 | 鸿蒙OS平台 | 是 | 是 | 是 | 是 | 是 | 是 |
设备驱动兼容性 | 多种支持 | 强大 | 强大 | 良好 | 良好 | 容易扩展 | 强大 | 强大 | 强大 |
体积大小 | 小 | 较大 | 适中 | 适中 | 较大 | 小 | 小 | 小 | 小 |
开发环境 | C/C++ | Dart | C/C++ | C/C++ | C++ | C/C++ | C/C++ | C/C++ | C/C++ |
2D/3D图形 | 2D | 3D渲染引擎 | 2D/3D | 2D和3D | 2D和3D | 2D | 2D | 2D | 2D |
社区支持与文档 | 良好 | 非常强大 | 良好 | 良好 | 强大 | 一般 | 良好 | 一般 | 一般 |
多媒体支持 | 部分 | 部分,可能需额外实现 | 部分 | 部分 | 部分 | 部分 | 部分 | 部分 | 部分 |
开发工具链支持 | 支持 | Flutter提供的工具链 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
应用场景 | 嵌入式设备、小屏幕设备 | 设计独立于硬件需求 | 鸿蒙OS平台相关应用 | 嵌入式设备、大屏幕设备 | 多平台多设备应用 | 嵌入式设备 | 嵌入式系统等 | 嵌入式设备 | 嵌入式设备 |
许可证/license | MIT | BSD-style license | Apache License 2.0 | 私有 | 商业(需要购买)、开源(GPL/LGPL) | 私有,部分LGPL | 商业(需要购买) | 商业(需要购买) | 私有 |
费用/cost | 免费 | 免费(开源) | 免费(开源) | 收费 | 社区版免费、商业版收费 | 部分免费/商业 | 收费 | 收费 | 收费 |
下面仅介绍几款常用的图形库。
1、LVGL
LVGL免费开源的嵌入式图形库,可为任何 MCU、MPU 和显示器创建漂亮的UI界面,现在它可以使用UI 编辑器SquareLine Studio来简化开发。
代码可以直接到LVGL官方GitHub中提取,同时也提供了在线文档、Demo示例程序等,目前版本已经更新到了V8.3.4了。
1.1 特性
强大的构建块,例如按钮、图表、列表、滑块、图像等。
具有动画、抗锯齿、不透明度、平滑滚动的高级图形
各种输入设备,如触摸板、鼠标、键盘、编码器等。
使用 UTF-8 编码的多语言支持
多显示器支持,即同时使用多个TFT、单色显示器
具有类 CSS 样式的完全可定制的图形元素
独立于硬件:与任何微控制器或显示器一起使用
支持操作系统、外部存储器和 GPU,但不是必需的
单帧缓冲操作,即使具有高级图形效果
用 C 编写以获得最大兼容性(C++ 兼容)
1.2 硬件要求
绝大多数MCU都能满足要求。
16、32 或 64 位微控制器或处理器
推荐 大于16 MHz 时钟速度
闪存/ROM:> 64 kB 用于非常重要的组件(建议 > 180 kB)
内存:静态 RAM 使用:~2 kB,具体取决于使用的功能和对象类型
堆栈:> 2kB(建议> 8 kB)
动态数据(堆):> 4 KB(如果使用多个对象,建议> 48 kB)。由lv_conf.h中的LV_MEM_SIZE设置。
显示缓冲区:> “水平分辨率”像素(推荐>10× “水平分辨率”)
1.3 移植
lvgl移植到嵌入式项目中也比较简单,首先下载好源码、调好LCD的显示驱动程序(画点函数那些),画图函数与lvgl显示接口衔接上即可,stm32中有提供DMA2D优化显示驱动,lvgl也支持触摸屏触摸,有相应的接口,另外还需要提供时钟给lvgl(提供心跳,使其保持响应)。
1.4 模拟器
LVGL可以使用模拟器在Windows/Linux/MacOS下运行,这可以大大加快你的开发进程,调试也很方便,Sim源码(它有别于嵌入式源码)可以到GitHub中下载,需要用到SDL库。
1.5 配套工具
LVGL还提供了图形、文字转换工具等.......
2、emWin
emWin是Segger公司针对嵌入式平台开发的稳定、高效的图形软件库,适合用于任何图形LCD的操作应用,并可输出高质量的无锯齿的文字和图形。它是不开源的,只提供调用库。该公司授权给 ST、NXP,Energy Micro 等,凡是使用这些芯片厂商生产的处理器的都可以免费使用 emWin。ST芯片的emwin叫STemWin,其针对 ST 的芯片做了优化。
官方有各种工具下载,也提供了各种Demo示例程序。
2.1 可视化工具AppWizard
可视化工具可以大大加快开发,可以实时的查看制造的UI界面,便于细微的调整。英文版使用教程,中文版的教程有很多,例如安富莱的emwin教程、正点原子的emwin视频教程,入门相对简单,熟悉了控件功能、函数接口后就能得心应手设计界面了。
2.2 模拟器的使用
目前官网提供的最新sim版本是V6.30,下载之后使用VS打开,直接在PC上运行模拟器示例(有些VS的版本过高,编译例程会报错,配置下链接器即可)。
3、AWTK
AWTK意为Toolkit AnyWhere,顾名思义就是一个可以在任何地方开发的工具集,是一个开源 GUI 引擎,旨在为嵌入式系统、WEB、各种小程序、手机和 PC 打造的通用 GUI 引擎,为用户提供一个功能强大、高效可靠、简单易用、可轻松做出炫酷效果的 GUI 引擎。其本身是用 C 语言开发并在LGPL协议下授权使用,上层界面开发目前支持C/JS;它性能高、内存开销小,无需学习 AWTK 控件本身的 API,而且有很多的示例代码直接用。
3.1 AWTK Designer可视化软件
需要注册后才能下载使用,流程参考链接。不再需要手写 XML,拖拽方式设计界面,所见即所得,快速预览,一键打包资源。
3.2 例程展示
在AWStudio中,有几个例程可供下载编译,以下展示手表UI;
4、MiniGUI
MiniGUI是一款国产GUI,一款面向嵌入式系统的高级窗口系统和图形用户界面(GUI)支持系统,由魏永明先生于1998年底开始开发。2002 年,魏永明先生创建北京飞漫软件技术有限公司,为MiniGUI 提供商业技术支持,同时也继续提供开源版本,飞漫软件是中国地区为开源社区贡献代码最多的软件企业。
其为免费软件,但不能免费用于商业用途。
4.1 特点
支持10多种操作系统
MiniGUI是为嵌入式系统或基于Linux/uClinux、eCos和其他传统RTOS(RT-Thread、RTEMS、FreeRTOS、VxWorks、ThreadX、Nucleus、pSoS、uC/OS-l、OSE等)的智能物联网设备设计的。特别是 MiniGUI作为HybridOS的窗口系统运行。
4.2 丰富的小部件/控件
MiniGUI为应用程序提供了30多个小部件/控件,包括标签、按钮、单行编辑框、多行编辑框、列表框、组合框、进度条、属性表、工具栏、轨迹栏、树视图、列表视图、月份日历、网格视图、图标视图、动画、滑轮选择器、动画切换按钮等。
5、uC/GUI
uC/GUI是Micrium公司开发的通用的嵌入式用户图形界面软件。它给任何使用图形LCD的应用程序提供独立于处理器和LCD控制器之外的有效的图形用户接口。可以应用于单一任务环境,也可以应用于多任务环境中。uC/GUI能够应用于任何LCD控制器和CPU的任何尺寸的物理显示或者模拟显示中。
特点如下:
适用于任何8位/16位/32位CPU,可允许于支持ANSI C的任何编译器
适用于任何控制器驱动任何LCD(单色,灰度,或者彩色)
通过配置宏,可支持任何接口,可配置显示尺寸
可在LCD的任何一点上显示字符和画位图
对于显示尺寸和速度提供优化进程,编译时间依赖于采用的优化进程
支持虚拟显示,虚拟显示的尺寸比实际显示大。
2000年出非常火爆的一个GUI,轻量级,易于移植,免费的,只是现在没有人维护了,使用的人也越来越少。
6、柿饼UI
柿饼UI(Persimmon UI)是RT-Thread一款专注于嵌入式领域,由C/C++语言构建,为用户提供类安卓效果的GUI解决方案。为用户提供了设计器+JavaScript语言的开发模式,用户只需拖拽UI控件,写一些简单的JS控制逻辑,就可以实现绚丽、复杂的UI效果。相对于传统纯C语言开发模式的GUI,柿饼UI可以极大的提高开发效率,降低代码调试难度,加快产品迭代速度。
7、其它GUI
为什么叫其它GUI呢?因为对此没有过多的了解过,只是对其进行归纳总结,用的时候方便查询。
7.1 QT for MCU
QT都知道,使用C++开发,重在理解信号与槽,可以发出出一款在PC上运行的软件,例如串口调试软件等。QT for MCU,是一个可以在嵌入式MCU上跑的QT UI。
7.2 GUIX
Azure RTOS GUIX (GUIX) 是图形界面框架的一种高性能实时实现,专用于基于 ThreadX 的嵌入式应用程序,可立即移植到几乎任何具有 ANSI C 编译器和 ThreadX 支持的处理器体系结构。
介绍的几个GUI里面,最为推荐的是LVGL,即Little VGL,开源免费又好用。