NETMF : OutputPortの使い方とGR-PEACH / GR-SAKURAでの LED 点灯のコード例

GR-PEACH が発売され、ネット上にも記事が見つかるようになってきました。

WP_20150313_006

お待たせしました、そろそろみんなで PinKit を楽しみましょう!

「GR-PEACH についてはしばらく触れないでおこう」ということで情報公開を自粛していましたが、すでに他の方が書いた情報が出回っているので、私もそろそろ書いたり喋ったりしてもいいでしょう。(笑)


.NET Micro Framework の基本中の基本、入出力ポートについて3回(くらい)に分けて紹介します。
今回は OutputPort がテーマです。

なお、これらのポートは “GPIO” (= General Purpose I/O) といい、文字通り汎用的に利用できる入出力端子です。このため、どのポートを入力として使用するか、出力として使用するかを宣言するだけで用途を限定せずに利用できます。

GR-PEACH の基本的な扱い方の説明は省略します。このあたりは マイクロソフトの太田さんのブログ に詳しい説明があるので、そちらを参照してください。
(リクエストがあれば私も書きますが)


OutputPort

OutputPort は文字通り、出力ポートです。もう少し書くと、デジタル出力用のポートです。
例えば、LED、ディスプレイ、モーターなどを OutputPort に接続します。

OutputPort は以下のように宣言します。

var led = new OutputPort(<ポート番号>, <出力の初期値>);

何番ポートに何が繋がっているのか、あるいは何番ピンが繋がっているのかは、回路によって異なります。回路図や開発者向けの資料などで確認する必要があります。
GR-PEACH, GR-SAKURA の LED については後述。

OutputPort には Write メソッドがあります。

Write(<true または false>);

High を出力するには引数を true に、Low を出力するには false にします。簡単で分かりやすいですね。


GR-PEACH のLED

GR-PEACH には、ボード上に LED が4個載っています。(他に給電状態を示す LED も載っていますが、アプリでコントロールできないのでここでは数えません)

LED種類 ポート番号
ユーザーLED 0x6c
赤色LED 0x6d
緑色LED 0x6e
青色LED 0x6f

各 LED の用途は自由ですが、ユーザーLEDはアプリの動作状態を示すために使うといいと思います。何か処理を実行した時に点滅させるなど、どうでしょう。
マルチカラーLED (RGB LED) は、例えば、センサー値が正常域ならば青く点灯、危険域に達したら赤く点滅など、うまく使うと格好いいですね。

WP_20150316_006

GR-SAKURA の LED

GR-SAKURA にも4個の LED が載っていますが、PEACH とは違ってマルチカラーではなく、4個の LED が一列に並んでいます。

LED番号 ポート番号
LED1 0x50
LED2 0x51
LED3 0x52
LED4 0x56

WP_20150817_001

余談ですが、私個人としては GR-SAKURA の LED は好きです。簡易グラフ的な使い方や LED 点滅でアニメーションができますよね。


OutputPort のコード例  ~ GR-PEACH / GR-SAKURA の LED 点灯・消灯 ~

本稿の最後に、OutputPort のコード例として GR-PEACH の LED を点灯・消灯するコードを載せます。
コンパイルするには、Microsoft.SPOT.Hardware の参照を追加する必要があります。
GR-SAKURA ではコメントを参考に一部書き換えてください。

using System.Threading;
using Microsoft.SPOT.Hardware;

namespace PeachOutputPortDemo
{
    public class Program
    {
        // GR-PEACH
        //private const Cpu.Pin RedPin = (Cpu.Pin)0x6d;       // 赤
        //private const Cpu.Pin GreenPin = (Cpu.Pin)0x6e;     // 緑
        //private const Cpu.Pin BluePin = (Cpu.Pin)0x6f;      // 青
        private const Cpu.Pin UserPin = (Cpu.Pin)0x6c;      // ユーザーLED

        // GR-SAKURA
        //private const Cpu.Pin UserPin = (Cpu.Pin)0x56;      // LED4

        public static void Main()
        {
            var led = new OutputPort(UserPin, false);

            (new Thread(() =>
            {
                while (true)
                {
                    led.Write(false);
                    Thread.Sleep(1000);
                    led.Write(true);
                    Thread.Sleep(1000);
                }
            })).Start();
        }
    }
}

2015-08-17 0-23-57