C#とRaspberry Piで始めるIoTプログラミング!Windows IoT Core入門
生徒
「C#を使ってRaspberry Piでハードウェアを動かしてみたいのですが、どうすればいいですか?」
先生
「Windows IoT CoreというOSを使うと、使い慣れたC#でRaspberry Piの制御ができますよ。」
生徒
「難しそうですが、初心者でも本当にできるんでしょうか?」
先生
「基礎から順を追って解説しますので、一緒に学んでいきましょう!」
1. Raspberry PiとWindows IoT Coreの基礎知識
まずは、今回使う道具について説明します。Raspberry Pi(ラズベリーパイ)とは、名刺サイズの小さなコンピュータのことです。これ一つで、パソコンのように動かしたり、センサーを繋いで家電を操作したりできます。次に、Windows IoT Coreですが、これはRaspberry Piのような小さな機械向けに作られた、Windowsの特別なバージョンです。IoTとは「モノのインターネット」のことで、インターネットを通じて機械を遠隔操作したり、データを収集したりする技術を指します。
C#(シーシャープ)は、マイクロソフトが開発したプログラミング言語です。初心者にも読みやすく、かつ強力な機能を持っています。通常、ハードウェアの制御は難しいイメージがありますが、C#を使えば直感的にプログラムが書けます。パソコン自体を触ったことがないという方でも、まずは「機械に命令を出すための言葉」だと考えてください。
2. 開発環境の準備とセットアップ
次に、プログラミングを行う場所を作ります。これにはVisual Studio(ビジュアルスタジオ)というソフトが必要です。これは、プログラマーがプログラムを書くための机や道具が全て揃った「作業場」のようなものです。Visual Studioを使うと、コードのミスを教えてくれたり、難しい設定を自動で行ってくれたりと、初心者にとって非常に心強い味方になります。
Windows IoT Coreを使うには、まずRaspberry Piに専用のOS(オペレーティングシステム:コンピュータ全体を動かす基本ソフト)を書き込む必要があります。SDカードという小さな記憶媒体を使い、専用のツールで準備します。これらが整うと、Windowsパソコンで書いたC#のプログラムを、ネットワーク越しにRaspberry Piへと送り込み、動かすことができるようになります。
3. GPIOの概念と役割
Raspberry Piには、GPIO(ジーピーアイオー)と呼ばれる端子がついています。これはGeneral Purpose Input/Outputの略で、「汎用入出力」という意味です。少し難しく聞こえますが、要するに「電気信号を出す場所」と「電気信号を受け取る場所」だと思ってください。LEDライトを光らせたり、スイッチが押されたことを読み取ったりするために使用します。
例えば、ドアのセンサーから信号がくればライトを点ける、というような仕組みを作る場合、GPIOが窓口となります。C#のコードを通じて、「この番号のGPIOに電気を流して(オンにして)!」と命令を送ることで、物理的なハードウェアが反応します。
4. C#でLEDを点滅させるプログラム
実際にLEDを光らせるための基本的なコードを見てみましょう。GPIOを操作するには、その番号を指定して「出力モード」に設定する必要があります。出力モードとは、そこから電気を送り出すための準備状態のことです。
var gpio = GpioController.GetDefault();
var pin = gpio.OpenPin(18);
pin.SetDriveMode(GpioPinDriveMode.Output);
pin.Write(GpioPinValue.High);
このプログラムでは、GPIOの18番ピンを使い、そこに高い電圧(High)をかけることでLEDを点灯させています。非常にシンプルですが、これがIoTの第一歩です。プログラムは上から順番に読み込まれます。まずは準備をして、次に操作を実行するという流れを意識しましょう。
5. ループ処理で定期的に動作させる
プログラムの素晴らしいところは、同じことを何回でも正確に繰り返せる点です。タイマーやループという機能を使います。例えば、ライトを1秒ごとに点滅させたい場合、プログラムを一時停止させる命令と、それを繰り返す処理を組み合わせます。
while (true)
{
pin.Write(GpioPinValue.High);
Task.Delay(1000).Wait();
pin.Write(GpioPinValue.Low);
Task.Delay(1000).Wait();
}
while(ホワイル)文を使うと、中の処理を永遠に繰り返します。Task.Delay(タスクディレイ)は、指定した時間だけプログラムを待機させるための命令です。これを組み合わせることで、機械が自律的に動き続けるシステムを作ることができます。
6. センサーからの入力を受け取る
最後は、入力を受け取るプログラムです。ボタンを押した時に何かのアクションを起こすには、ピンを「入力モード」にする必要があります。入力モードとは、外から流れてくる電気の信号を読み取るための設定です。
pin.SetDriveMode(GpioPinDriveMode.Input);
if (pin.Read() == GpioPinValue.High)
{
Debug.WriteLine("ボタンが押されました!");
}
if(イフ)文を使って、条件を判断します。「もしボタンからの信号がオンの状態なら、メッセージを表示する」という命令ですね。これらを応用すれば、温度センサーで部屋の暑さを感知したり、カメラで動くものを検知したりといった、面白いプロジェクトに発展させることが可能です。C#はハードウェアを制御する楽しさを存分に味わえる言語なのです。