組み込みシステムの世界では、リソースに厳しい制約のあるデバイス上で動作するグラフィカルユーザーインターフェースが必要とされることがよくあります。LVGL(Light and Versatile Graphics Library)は、マイクロコントローラーや小型ディスプレイを扱う開発者にとって人気のあるソリューションとして登場し、強力なGPUやオペレーティングシステムを必要とせずに現代的なUIを作成する方法を提供しています。
リソース制約のあるデバイス向けソフトウェアレンダリング
LVGL は、最小限のメモリ要件(32KBのRAMと128KBのフラッシュメモリ、さらにレンダリングとフレームバッファ用の追加スペース)を持つマイクロコントローラーや低電力デバイス向けに特別に設計されています。これにより、 ESP32 マイクロコントローラーに ILI9341 や SSD1306 などの小型ディスプレイを接続したデバイスに適しています。デスクトップGUIフレームワークとは異なり、LVGL はピクセルバッファと直接やり取りするため、単にピクセルの色を設定したり基本的なプリミティブを描画したりするだけのシステムでも機能します。
「組み込みアプリケーションは、GUIをソフトウェアレンダリングするために使用されない残りの約90%のCPU時間を、毎秒他のことに使いたいと考えるでしょう。」
ESP32-S2 などの人気のあるマイクロコントローラーでのパフォーマンスベンチマークでは、複数のビットマップを回転させるなどのさまざまな操作に50〜100ミリ秒のレンダリング時間がかかることが示されています。このレベルのパフォーマンスは、UIの更新が1秒間に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 でコンパイルされたウェブインターフェース経由)の両方で同じインターフェースを使用できます。
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 は、主にマイクロコントローラーではなく3D対応GPUを搭載したシステム向けに設計された Dear ImGui のようなイミディエートモードGUIライブラリとは異なるニッチを占めていることは注目に値します。
ハードウェアアクセラレーションと今後の開発
LVGL は主にソフトウェアレンダリングを使用していますが、特定のプラットフォームでは専用のハードウェアアクセラレーションを活用できます。一部のマイクロコントローラーには、スケーリング、回転、アルファブレンディング、ピクセルのコピーなどの操作を処理できる Blitter エンジンや専用ピクセルプロセッサ(NXP の Pixel Pipeline-Processor など)が搭載されています。LVGL のドキュメントでは、GPUサポート、SDL統合(OpenGLを使用可能)、OpenGL ES 直接サポートのための進行中の作業など、様々な Draw Units について言及しています。
このライブラリは活発な開発とコミュニティサポートにより進化し続けています。その包括的なドキュメント、例、そして簡潔なAPIは、より複雑なグラフィックスフレームワークのオーバーヘッドなしで直感的なユーザーインターフェースを作成する必要がある組み込みシステムの開発者の間で人気を博しています。
LVGL を始めたい開発者のために、このライブラリはCと MicroPython の両方のコードサンプルを含む広範なドキュメントと例を提供しています。LVGL を取り巻くコミュニティは活発でサポート的であり、トラブルシューティングや知識共有のためのフォーラムが利用可能です。