reTerminalのUIアプリ(.NET+Avalonia)

Seeed K.K.の松岡です。
reTerminalのwikiには、UIアプリの作り方がいくつか載っています。

Linuxなので、自分好みのフレームワークが選べて幸せですね。
ただ、、、わたしが好きな.NETを使ったものが無いではありませんか。😢

そこで、.NETとAvaloniaを使ってUIアプリを作ってみました。

f:id:matsujirushix:20211114101309p:plain

UIアプリ「SmartLamp」

GPIO24に繋いだLEDをタッチパネルでON/OFFする「SmartLamp」というアプリを作りました。

動いている様子がこちらです。

f:id:matsujirushix:20211114103916g:plain

画面にONとOFFのボタンを2個配置して、ボタンをタッチ(クリック)するとLEDが点灯/消灯します。また、LEDの点灯状態を画像で表示します。

「SmartLamp」の動かし方

reTerminalに.NET 5をコンパイル、実行できる環境を整えて、GitHubに置いてある「SmartLamp」のコードをダウンロードして実行します。

  • OSの言語を変更

現時点は、Raspberry Pi OSの言語をja (Japanese)にしているとアプリが異常終了してしまいます。 アプリ実行前に、言語をen (English)にしてください。

  • .NET 5 SDKをインストール
    Download .NET 5.0のサイトから、.NET 5.0 SDK Arm32 Binariesをダウンロードして、必要に応じて環境変数を設定します。(よくわからないときは、こちらもご参照ください。)
  • 「SmartLamp」をダウンロード
    GitHubにあるコードをダウンロードします。
cd ~
git clone https://github.com/SeeedJP/Avalonia_Examples_reTerminal
  • 「SmartLamp」を実行
    コードをコンパイル&実行します。
cd ~/Avalonia_Examples_reTerminal/SmartLamp
DISPLAY=:0 dotnet run

LEDを適当な抵抗と一緒(直列)にGPIO24とGNDにつないでおくと、ランプのON/OFFに連動してLEDが点灯/消灯します。reTerminalのGPIOピン配置はここにあります。

「SmartLamp」の構造

reTerminalにプレインストールされているRaspberry Pi OS (32bit)に、.NET 5.0を追加インストールして、SmartLampアプリを動かしています。SmartLampアプリは、UIでAvaloniaフレームワーク、GPIOで.NET IoT Librariesを使用しています。

f:id:matsujirushix:20211114140159p:plain

Avaloniaは、WindowsやMac、Linuxで動くデスクトップアプリケーションを作ることができるフレームワークです。Avaloniaを使うことで、reTerminalで動かす前に、Windows上で実行してUIの具合を確認することができます(Windowsでも動くので!)。また、Visual Studioの拡張機能、Avalonia for Visual Studioを使うと、UIをXMLで定義しながら、リアルタイムにUIの表示を確認することができます。

f:id:matsujirushix:20211114112635p:plain

.NET IoT Librariesは、.NETからハードウェアI/Oするためのライブラリです。これを使うと、GPIO、PWM、I2C通信、SPI通信ができるようになります。UIとは関係無いので説明を割愛しますが、、、興味がある方はこちらをご参照ください。

SmartLampアプリのUIは、MainWindow.axamlに記述しています。Button 2個とImageをStackPanelで横方向に積み上げてレイアウトしています。右上のSeeedロゴのImageはButtonなどに干渉せず配置したかったので、RelativePanelを使いました。
Buttonクリック時の振る舞いは、MainWindow.axaml.csに記述しています。MainWindow.axamlのButtonにあるClickにメソッド名を指定すると、クリック時にMainWindow.axaml.csのメソッドが自動的に呼び出されます。ここにLED点灯/消灯メソッドの呼び出しとImageの変更を記述しています。

f:id:matsujirushix:20211114140238p:plain

まとめ

  • .NET + Avaloniaで、reTerminalのUIアプリを作ることが出来ました。
  • .NET + .NET IoT Librariesで、reTerminalのGPIO操作が出来ました。
  • 現時点、OSの言語を日本語にしているとアプリ起動直後に異常終了しました。(フォント周辺の仕組みを掘り下げる必要あり?)

変更履歴

日付 変更者 変更内容
2021/11/14 松岡 作成