組み込み用高機能グラフィックライブラリ
■LVGLとは
従来、組み込み機器の操作のために押しボタンスイッチやLEDなどを使ったユーザインタフェースが一般的でした。これは今でもリモコンのような機器では使われていますが、機器の操作が複雑になってくるとマニュアルを見ながら機器を操作するのは使い勝手が良くありません。そこでこの操作部分をタッチパネル付きのグラフィックディスプレイにすれば様々な情報を使用する場面に応じて表示しながら操作することが出来ます。しかし、この操作部分の画面を前回紹介したLovyanGFXのようなグラフィックライブラリを使って構築すると綺麗な画面を作るのはかなりの労力が必要となります。そこで今回は前々から試しては挫折していたLVGL(Little and Versatile Graphics Library)を使用して作成してみました。
LVGLは、組み込み機器向けに開発された軽量かつ高機能なグラフィックライブラリです。数十KBのRAMとROMで動作可能な軽量設計であり、リソースの限られたマイコン(MCU)環境でも、下記のようなリッチで操作性の高いユーザーインターフェース(UI)を構築することができます。
※PCやスマホの画面で上記のような表示は当たり前ですがRaspBerryPiPicoのような組み込み用マイコンでは結構凄いことです。
LovyanGFXにもさまざまな描画や文字出力の機能がありますが、描画機能でUIの画面を作成する必要があるため、使いやすい複雑なUIの作成にはかなりの時間が必要となります。一方、LVGLでは、基本的なボタン、スライダ、リスト、チャートなどさまざまな機能がウィジェットとして提供されているため、これらを呼び出して配置するコードを書くだけで簡単に綺麗なUIを作ることができます。表示画面ををディスプレイより大きく作成した場合、画面上をタッチでスライドさせることで表示画面をスクロールさせる機能が自動的に付加されます。
LVGLは、ハードウェア構成に適合したディスプレイドライバと入力デバイスドライバをユーザーが用意することで、さまざまなハードウェア上に移植可能な構造になっています。MITライセンスで提供されており、商用利用も自由です。家電、医療機器、産業機器、IoTデバイスなど多様な分野で広く採用されており、組み込みGUIの定番ライブラリの一つとなっています。使用方法は以下の公式ドキュメントを参照してください。
ここには、サンプルコードや各種ウィジェットの使い方が詳しく記載されています。
■LVGLの導入
LVGLはArduinoのライブラリに登録されているため、ライブラリマネージャからインストールすることができます。執筆時のバージョンはVer.9.22でした。それ以前のものとディスプレイドライバとのインターフェースがかなり変わっているため、ネット情報を参照する場合はバージョンに注意してください。ArduinoのLVGLのスケッチサンプル(LVGL_Arduino)を開くと、ディスプレイドライバとタッチパネルセンサのスケルトン、および各種ウィジェットを動かすための基本処理が提供されていますが、残念ながら、ディスプレイドライバとタッチパネルセンサドライバの処理は書かれていないので、自分で書く必要があります。そこで、これまで使用してきたLovyanGFXとXPT2046_Touchscreenに合わせてサンプルを修正しました。
■使用できるWidgets
■バーチャルキーボード作成
キーボードから入力してテキストエリアに表示された文字列をsendボタンを押すことでシリアルモニタに出力します。画面は写真1のように横長(320×240)に設定しました。左上が原点で横がx、縦がyになります。ウィジェットの大きさや配置は、この画面の大きさや座標を基準に指定します。絶対値や相対値で指定できるので、ドキュメントのサンプルを参考にしてください。