嵌入式系統領域通常需要能在資源嚴重受限的裝置上執行的圖形使用者介面。LVGL(輕量級多功能圖形庫)已成為開發人員在使用微控制器和小型顯示屏時的熱門解決方案,它提供了一種無需強大 GPU 或作業系統即可建立現代使用者介面的方法。
為資源受限裝置提供的軟體渲染
LVGL 專為微控制器和低功耗裝置設計,具有最小的記憶體需求——僅需 32KB 的 RAM 和 128KB 的快閃記憶體,外加一些用於渲染和幀緩衝的額外空間。這使其適用於像 ESP32 微控制器這樣連線到 ILI9341 或 SSD1306 等小型顯示屏的裝置。與桌面 GUI 框架不同,LVGL 直接操作畫素緩衝區,使其能夠在僅需設定畫素顏色或繪製基本圖元的系統上執行。
「嵌入式應用程式希望在每秒不用於 GUI 軟體渲染的約 90% 的 CPU 時間裡做其他事情。」
在流行的微控制器(如 ESP32-S2)上的效能基準測試顯示,各種操作(包括旋轉多個位圖)的渲染時間在 50-100 毫秒之間。這種效能水平對於大多數嵌入式應用來說綽綽有餘,因為 UI 更新可能只需要每秒 1 幀,而 CPU 大部分時間都用於其他任務。
LVGL 系統需求
- RAM:最低 32KB
- 快閃記憶體:最低 128KB
- 需要額外空間用於渲染緩衝區和幀緩衝區
- 相容 ESP32、STM32、Raspberry Pi Pico 等微控制器
與 LVGL 一起使用的常見顯示器型別
- ILI9341 顯示器
- SSD1306 顯示器
- 小型 OLED 螢幕
- 電子墨水屏
嵌入式 GUI 庫的替代選擇
- TouchGFX - LVGL 的主要競爭對手
- Adafruit GFX - 適用於資源非常受限的單色顯示器
- Dear ImGui - 適用於支援 GPU 的系統(不同的使用場景)
LVGL 開發工具
- SquareLine Studio - 專用的 LVGL UI 編輯器
- GUI Guider (NXP) - 替代 UI 編輯器
- EEZ Studio - 開源 UI 編輯器選項
跨平臺開發和工具
雖然主要針對嵌入式系統,但 LVGL 的多功能性使開發人員能夠在不同平臺上建立一致的使用者體驗。該庫可以在 Linux 的幀緩衝區中執行或透過模擬執行,使同一介面既可以用於物理裝置(如恆溫器顯示屏),也可以在透過使用 Emscripten 編譯的 Web 介面遠端訪問時使用。
有幾種工具可以簡化使用 LVGL 的 UI 開發。SquareLine Studio 作為 LVGL 介面的專用編輯器,儘管一些開發人員表示他們更喜歡 VSCode 外掛而不是獨立應用程式。社群提到的替代選項包括來自 NXP 的 GUI Guider 和開源的 EEZ Studio,一些使用者認為後者更易於使用。
MicroPython 整合和替代庫
LVGL 提供 MicroPython 支援,但社群成員建議不要使用官方版本。相反,他們推薦使用 github.com/lvgl-micropython/lvgl_micropython 上的替代實現,以獲得更好的功能,包括對自定義字型的支援。這種整合使 Python 開發人員無需編寫 C 程式碼即可利用 LVGL 的功能。
在考慮嵌入式 GUI 領域的替代方案時,TouchGFX 似乎是 LVGL 的主要競爭對手。對於資源極其受限的單色顯示屏,Adafruit GFX 庫等選項可能更為合適。值得注意的是,LVGL 與即時模式 GUI 庫(如 Dear ImGui)佔據不同的細分市場,後者主要為具有 3D 功能 GPU 的系統而非微控制器設計。
硬體加速和未來發展
雖然 LVGL 主要使用軟體渲染,但它可以在某些平臺上利用專門的硬體加速。一些微控制器具有 Blitter 引擎或專門的畫素處理器(如 NXP 的畫素管道處理器),可以處理縮放、旋轉、alpha 混合和複製畫素等操作。LVGL 文件提到了各種繪圖單元,包括 GPU 支援、SDL 整合(可以使用 OpenGL)以及正在進行的 OpenGL ES 直接支援工作。
該庫在活躍的開發和強大的社群支援下不斷發展。其全面的文件、示例和直觀的 API 使其成為在嵌入式系統上工作的開發人員的首選,這些開發人員需要建立直觀的使用者介面,而無需更復雜圖形框架的開銷。
對於希望開始使用 LVGL 的開發人員,該庫提供了廣泛的文件和示例,包括 C 和 MicroPython 的程式碼示例。LVGL 周圍的社群活躍且樂於助人,提供論壇用於故障排除和知識共享。