しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Raspberry Pi 2 + Mono 3.12.0 + Raspberry# IO で GPIO を使ったアプリケーションを書いてみる

そろそろ Raspberry Pi 2 にランタイムなどを入れるのも落ち着いてきたので、GPIO を使うアプリケーションを書いて試してみることにしました。

GPIO に接続するためのブレッドボードやジャンパピンなどを買い揃えるのが途中でめんどくさくなったので、Amazon で色々と揃ったスターターキットを買いました。

秋葉原で買い揃えるよりも割高ですが、楽する方を取りました。

まずはテンプレ通りに LED を点灯させてみました。GPIO 25 と GND に LED を接続して、サクッと試すためにシェルからコマンドを叩いて実行します。root になっていないと怒られるので注意。

echo 25 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio25/direction
echo 1 > /sys/class/gpio/gpio25/value

たったこれだけですが、これで LED が点灯状態になります。

f:id:shiba-yan:20150221163615j:plain

LED を消灯させるには value に 0 を書き込めば OK です。使い終わったら unexport で閉じます。

echo 0 > /sys/class/gpio/gpio25/value
echo 25 > /sys/class/gpio/unexport

とりあえず基本的な流れが分かったところで、今度は C# から同じように GPIO を叩いてみます。今回使ったライブラリは Raspberry# IO というものです。

他にも種類があるみたいですが、ライブラリの設計がイケてそうだったので選びました。

とりあえず今度はチカチカ点滅させてみたいので、README に書いてある通りにコードを書きました。GPIO 25 を使っているので対応する ProcessorPin.Pin25 を使います。

static void Main(string[] args)
{
    var led1 = ProcessorPin.Pin25.Output();

    var connection = new GpioConnection(led1);

    for (int i = 0; i < 20; i++)
    {
        connection.Toggle(led1);

        Thread.Sleep(500);
    }

    connection.Close();
}

これを Raspberry Pi 2 に SCP でコピーしてから Mono を使って実行してみると、何故か全く動きません。

少し原因を探ってみると、NuGet で公開されているバージョンは古いらしく、リポジトリから最新版をダウンロードして自前でコンパイルしたものを使うと動作しました。

これでやっとスタートラインに立てたという感じですね。もうちょっと遊べる時間が欲しい。