Windows IoT CoreのUWP(Universal Windows Platform)アプリでLチカ

やっと本題の開発第1弾として、お約束の電子工作版Hello WorldであるLチカを実際にやってみる。

参考ページ

Windows IoT Core上では、Windows10のメインストリームであるUWPアプリ形式(VS2015のテンプレートはWindows Universal)で作成する必要がある。
GUIはXAML(ザムル)、内部コードはC#かC++を使う。(もちろんjavascript, html5,Node.jsでも可能)

このサンプルの趣旨は、馴染みあるVisual Studioで、マイコンのGPIOピンを制御し、リモートデバッガを使ってRaspberry Pi2へアプリのデプロイとデバッグをすることなので、XAMLやC#の基本部分の説明を省略するため、参考ページのサンプルプログラムをそのまま使う。

電子回路作成

まず、電子回路を作成する。必要なものは以下になる。

  • ブレッドボード
  • 220Ωの炭素皮膜抵抗
  • 赤色LED
  • メス-オスのピン付き導線2本

ブレッドボード上だけなら、オス-オスのケーブルで良いが、Raspberry Pi2のピン接続には、片側がメスのケーブルが必要になるので注意する。

参考ページのピンレイアウトを参考に、1番ピン29番ピンに導線を接続する。 あとは、

  • 1番ピン => 220Ω抵抗 => LEDのアノード(長い足)
  • 29番ピン => LEDのカソード(短い足)

になるように回路を作成する。GPIOレイアウトとそのリストが以下になる。

RP2_Pinout
GPIO

UWP (Universal Windows Platform)アプリの作成

次にUWPアプリをC#を使って作成する。参考ページにあるソースをダウンロードして、Blinky内のCSを適当なSolutionファイルにぶら下げる。

01

リモートデバッガを使うため、ターゲットをリモートコンピューターに変更する。

02

リモート接続ダイアログで、アドレスにデバイス名raspi2を入力して、認証モードはなしを選んだら、選択をクリックする。
03

プロジェクトプロパティのDebugパネルでも、上記と同じ設定が可能。
05

プラットフォームがARMになっていることを確認する。
04

とりあえず、プロジェクトを選択して、右クリックメニューから”ビルド“を実行してコンパイルエラーが出てないか確認。
06]
07

リモートデバッガ起動

リモートデバッグを開始する。もし下図のようにリモートデバッガに接続できない旨のメッセージが表示される場合、Raspberry Pi2上でリモートデバッガが起動していない可能性が高い。

08
09

リモートデバッグができない場合のチェック方法は以下。大抵はmsvsmonが実行されてないはずなので、確認する。

  • Power Shellでログインしてtlistコマンドを実行してmsvsmon.exeが起動しているか
  • http://[device name]:8080にアクセスして、Processesメニューから起動中のプロセスを表示し、msvsmon.exeが起動しているか
  • 開発端末でWinRM(リモートサーバー)のサービスが起動しているか
  • 開発端末で信頼されたホストとしてRaspberry Pi2が登録されているか

msvsmon.exeの起動方法は、デバイスにログインして、タスクスケジューラからStartMsvsmonを実行する。

> schtasks /run /tn StartMsvsmon
SUCCESS: Attempted to run the scheduled task "StartMsvsmon".

もう一度、上記チェック方法でリモートデバッガのプロセスが起動したか確認する
11

もう一度、リモートデバッグを実行すると、以下のようにデプロイが実行される。
12

完了すると、LEDが0.5sec毎にピカピカ点滅するはず。かなり単純なプログラム&回路だが、
マイコン開発したことない初心者にはとても重要なプロセスであるし、実際やってみるとフツーに楽しい。

モニタ上でプログラムが動作するのとは一味違った”モノ”が動くのがマイコン開発の醍醐味だと思う。
13

一方で、HDMIケーブルで接続したモニタには、下図のようなGUIが全画面で表示されて、
LEDの点滅に合わせて中央のサークルがRedとGrayに交互に塗りつぶされるはず。
これがUWPアプリであり、同じビルドモジュールが、Windows10開発端末でも同じように動作する。

(※このサンプルはGPIOピンのチェックロジックがあるため、実際にWindows上で実行すると、
エラー終了してしまうがこれは別の問題である。GPIOコントローラが取得できない場合、GPIO処理を
通らないようにすれば、Windows上でもアプリだけ動作するようになる。)

14