開源輕量級前端顯示框架LVGL簡介

語言: CN / TW / HK

#01 LVGL簡介

1.png
實用自行車碼錶

9.png
具有科技感的獎盃

實現這些DIY作品的背後,都有同樣一個功能強大的GUI——LVGL。

LVGL的作者是來自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C語言編寫,以實現最大的相容性(與C ++相容),模擬器可在沒有嵌入式硬體的PC上啟動嵌入式GUI設計,同時LVGL作為一個圖形庫,它自帶著接近三十多種小工具可以供開發者使用。這些強大的構建塊按鈕搭配上帶有非常絲滑的動畫以及可以做到平滑滾動的高階圖形,同時兼具著不高的配置要求以及開源屬性,顯著的優勢使得LVGL蔚然成風,成為廣大開發者在選擇GUI時的第一選擇。

20190824152251444.gif

-主要特性-

  • 強大的構建塊,如按鈕,圖表,列表,滑塊,影象等。
  • 高階圖形動畫,抗鋸齒,不透明度,平滑滾動
  • 各種輸入裝置,如觸控板、滑鼠、鍵盤、編碼器等
  • 多語言支援與UTF-8編碼
  • 多顯示器支援,即使用更多的TFT,單色顯示器同時
  • 完全可定製的圖形元素與css類樣式
  • 硬體獨立與任何微控制器或顯示器使用
  • 可擴充套件,使用少量記憶體(64kb Flash, 16kb RAM)
  • 支援作業系統、外部記憶體和GPU,但不是必需的
  • 單幀緩衝操作,甚至與高階圖形效果
  • 用C編寫的最大相容性(c++相容)
  • 模擬器在沒有嵌入式硬體的PC上開始嵌入式GUI設計
  • 繫結到MicroPython
  • 教程,例子,快速GUI設計的主題
  • 文件可以線上和PDF格式獲取
  • 麻省理工學院許可下的免費和開源

圖片1.png

-配置要求-

  • 基本上,每個能夠驅動顯示器的現代控制器都適合執行 LVGL。最低要求是:16、32 或 64 位微控制器或處理器
  • 建議使用 16 MHz 時鐘速度
  • 快閃記憶體/ROM:> 64 kB 用於非常重要的元件 (> 建議使用 180 kB)
    RAM:靜態 RAM 使用量:0~2 kB,取決於使用的功能和物件型別
    堆: > 2kB (> 建議使用 8 kB)
    動態資料(堆): > 2 KB (> 如果使用多個物件,建議使用 16 kB). 在 lv_conf.h 檔案中配置 LV_MEM_SIZE 生效。
    顯示緩衝區:> “水平解析度”畫素(推薦> 10 × 10ד水平解析度”)
    MCU 或外部顯示控制器中的一個幀緩衝器
  • C99 或更新的編譯器
  • 具備基本的 C(或 C++)知識

一塊能驅動顯示屏且Flash大於64KB,RAM大於20KB的微控制器都可以支援執行LVGL。這樣也就說明只需要是我們經常用於開發的微控制器幾乎都可以支援(16bit及以上)LVGL,LVGL能夠同時被這麼多平臺支援的主要原因是LVGL對硬體的要求並不算太高。

-系統框架-

LVGL本身是一個圖形庫。

我們的應用程式通過呼叫LVGL庫來建立GUI。它包含一個HAL(硬體抽象層)介面,用於註冊顯示和輸入裝置驅動程式。驅動程式除特定的驅動程式外,它還有其他的功能,可驅動顯示器GPU、讀取觸控板或按鈕的輸入。

MCU有兩種典型的硬體設定。一個帶有內建LCD/TFT驅動器的外圍裝置,而另一種是沒有內建LCD/TFT驅動器的外圍裝置。相同的是,這兩種情況都需要一個幀緩衝區來儲存螢幕的當前影象。

集成了TFT/LCD驅動器的MCU如果MCU集成了TFT/LCD驅動器外圍裝置,則可以直接通過RGB介面連線顯示器。在這種情況下,幀緩衝區可以位於內部RAM(如果MCU有足夠的RAM)中,也可以位於外部RAM(如果MCU具有儲存器介面)中。

如果MCU沒有整合TFT/LCD驅動程式介面,則必須使用外部顯示控制器(例如SSD1963、SSD1306、ILI9341 )。在這種情況下,MCU可以通過並行埠,SPI或通過I2C與顯示控制器進行通訊。幀緩衝區通常位於顯示控制器中,從而為MCU節省了大量RAM。

#02 常見GUI對比

早些年間大部分MCU的資源和處理能力有限,受制於資源以及處理能力的不足,很少有基於MCU通用的GUI。

現如今,隨著MCU技術的發展,MCU效能以及屬性有了很大改變,相較從前,現在MCU資源增加,處理能力增強,市場需求增長,GUI的功能自然也越來越豐富了。

-LVGL-

