C#でIoTプログラミング
皆さんはRaspberryPi上でIoTプログラミングする時はどの言語を使っていますか?
たぶんほとんどの人はPythonでしょうか。それともC&C++でしょうか。
今回あまりなじみのないC#でIoTプログラミングを紹介していきたいと思います。
C#は当初Windows向けアプリケーションを開発するためのプログラミング言語でしたが、マイクロソフト社が提供する.NETに対応することでWindows以外のiOS、Android、MacOS、Linux等様々なプラットフォーム上のアプリケーションを開発することができるプログラミング言語になりました。それ以外にもUnityでもアプリ開発用のプログラミング言語として利用されています。
第1回目としてRaspberryPiに.NETのインストール方法と定番のLチカまで解説したいと思います。
今回使用するハードウェア
・RaspberryPi4BもしくはRaspberryPi5
・Grove LED Red
・GROVE - 4ピン-ジャンパーメスケーブル
もしくは
・ブレッドボード
・赤色LED
・330Ω抵抗
・ジャンパーワイヤ
今回使用するソフトウェア
・Raspberry Pi OS 64-bit bookworm(2024/03/15)
・.NET SDK 8.0.302
ハードウェアの準備
RPi Grove LED
5V---------VCC(赤)
GND--------GND(黒)
18Pin------SIG(黄)
配線は3本になります。
Grove LEDではなくブレッドボードで配線する場合はGNDと18Pinだけ配線することになります。
.NET SDKのインストール
それでは次に.NET SDKのインストールを行います。
Linux向けにインストールスクリプトが用意されていますので、ダウンロードして実行します。
ターミナル上で次のコマンドを実行します。
$ wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
$ chmod +x ./dotnet-install.sh
$ ./dotnet-install.sh --version latest
続いて環境変数の設定を追加します。
.bashrcファイルの最後に次の2行を追加します。
export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools
追加したら次のコマンドで.bashrcを再読み込みしておきます。
$ source .bashrc
インストールができているか次のコマンドで確認できます。
$ dotnet --version
8.0.302
プロジェクトの作成
.NETではテンプレートを利用してプログラミングを始めるのが一般的です。
今回はコンソールアプリを作成していきます。
$ dotnet new console -o Blink
$ cd Blink
dotnet new "テンプレート" -o "アプリ名" とすることでアプリのひな型が生成されます。
試しにアプリケーションフォルダ(ここではBlinkフォルダになります)で実行してみます。
$ dotnet run
Hello, World!
Blinkフォルダは以下になります。
プログラムはProgram.csに書かれています。
次からはProgram.csの内容を書き換えていきます。
$ ls -al
total 24
drwxr-xr-x 4 pi pi 4096 Jul 9 14:54 .
drwxr-xr-x 4 pi pi 4096 Jul 9 14:53 ..
drwxr-xr-x 3 pi pi 4096 Jul 9 14:54 bin
-rw-r--r-- 1 pi pi 252 Jul 9 14:53 Blink.csproj
drwxr-xr-x 3 pi pi 4096 Jul 9 14:54 obj
-rw-r--r-- 1 pi pi 105 Jul 9 14:53 Program.cs
パッケージの追加
LEDを制御するためにはGPIOライブラリが必要になります。
.NETでは必要なライブラリをパッケージとしてインストールします。
$ dotnet add package System.Device.Gpio
Program.csの書き換え
Program.csの内容を以下のように書き換えます。
//パッケージの読み込み
using System;
using System.Device.Gpio;
using System.Threading;
//アプリケーションの終了方法をコンソールに出力
Console.WriteLine("プログラムを終了するにはCTRL+Cを押してください。");
//LEDを制御するPinの指定
int pin = 18;
//GPIOコントローラーのインスタンスを作成
using var gpio = new GpioController();
//指定したPinを出力モードで開く
gpio.OpenPin(pin, PinMode.Output);
//LEDの状態を示す変数
bool ledOn = true;
//ループ
while (true)
{
//ledOnがTrueだったらPin(18)をHighにする、そうでなければLowにする。
gpio.Write(pin, ((ledOn) ? PinValue.High : PinValue.Low));
//1秒間停止
Thread.Sleep(1000);
//ledOnの値を反転する
ledOn = !ledOn;
}
書き換えができたら実行してみましょう。
$ dotnet run
プログラムを終了するにはCTRL+Cを押してください。
しばらくするとLEDが1秒ごとに点滅を始めます。
以上でプログラムが完成しました。
次はGPIOのデジタル入力処理を紹介する予定です。