先日、.NET Micro Framework ハッカソンというイベントに参加して、.NET Gadgeteer に触ってみたら思いの外簡単で楽しそうだと思いました。
アプリ屋さんが苦手とするところのはんだづけをスルーして必要なものを作れて、かつお値段的にも手が届くので、昨今のスマートフォンと組み合わせたフィジカルコンピューティングで使えるようになるとよさげだと思ったので、買ってみて試すことにしました。
.NET Gadgeteer とは
.NET Micro Framework という実行環境*1を使って、さくっと小規模な組み込みシステムを作れるツールキットです。
マイコンとソケットが実装されている「メインボード」と、ソケットにつなぐ「モジュール」を組み合わせて、マイコンの上で動くプログラムをC#で記述すれば、あっという間にくみ上げることができます。
接続の定義も Visual Studio 上でさくっとでき、イーサネットモジュールをつなげばHTTPアクセスも、HTTPサーバー化もOK。
モジュールをソケットにつなぐだけではんだ付け不要、実際のプログラムはC#で書ける、日本国内の通販で買えてお値段もおこづかいで手が届くレベルというところで、アプリ屋さんが趣味のレベルで遊ぶデバイスとしてはかなりよい感じです。
また、ソケットは完全に独自仕様というわけではなく、その中で流れる信号は業界標準のものになっています。.NET Gadgeteer Socket Typesにあるとおりにソケットを結線し、モジュールを実装すれば独自にモジュールを作り出すこともできます。
ハードをえらぶ
.NET Gadgeteerの主要メーカーとして GHI Electronics 社がありますが、デバイスドライバーズさんが日本での代理店をしており、TinyCLR.jp から通販で購入できます。
まずは、メインボードといくつかのモジュールがセットになったキットを買うのが手っ取り早いです。*2
メインボード | 用途・特徴 | キット価格 |
---|---|---|
FEZ Cerberus | 最も安い。 小規模なセンサーモジュール等での利用が想定されている。 |
5,880円 |
FEZ Hydra | Cerberusよりも大きめのプログラムを動かせる | 11,340円 |
FEZ Spider | GHI社が独自拡張していてカメラ等の高度なモジュールも動く。 このキットは標準でたくさんのモジュールが含まれている。 |
27,510円 |
また、LAN につなぐともっと楽しさが出るので、Cerberus と Hydra の場合は、Ethernet ENC28 モジュールも同時に買っておくといいでしょう。
僕は、値段重視で何も考えずに Cerberus を買いました。ハッカソンの現場で即ポチして、週が明けてすぐに発送されました。Ethernetモジュール買い忘れて涙目。
開発環境の導入
ハードが届くまでの間に開発環境を準備しておきましょう。.NET Gadgeteerの上で動くプログラムの開発には、下記のものが必要です。上から順番にインストールしていきます。*3
- Windows 8 もしくは Windows 7
- iOS アプリデベロッパーとしては、Windows でないといけないってのが一番ネックですよね…。Windows 8 ProとVMware Fusion 5であわせて買っても14,000円切るのでこの際買ってしまってはどうでしょうか。
- Visual Studio 2012
- .NET Micro Framework SDK 4.3 RTM
- GHI Software Package
- 要会員登録。ログインすると 3. の項目のリンクが有効になってダウンロードできるようになる。
- FEZ Config
- ファームウェアアップデートするためのツール。4. の項目のリンクからダウンロード。
ファームウェアのアップデート
実際にものが届いたら、ファームウェアをアップデートしましょう。Cerberus の場合、 8 番のソケットと、赤いUSB Client SPモジュールをつないで、PCのUSBポートにつなぎます。
その後、FEZ Config を起動して、Firmware Update します。
今回は Cerberus だったので、Cerberus を選択しました。
Nextを押したら、いくつかの警告でますが、スルーしてOKとかたたきます。
特にこのダイアログは目立つ感じですが、ブートローダーのファームが古いから書き換えろみたいなことが書いてあるようなのですが、リンク先を見たら基板の上の端子を繋がないといけないみたいなことが書いてあったので、普通にスルーしました。
ソケットのルール
.NET Gadgeteerのメインボード上には同じ形のソケットがいくつも並んでいますが、すべてが同じデータを流せるようにはなっていません。にもかかわらず先ほど8番のソケットにUSB Client SPモジュールを差し込めるということがわかったのには理由があります。
メインボードのソケットの横に書かれているアルファベットと、モジュールに書かれているアルファベットが一致する必要があります。
たとえば、先ほどの写真で 5 番のソケットには「CS Y」と書かれています。これはモジュール側に C か S か Y と書かれているモジュールを差し込めるという意味です。標準添付のモジュールでいくと、LED7RモジュールにはYと書かれていますので、この 5 番のソケットに差し込めるということです。8 番ソケットは D と書かれていますので、D と書かれてる USB Client SP モジュールが接続できた、ということになります。
Lチカしてみる
今回はモジュールを使わずに手っ取り早くC#のプログラムを動かしてみようと思います。メインボード上にあるデバッグ用のLEDを1秒周期でON/OFFを繰り返して点滅させます。これはLチカ*4といい組み込みにおけるHello Worldといわれているそうです。
まず、Visual Studio を開いて「.NET Gadgeteer Application (.NET MF 4.2)」を選びます。
プロジェクトが作成されるので、Program.cs を開いて、ProgramStarted を下記のように書きます。
// using 省略(デフォルトのままにしておく) namespace GadgeteerApp1 { public partial class Program { void ProgramStarted() { Debug.Print("Program Started"); GT.Timer t = new GT.Timer(1000); bool value = false; t.Tick += (ti) => { value = !value; Mainboard.SetDebugLED(value); }; t.Start(); } } }
たったこれだけで、メインボード上のLEDが点滅します。ラムダも普通に使えてすばらしいですね。