ラズパイ+.net 5でIOTもどき

ついに、ラズパイに手を出してしまった・・・

ちょっと、マシンルームの温度計測やメールによるアラート機能を付けたくて、とりあえず、ラズパイ(3B+)と入門キットを購入。

電子回路なんて、高校の時にイジって以来だから、全然分からないけど、とりあえず、入門書とか読みながら、簡単な回路を作ってお試し中。

入門キットのサンプルは、CやPythonなんかで書かれているけど、やはり、ここはC#で書きたいよね。

で、ラズパイに.net 5を導入。ラズパイ3B+はARM64なんだけど、デフォルトで入っている、OSは32bit(メモリ1Gだからまぁ妥当だろう)のDebianベースのOSだが、デフォルトではapt listで調べるも、dotnet-sdkは見つからない。何かしらの方法はあるのだろうが、パッケージマネージャーからインストールするのは諦めて、.net 5ダウンロードサイトからのarm32版のtar.gzを落としてきて、展開。(どうせ、複数人数で使うわけじゃないから問題無し)

で、簡単な回路を作成してみる。

回路

とりあえず、赤枠で囲んだ部分が最初に作った回路。簡単に書くと以下のような回路になっている。

青いケーブルが+3.3Vに刺さっていて、赤いケーブルはラズパイ上のGPIO0に刺さっている。GPIO0の後の()に17と書かれているのはBCMと呼ばれる番号で、Microsoft製のライブラリはこちらの番号を指定する必要がある。以下はgpioコマンドの出力で、いくつかの名前やピン番号が表示されている。ライブラリによって、使用するピン番号が違うので、注意されたい。

ラズパイGPIO

なんで複数の呼び方があるのかとか言うのは、ラズパイ入門編のサイトとかに必ず書いてあるので、そちらを参照して欲しい。

で、今回この回路でやりたいのは、LEDの点灯・消灯である。回路を見ると、GPIO0(BCMピン番号17)が邪魔をする形になっているので、LEDを点灯させたければ、GPIO0(BCMピン番号17)の電位を落とす必要がある。逆に消灯させたい場合は電位を上げれば良い。

ということで、以下のようなコードでプログラムからLEDのオン・オフが実現できる。
(プロジェクトに↓のパッケージ追加が必要)

  • System.Device.Gpio
  • Iot.Device.Bindings

プログラムは単純にConsoleアプリで作ってみた。

using System;
using System.Threading;
// GPIOライブラリ
using System.Device.Gpio;

namespace oneLedCtrl
{
    class Program
    {
        static void Main(string[] args)
        {
            const int pinno = 17;   // BCM Pin No
            // GPIOコントローラインスタンス作成
            var ctrl = new GpioController();
            // Pinのオープン(書き込みモード)
            ctrl.OpenPin(pinno,PinMode.Output);
            PinValue val = PinValue.High;
            // 1秒ごとに点滅を繰り返す
            for(;!Console.KeyAvailable;) {
                if (val == PinValue.High) {
                    val = PinValue.Low; // 点灯
                } else {
                    val = PinValue.High; // 消灯
                }
                // GPIO0(BCM 17)に書き込み
                ctrl.Write(pinno,val);
                Thread.Sleep(1000);
            }
            ctrl.ClosePin(pinno);
        }
    }
}

これくらいの回路なら、簡単だからいいんだけど、複雑なのは配線も面倒だよね。
業務で使うのなら、やっぱり、回路が組んである製品を購入すべきなんだろうね。

まぁ、とりあえずは、入門キットで色々と遊んでみるつもり。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。
カテゴリー: C#, IOT, raspberry pi, 技術系 パーマリンク

ラズパイ+.net 5でIOTもどき への1件のフィードバック

  1. takezou のコメント:

    Iot.Device.Bindingsパッケージに有名どころのDevice(チップ)がクラスとして、ラッピングされている。
    これを使うと、回路さえ作れてしまえば、面倒なプロトコルを知らなくても、Deviceのコントロールや値取得が簡単にできる。
    例えば、温湿度センサーのDHT11とかはC等を使用した場合、周期的にビットを読み込んで、計算しないといけないのだが、Dht11クラスを使用した場合、プロパティ値として、温度,湿度を取得することが可能。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください