はじめに
本記事では、組込み分野で注目されるリアルタイムOS「Zephyr RTOS」と、オープンソースかつ高機能なGUIライブラリー「LVGL」を活用し、組込みGUIを実現する方法を解説します。さらに、Renesas製評価キットを用いたデモ手順を、はじめての方にもわかりやすくステップごとに紹介します。
第1章:Zephyr RTOSとは?
Zephyr RTOSは、組込み機器向けに設計されたオープンソースのリアルタイムOSです。センサーや小型ディスプレイ、通信などを扱うマイコン上のアプリが安心して動くための土台を提供します。
Zephyr RTOSの主な特長は以下のとおりです。
・軽量:
限られたメモリー環境でも安定して動作し、マイコンに最適な設計です。
・標準化された機能構成:
タスク(スレッド)管理、タイマー、メモリー管理、ドライバー、ファイルシステムなど、RTOS に必要な機能を一通り備えています。
・幅広いエコシステム:
多様なボード、センサー、ディスプレイ向けのドライバーが整備されており、「プラグイン」感覚で利用できます。LVGL のような GUI ライブラリーと容易に連携できます。
・進めやすい開発環境:
ビルドおよび依存関係の管理には west を、機能の有効/無効には Kconfig を、ハードウェア構成の記述には DeviceTreeといった専用の設定管理ツール群を用います。これらにより、設定内容を体系的に把握しやすくなっています。
第2章:LVGL とは?
LVGL(Light and Versatile Graphics Library)は、組込み向けのオープンソースGUIライブラリーです。
LVGLの主な特長は以下のとおりです。
・軽量:
LVGLは16/32/64ビットのMCUやプロセッサーで動作し、推奨クロックは16MHz以上です。 Flash/ROMは64KB以上(推奨180KB以上)、RAMは4KB以上(推奨48KB以上、UI規模に依存)あれば動作可能です。
・豊富なウィジェット:
ボタン、スライダー、チャート、テキストエリアなど多彩なUI部品を標準搭載しています。
・高いカスタマイズ性:
テーマやアニメーション、タッチ入力、各種ディスプレイドライバーに対応し、幅広い組込み用途に対応できます。
第3章:デモの概要
本記事では、Zephyr RTOSとLVGLを使って、ルネサスエレクトロニクス製EK-RA8D1評価ボード上でスマートフォンのようなモダンなGUIを表示する方法をご紹介します。
図 1:EK-RA8D1
本デモは、描画、ディスプレイ出力、タッチ入力という3つの要素で構成されています。
①描画
Zephyr RTOS上でLVGLグラフィックスライブラリーが動作し、ユーザーインターフェースを描画します。
②ディスプレイ出力
Zephyr RTOSのディスプレイドライバーがEK-RA8D1のLCDコントローラーと連携し、MIPI-DSIインターフェースを介して液晶パネルにグラフィックを送信します。
③タッチ入力
LVGLは、Zephyr RTOSの入力ドライバーを使用してEK-RA8D1の静電容量式タッチパネルからタッチイベントを取得し、ボタンやスライダーなどの画面上のウィジェットに対応付けます。
図 2:本デモのシステム構成
第4章:デモの実装手順
デモを実装する手順をご紹介します。この手順では、PCのOSはWindows 11を使用しています。
※はじめてZephyr RTOSを使用する方は、本手順を進める前に『はじめてのZephyr:インストールからHello Worldまで』を参照してください。
STEP1:ハードウェアのセットアップ
1. EK‑RA8D1 ボード本体と付属のMIPI グラフィックス拡張ボードを接続します。
2. PCとEK‑RA8D1ボード本体をMicro‑B USBケーブルで接続します。
3. DIP スイッチ SW1 の #7 が ONになっていることを確認します。(本デモでは SDRAM を使用しています。)
図 3:EK-RA8D1のセットアップ
※必要に応じて、以下リンクからジャンパー設定を確認してください。
EK-RA8D1 ハードウェア構成(GitHub)
STEP2: ソフトウェアのセットアップ
1. PowerShellを通常ユーザー権限で開きます。
2. 以下のコマンドを実行し、Zephyr Projectを保存している作業フォルダーに移動します。(今回は「C:\Zephyr」フォルダーを選択します)
cd C:\Zephyr
3. 以下のコマンドを実行し、仮想環境を有効化してから、Zephyr RTOSのソースコードフォルダーへ移動します。
zephyrproject\.venv\Scripts\Activate.ps1
cd C:\Zephyr\zephyrproject\zephyr
図 4:Zephyr RTOSのソースコードフォルダーへの移動
4. 以下のコマンドを実行し、メインブランチに切り替え、最新の状態に更新します。
git checkout main
git pull origin main
図 5:メインブランチへの切り替えと更新
5. 以下のコマンドを実行し、上位フォルダーへ移動して、Zephyr RTOSのモジュールを更新します。
cd C:\Zephyr\zephyrproject
west update
図 6:Zephyrモジュールの更新
6. フォルダー「C:\Zephyr\zephyrproject\zephyr\samples\modules\lvgl\demos\boards」を開き、ファイル「ek_ra8d1.conf」を作成します。
図 7:ファイル「ek_ra8d1.conf」の作成 (1/2)
7. ファイル「ek_ra8d1.conf」を任意のエディターで開き、以下の設定値を入力して保存します。
CONFIG_LV_Z_MEM_POOL_SIZE=98304
CONFIG_MAIN_STACK_SIZE=16384
※文字エンコードが「UTF-8」となるように対象のファイルを保存してください。
図 8:ファイル「ek_ra8d1.conf」の作成 (2/2)
補足: CONFIG_LV_Z_MEM_POOL_SIZE は LVGL の描画用メモリープールを確保するため、
CONFIG_MAIN_STACK_SIZE は GUI処理で必要なスタック領域を確保するための設定です。
いずれも不足すると描画やスレッド実行時にエラーやクラッシュが発生するため、推奨値を指定しています。
8. 以下コマンドを実行し、Zephyr RTOSのソースフォルダーに戻り、ビルドを実行します。
cd C:\Zephyr\zephyrproject\zephyr
west build -p always -b ek_ra8d1 --shield rtkmipilcdb00000be samples/modules/lvgl/demos
図 9:ビルドの実行
※jsonschemaがインストールされていない場合、ビルド時に以下のエラーが表示されることがあります。
ModuleNotFoundError: No module named 'jsonschema'
対処法は以下です:
STEP1:仮想環境を有効化した状態で、zephyrprojectフォルダーに移動し、依存パッケージをインストールします。
cd C:\Zephyr\zephyrproject
python -m pip install --upgrade pip setuptools wheel
python -m pip install -r zephyr\scripts\requirements.txt
STEP2:Zephyr モジュールを同期し、環境変数を設定します。
west update
west zephyr-export
再度ビルドをおこないます。
9. ビルドが完了したら、以下のコマンドを実行し、ボードに書き込みます。
west flash
図 10:ボードへの書き込み
※west flash 実行時に、J-Link のインストールフォルダーが PATH に追加されていない場合、以下のエラーが表示されることがあります。
FATAL ERROR: required program JLink.exe not found; install it or add its location to PATH
対処方法は以下です:
①J-Link がインストールされていない場合は、SEGGER公式サイトから J-Link をダウンロードしてしてください。
https://www.segger.com/downloads/jlink/
②インストール済みの場合は、PowerShell上で以下のコマンドを実行し、PATHを通してください。
$env:Path = " JLink.exe が格納されているフォルダーのパス;" + $env:Path
例:$env:Path = "C:\Program Files\SEGGER\JLink_V896;" + $env:Path
※今回はJ-Link V8.96を使用しています。
10. 書き込みが完了すると、LCDパネルにミュージックプレイヤーUIが表示され、曲の再生・停止や次の曲への切り替えが可能です。
図 11:デモ画面
まとめ
今回は、Zephyr RTOS上でLVGLを動作させ、EK-RA8D1評価ボードでLCD表示とタッチ操作を実現しました。この手順を応用すれば、LVGLを使った多様なGUIデモをZephyr RTOS環境で簡単に構築でき、独自のUI設計や他のセンサー・デバイス連携も可能です。
関連リンク
Getting Started with LVGL Using Renesas Zephyr RTOS | Renesas