Seeed K.K.の松岡です。
reTerminalのwikiには、UIアプリの作り方がいくつか載っています。
Linuxなので、自分好みのフレームワークが選べて幸せですね。
ただ、、、わたしが好きな.NETを使ったものが無いではありませんか。😢
そこで、.NETとAvaloniaを使ってUIアプリを作ってみました。
UIアプリ「SmartLamp」
GPIO24に繋いだLEDをタッチパネルでON/OFFする「SmartLamp」というアプリを作りました。
動いている様子がこちらです。
画面に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を使用しています。
Avaloniaは、WindowsやMac、Linuxで動くデスクトップアプリケーションを作ることができるフレームワークです。Avaloniaを使うことで、reTerminalで動かす前に、Windows上で実行してUIの具合を確認することができます(Windowsでも動くので!)。また、Visual Studioの拡張機能、Avalonia for Visual Studioを使うと、UIをXMLで定義しながら、リアルタイムにUIの表示を確認することができます。
.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の変更を記述しています。
まとめ
- .NET + Avaloniaで、reTerminalのUIアプリを作ることが出来ました。
- .NET + .NET IoT Librariesで、reTerminalのGPIO操作が出来ました。
- 現時点、OSの言語を日本語にしているとアプリ起動直後に異常終了しました。(フォント周辺の仕組みを掘り下げる必要あり?)
変更履歴
日付 | 変更者 | 変更内容 |
---|---|---|
2021/11/14 | 松岡 | 作成 |