読者です 読者をやめる 読者になる 読者になる

.NET Gadgeteerが結構おもしろかったので即ポチして動かしてみた

f:id:iseebi:20130805020805j:plain

先日、.NET Micro Framework ハッカソンというイベントに参加して、.NET Gadgeteer に触ってみたら思いの外簡単で楽しそうだと思いました。

アプリ屋さんが苦手とするところのはんだづけをスルーして必要なものを作れて、かつお値段的にも手が届くので、昨今のスマートフォンと組み合わせたフィジカルコンピューティングで使えるようになるとよさげだと思ったので、買ってみて試すことにしました。

.NET Gadgeteer とは

f:id:iseebi:20130805021405p:plain

.NET Micro Framework という実行環境*1を使って、さくっと小規模な組み込みシステムを作れるツールキットです。
マイコンとソケットが実装されている「メインボード」と、ソケットにつなぐ「モジュール」を組み合わせて、マイコンの上で動くプログラムをC#で記述すれば、あっという間にくみ上げることができます。

接続の定義も Visual Studio 上でさくっとでき、イーサネットモジュールをつなげばHTTPアクセスも、HTTPサーバー化もOK。

f:id:iseebi:20130805021755p:plain

モジュールをソケットにつなぐだけではんだ付け不要、実際のプログラムはC#で書ける、日本国内の通販で買えてお値段もおこづかいで手が届くレベルというところで、アプリ屋さんが趣味のレベルで遊ぶデバイスとしてはかなりよい感じです。

また、ソケットは完全に独自仕様というわけではなく、その中で流れる信号は業界標準のものになっています。.NET Gadgeteer Socket Typesにあるとおりにソケットを結線し、モジュールを実装すれば独自にモジュールを作り出すこともできます。

ハードをえらぶ

f:id:iseebi:20130803220735j:plain

.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

ファームウェアのアップデート

実際にものが届いたら、ファームウェアをアップデートしましょう。Cerberus の場合、 8 番のソケットと、赤いUSB Client SPモジュールをつないで、PCのUSBポートにつなぎます。

f:id:iseebi:20130805012207j:plain

その後、FEZ Config を起動して、Firmware Update します。

f:id:iseebi:20130805021930p:plain

今回は Cerberus だったので、Cerberus を選択しました。

f:id:iseebi:20130805022020p:plain

Nextを押したら、いくつかの警告でますが、スルーしてOKとかたたきます。

f:id:iseebi:20130805022159p:plain

特にこのダイアログは目立つ感じですが、ブートローダーのファームが古いから書き換えろみたいなことが書いてあるようなのですが、リンク先を見たら基板の上の端子を繋がないといけないみたいなことが書いてあったので、普通にスルーしました。

ソケットのルール

.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)」を選びます。

f:id:iseebi:20130805022444p:plain*5

プロジェクトが作成されるので、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が点滅します。ラムダも普通に使えてすばらしいですね。

ところで

C# が動いたところで、結局 iOS や Android から使えないと宝の持ち腐れ。そういうわけで今回、Breakoutモジュールという、独自にモジュールを実装するためにピンをそのまま接点に変換できるモジュールを同時に買ってあります。

f:id:iseebi:20130803222507j:plain

これを使って、もにょもにょっとやれば夢が実現できるのでは…ということで、近日チャレンジしてみようと思います。

*1:どっちかというと、Micro FrameworkはOSに分類されるらしい

*2:価格は2013/08/05現在

*3:厳密には2010でもいけるけど古い環境のことなんて忘れましょう

*4:LEDをチカチカさせる

*5:この環境にはモジュールを作るための .NET Gadgeteer SDK も入ってるので、ちょっと余分なテンプレートも入ってます。