はつねの日記

Kinect, Windows 10 UWP, Windows Azure, IoT, 電子工作

.NET nanoFrameworkでM5StickC Plusを使ってみる

今回は、.NET nanoFrameworkから、M5Stack Core 2と同じM5シリーズの1つであるM5StickC Plusを使ってみましょう。

M5StickC Plusとは

M5StickC Plusは、ESP32-PICO-D4を搭載し、赤外線、RTC(real-time clock)、マイクロフォン、LED、6軸IMU(Inertial Measurement Unit)、ボタン、PMIC(Power Management IC)、BluetoothWi-Fiを搭載したコンパクトなハードです。
www.switch-science.com

M5StickC Plusの外部接続

外部機器との接続用インターフェースとして次の3つが用意されています。

  • USB
  • PH2.0-4P
  • 2.54mm 8pin

ピン配置などは、M5StickC Plusの本体裏面にプリントされています。

USB

USB-Cが給電+シリアル接続用に用意されています。
USB接続した端末で開発環境が稼働していれば、このルートを使ってシリアル入出力を実現しています。

PH2.0-4P

PH2.0-4Pは、GROVE互換インターフェースのI2Cシリアルバス端子です。
GROVEは、Arduinoと容易に接続するためのインターフェースで、Seeed社から様々なGROVEシリーズのモジュール(拡張機器)が提供されています。
仕様が公開されていますので、Seeed社以外からも様々なモジュールが販売されています。
www.switch-science.com

IC2のピン配置を確認する

M5StickC Plusをみると、PH2.0-4Pのピン配置は、裏面を上にした状態で「GND」「5V」「G32」「G33」となっています。
GROVE互換インターフェースなので、G33=SCL、G32=SDAとなります。
つまり、同じGROVE互換インターフェースであるM5Stack Core 2のPORT.A.I2Cに接続できる「温度湿度環境センサ付きユニット」なども接続できます。

2.54mm 8pin

USB端子の対面には2.54mmのピンが刺さる端子が8個あります。端子の内容は次のようになっています。
[GND]
[5V出力]
[G26]
[G36/G25]
[G0]
[BAT]
[3V]
[5V入力]
2.54mmのサイズはブレッドボードなどと同一なのでジャンパワイヤーでブレッドボード接続して色々な回路と接続ができます。
www.switch-science.com

事前準備

それでは、.NET nanoFrameworkでM5StickC Plusを使ってみましょう。

.NET nanoFramework Extensionを追加

.NET nanoFrameworkのプロジェクトをVisual Studioで作成できるように、Visual Studioを拡張(機能追加)しましょう。
そのために使用する拡張機能が「.NET nanoFramework Extension」です。
marketplace.visualstudio.com
Visual Studio 2022を起動したら、[拡張機能]-[拡張機能の管理]メニューで管理ウィンドウを開いてから「nano」で検索して.NET nanoFramework Extensionを探し出して適用します。

Install the nanoFramework firmware

M5StickC PlusにはnanoFrameworkは標準インストールされていないので、nanoFrameworkをインストールします。

接続ポート番号の確認

USBでM5StickC PlusをPCに接続したら、USB Serial Portのポート番号を確認します。今回の環境では「COM6」が該当しました。

Flasherアプリケーションのインストール

OSの[スタート]メニューから「Developer PowerShell for VS2022」を起動します。

dotnet tool install --global nanoff

nanoFrameworkfファームウェアをインストール

M5StickC Plusをターゲットにして「COM6」経由でnanoFrameworkをアップロードします。

nanoff --target M5StickCPlus --update --serialport COM6

正常に動作すると次のようなログが表示されます。
gist.github.com

M5StickC PlusでHelloWorld

M5StickC Plusアプリのプロジェクトを作成

.NET nanoFrameworkのテンプレートでプロジェクトを新規作成

機能拡張がうまくいくとVisual Studoの新規プロジェクト作成のテンプレートに「.NET nanoFramework」のテンプレートが追加されています。

まずは、「HelloWorld」というプロジェクト名で新規プロジェクトを作成して、M5StickC Plusの液晶画面に「Hello World」と表示するアプリを作ってみます。

Device ExplorerでM5StickC Plusを選択

プロジェクトが作成されたら、Device Explorerを開いてM5StickC Plusとの接続を確認します。
Device Explorerは、Visual Studioの「検索」機能から開くのが簡単です。

テンプレートの初期コードを実行

自動生成コードは「Debug.WriteLine("Hello from nanoFramework!");」が実行される簡単なコードなので、実行が成功するとイミディエイトウィンドウに「Hello from nanoFramework!」と表示されます。

M5StickC Plusの画面に「HelloWorld」

M5StickC Plus用のライブラリを追加

M5StickC Plusの画面などハードウェアにアクセスするために、M5StickC Plus用のライブラリを追加します。

初めてのM5StickC Plus C#プログラミング

M5StickC Plusの画面に文字を表示する簡単な方法は「nanoFramework.M5Stack.Console.WriteLine」メソッドを使う方法です。
Console.WriteLineと書くとSystem.Consoleと名前が重複するのでusingでConsoleはnanoFramework.M5Stack.Consoleのことであることを宣言してあります。
gist.github.com
M5Stack Core 2の時との違いは、クラスライブラリが相違点のほとんどを隠蔽しているので、InitializeScreenがM5StickCPlusクラスである点くらいです。

M5StickC Plusのボタンに反応するように拡張

起動して「HelloWorld」と表示されるだけでは味気ないので、M5StickC Plusについている2つのボタンをクリックしたら画面にボタンの種類を表示するようにしてみましょう。
M5StickC Plus用のライブラリでボタンクリックイベントは、M5ButtonとRightButtonのPressイベントとして取得できます。
gist.github.com

おわりに

M5Stackの特徴であるM-Busを使わないのであれば、M5StickC Plusは価格も安くて手軽に使えるデバイスです。
次回以降は、LEDやブザーなど、M5StickC Plus付属のインターフェースを使う方法について確認していく予定です。
hatsune.hatenablog.jp