LVGL集成了佔用小、多平臺使用、移植簡單、操作簡單、開源免費等一系列特點。對於使用者來說,LVGL擁有30多個可以隨時使用的小部件的同時,甚至還可以自定義控制元件。

LVGL經常被使用在MCU級別的裝置上,因其可以在多平臺上移植使用以及在不同顯示器上,以C編寫,對於資源緊張的MCU來說十分適合。

圖片5.png

-MiniGUI-

MiniGUI 是一款面向嵌入式系統的高階視窗系統和圖形使用者介面支援系統,遵循GPL協議。作為作業系統和應用程式之間的一箇中間件,MiniGUI 將底層作業系統和硬體平臺的細節隱藏起來,併為上層的應用程式提供了一致介面。

MiniGUI同時具有多種技術特性,包括可在含有MMU的32位處理器架構之上執行;同時支援低端、高階顯示裝置以及具備副屏支援的功能;方便為不同作業系統和環境應運而生的三種執行模式以及內建資源的支援;嵌入式應用程式開發和除錯的跨作業系統支援的屬性;完備的多視窗機制和訊息傳遞機制。

3.jpg

  • 優點

    支援多種嵌入式作業系統,可移植性強;
    可伸縮的系統架構,易於擴充套件;
    功能豐富,可靈活剪裁;
    輕型,資源佔用少;
    高效能,高可靠性。

  • 缺點

    對圖形裝置的抽象層次太高。

-Qt(Qt for MCUs)-

Qt for MCUs是一個完整的圖形框架和工具包,包含在微控制器上設定、開發和部署GUI所需要的一切。您可以在裸機或實時作業系統上執行應用程式。

Qt for MCUs帶有三樣開發工具,包括一個配備了完善的程式碼編輯器、版本控制等功能的IDE(Qt Creator);以Qt QML語言編寫的幫助從頭開始或基於咸亨UI空間快速設計和構建應用程式的元件WYS|WYG編輯器(Qt Quick Designer);Qt Quick Ultralite 圖形框架提供了豐富的 QML API 集,用於構建流暢的 GUI 和渲染引擎。

4.png

  • 優點

    複用您在微控制器上的現有技能;
    通過跨裝置(從高階到大眾裝置)的技術一致性,來降低維護成本;
    在不影響圖形效能的前提下,向微控制器演進以降低硬體成本;
    將傳統解決方案升級到現代的跨平臺圖形工具包。

-emWin-

emWin支援在任何嵌入式系統上建立高效、高質量的圖形使用者介面,emWin支援資源受限的微控制器的系統,執行令人驚歎的互動介面。

emWin與單任務和多工環境相容,可以使用專有的作業系統,也可以與任何商業RTOS相容。它以C語言原始碼提供,使其成為嵌入式市場的專業、通用GUI,可用於多種不同的場景。

5.png

  • 優點

    建立驚人的圖形與功能強大,易於使用的API
    適用於任何顯示器和微控制器
    適用於任何ANSI C/C++開發環境
    體驗可靠的圖形解決方案
    嵌入式圖形使用者介面解決方案

最後上一張對比圖,更直觀!

6.png

#03 D1哪吒 & LVGL

輕量 的屬性給LVGL帶來了無數粉絲,在使用各種低配置的小型開發板時,大部分開發者都會第一時間想到LVGL,這同時又突出展現出了它的另一個特點 易移植 

同樣是開源、精簡、輕量級,RISC-V和LVGL在設計理念上簡直不謀而合,他們或許就代表著未來十年科技發展的主流。

在全志在線社群論壇上,有小夥伴釋出了一篇將LVGL移植到哪吒D1上的帖子,一時也是引起廣泛討論

 

原帖&效果視訊見連結:

 

視訊中使用的是D1哪吒開發板,配上一塊帶觸控的7寸MIPI螢幕。可以看到移植的LVGL DEMO在RISC-V指令集的晶片上絲滑執行,毫無壓力。

 

原帖&效果視訊見連結:

 

藉助晶片的雙屏異顯功能,D1可以一邊用LVGL做UI互動,另一邊又在解碼播放視訊,很好的解決追劇星人在追劇時候就難以同時操作的問題,不會佔用HDMI螢幕輸出需要太多資源的同時,LVGL也很好的幫助了螢幕內容在mipi上的絲滑輸出,成功實現雙屏異顯。

而要在哪吒上把LVGL玩起來也非常簡單,只需要下載原始碼後使用編譯命令編譯原始碼:

CC=/xxxx/prebuilt/gcc/linux-x86/riscv/toolchain-thead-glibc/riscv64-glibc-gcc-thead_20200702/bin/riscv64-unknown-linux-gnu-gcc make

然後使用Tina Linux自帶的adb 將demo推到開發板裡,就可以玩起來了。如果沒有MIPI螢幕,使用HDMI顯示器+滑鼠也是同樣支援的。

當然,LVGL可以實現的遠不止於此,快快開發你的腦洞,完成更多的大作吧!!!