1 常用的嵌入式UI有哪些?
以下是目前嵌入式领域常用的一些UI解决方案,我将它们分为几大类进行介绍:
一、轻量级字符/文本型UI (用于无图形显示屏)
这类UI通常用于段码屏、字符LCD屏(如1602、2004)或通过串口输出的命令行界面。
自定义简单驱动
描述:最基础的方式,直接编写函数控制屏幕显示特定的字符或自定义位图。
特点:极度轻量,无任何额外开销,但开发效率低,功能简单。
适用场景:51单片机、低端STM32驱动段码屏、字符LCD屏。
终端命令行界面 (CLI)
描述:通过串口工具(如PuTTY、SecureCRT)连接到设备,以文本命令的形式进行交互。
特点:无需屏幕,依赖串口,非常适合系统调试、参数配置和状态监控。
常用库:很多项目会自行实现一个简单的命令行解析器,也可以使用开源库如:linenoisecli (来自ARM Mbed OS)
二、轻量级图形库 (用于低分辨率彩色屏)
这类库适合资源有限的MCU(如Cortex-M系列),提供了绘制基本图形、文字和控件的能力。
LVGL (Light and Versatile Graphics Library)
当前最热门的选择!开源、免费,功能极其强大且社区活跃。
特点:支持抗锯齿、动画、多种主题、多语言、多种输入设备。控件丰富(按钮、滑块、图表、列表等),资源占用可配置(从几十KB到几百KB Flash/RAM)。
适用场景:从Cortex-M0到Cortex-M7都能运行,是资源受限MCU上实现华丽UI的首选。
轻量级图形库 (用于MCU)
-
- LVGL (Light and Versatile Graphics Library)
-
- 官网链接: https://lvgl.io/
-
- GitHub仓库: https://github.com/lvgl/lvgl
-
- 在线演示: https://lvgl.io/demos
-
- 文档: https://docs.lvgl.io/
emWin / STemWin
描述:由SEGGER开发,是业界老牌的商用嵌入式GUI库。ST为其STM32用户免费提供了SEGGER官方页面: https://www.segger.com/products/user-interface/emwin/
STemWin
特点:功能成熟、稳定、高效,提供WYSIWYG(所见即所得)的GUI设计器。但开源和免费版本受限,商用需授权。
适用场景:主要用在STM32平台上,需要稳定商用级支持的场景。
STemWin资源: ST不直接提供下载,需在ST官网搜索“STemWin”,通常会在STM32CubeMX软件包或评估板软件包中找到。
TouchGFX
描述:由Draupner Graphics开发,现已被ST收购并免费提供给STM32用户。
特点:专注于创造炫酷、流畅的动画和视觉效果,充分利用STM32的硬件加速(如Chrom-ART)。有自己的PC端设计软件,设计体验很好。
适用场景:主要在STM32F4、F7、H7等高性能系列上,用于打造高端炫酷的UI。
官网链接:https://www.touchgfx.com/
ST官方TouchGFX页面:
https://www.st.com/en/development-tools/touchgfx-designer.html
文档和教程:https://support.touchgfx.com/
备注: 对STM32用户免费,需在ST官网注册和下载Designer。
Qt for MCUs
描述:Qt公司推出的适用于微控制器的版本。
特点:允许开发者使用熟悉的Qt QML语言来为MCU开发UI。功能强大,但资源占用相对较高,且商用需要付费。
适用场景:需要跨平台(从MCU到Linux)共享UI代码,且有预算的商用项目。
官网链接: https://www.qt.io/qt-for-mcus
下载与评估: https://www.qt.io/download-qt-for-mcus
文档: https://doc.qt.io/qtformcus/
AWTK (Toolkit AnyWhere)
描述:国内开源、免费的GUI库,由ZLG主导开发。
特点:功能丰富,支持跨平台(不仅限于嵌入式),提供了一套完整的开发工具(如UI设计器、脚本绑定等)。在国内有较多应用和支持。
适用场景:适合各种资源级别的嵌入式设备,特别是国内项目。
官网链接:https://www.zlg.cn/index/pub/awtk.html
GitHub仓库:https://github.com/zlgopen/awtk
文档:https://github.com/zlgopen/awtk/blob/master/docs/README.md
备注: 开源且免费(LGPL v2.1许可证)。
Guix / Azure RTOS GUIX
描述:属于ThreadX RTOS生态系统的一部分,现由微软Azure RTOS提供。
特点:为深度嵌入式和实时应用而设计,与ThreadX RTOS无缝集成,提供了Studio设计工具。
适用场景:使用ThreadX作为操作系统的项目。
微软官方页面:https://azure.microsoft.com/en-us/products/rtos/guix/
GitHub仓库 (ST移植版):https://github.com/azure-rtos/guix
文档: https://learn.microsoft.com/en-us/azure/rtos/guix/
三、基于Linux的GUI框架 (用于应用处理器)
当嵌入式设备运行Linux、Android等高级操作系统时,可以选择更重量级、功能更全面的桌面级UI框架。
Qt for Embedded Linux
描述:嵌入式领域的绝对霸主。功能完整,开发效率高,社区和商业支持都非常完善。
特点:支持OpenGL ES硬件加速,提供QML进行声明式UI开发,性能优异。开源版采用GPL/LGPL协议,商用需注意协议合规或购买商业许可。
适用场景:车载中控、工业HMI、智能家居中控、医疗设备等几乎所有基于Linux的高端嵌入式设备。
Qt公司官网:https://www.qt.io/
Qt for Device Creation 页面:https://www.qt.io/product/qt6/embedded
下载开源版:https://www.qt.io/download-open-source
文档:https://doc.qt.io/
Android
描述:主要用于移动设备,但也广泛应用于机顶盒、智能电视、车载信息娱乐系统等。
特点:拥有庞大的应用生态和开发者社区,UI开发基于Java/Kotlin。系统相对庞大和复杂。
适用场景:需要强大应用生态和多媒体能力的设备。
GTK+ (用于嵌入式)
描述:Linux桌面环境GNOME的基石,也可以用于嵌入式Linux。
特点:使用C语言开发,在资源丰富的设备上运行良好,但相比Qt,其在嵌入式领域的专门优化和工具链支持较少。
适用场景:传统Linux软件向嵌入式平台的移植,或Gnome生态的项目。
官网链接:https://www.gtk.org/
文档:https://docs.gtk.org/
Flutter (Emerging)
描述:由Google开发的跨平台UI工具包,近年来开始支持嵌入式Linux平台(通过Embedder)。
特点:采用Dart语言,开发体验流畅,渲染性能高,支持丰富的动画效果。在嵌入式领域属于新星,但发展迅速。
适用场景:追求跨平台一致性(iOS、Android、Web、嵌入式)的新项目。
官网链接:https://flutter.dev/
Flutter 嵌入式支持文档:https://docs.flutter.dev/ui/flutter-for-embedded
GitHub - flutter-embedded: https://github.com/sony/flutter-embedded-linux(索尼维护的嵌入Linux移植)
LVGL (同样适用于Linux)
描述:LVGL不仅可以运行在裸机或RTOS上,也可以通过FrameBuffer驱动在Linux上运行。
特点:轻量高效,可以作为Linux上轻量级UI的一个备选方案。
2 总结与选择建议
3 如何选择?
确定硬件:先看你的MCU/MPU型号、主频、Flash和RAM大小,以及显示设备类型(分辨率、颜色深度)。
评估需求:需要简单的按钮和文字,还是复杂的动画和图表?是否需要触摸屏?
考虑许可:项目是开源、教育还是商用?预算是多少?
开发效率:是否有现成的GUI设计工具(如TouchGFX Designer, Qt Designer, SquareLine Studio for LVGL)可以大大提高开发效率。
1505