カテゴリ: C# 更新日: 2026/08/16

C#で赤外線通信(IR)入門!IoT・ハードウェア制御で家電を操る方法

C#で赤外線通信(IR)を使う方法(送信・受信)
C#で赤外線通信(IR)を使う方法(送信・受信)

先生と生徒の会話形式で理解しよう

生徒

「C#を使って、パソコンから赤外線リモコンみたいに家電を操作することってできるんですか?」

先生

「はい、可能です。C#はハードウェア制御が得意な言語で、赤外線送信機や受信機を組み合わせることで、IoTデバイスとして活用できます。」

生徒

「プログラムで物理的なものを動かすなんて難しそうですが、初心者でも大丈夫でしょうか?」

先生

「基本を一つずつ理解すれば大丈夫です。まずは赤外線通信の仕組みから学んでいきましょう。」

1. 赤外線通信(IR)の仕組みと基本

1. 赤外線通信(IR)の仕組みと基本
1. 赤外線通信(IR)の仕組みと基本

赤外線通信とは、光の目に見えない「赤外線」を点滅させることで、信号を送る技術のことです。リモコンのボタンを押すと、先端から目に見えない光が高速で点滅し、テレビなどの家電がそれを受け取って命令を解釈します。IoT(モノのインターネット)の世界では、この仕組みをパソコンとマイクロコントローラー(Raspberry PiやArduinoなど)を使って制御します。

C#で赤外線通信を扱うには、まずハードウェア側で「送信機(LED)」と「受信機(フォトダイオード)」を制御する必要があります。これらをパソコンのUSBポートなどに接続し、プログラムから電流のオン・オフを高速で切り替えることで、信号を再現します。プログラミングにおいて、このオン・オフの信号をパルスと呼びます。このパルスの長さや間隔を調整することで、特定の命令を送ることができるのです。

2. IoT・ハードウェア制御に必要な準備

2. IoT・ハードウェア制御に必要な準備
2. IoT・ハードウェア制御に必要な準備

C#でハードウェアを動かすには、標準機能だけでは足りないことが多いため、ライブラリを使用するのが一般的です。ライブラリとは、誰かが作ってくれた「便利な部品セット」のようなものです。今回はハードウェアを扱うための「System.Device.Gpio」といったライブラリがよく使われます。まずは開発環境であるVisual Studioを用意し、NuGetパッケージマネージャーから必要なライブラリを追加しましょう。

また、赤外線を使うためには「ブレッドボード」や「ジャンパーワイヤー」といった電子部品も必要です。これらは、はんだ付けをせずに電子回路を組むための道具です。まずは、パソコンとRaspberry Piなどの小型コンピュータを接続し、C#プログラムがハードウェアのピンに電圧をかけられる状態を作ることが最初のステップです。

3. C#で赤外線を送信するコードの基礎

3. C#で赤外線を送信するコードの基礎
3. C#で赤外線を送信するコードの基礎

赤外線送信は、一定の周波数でLEDを高速点滅させる作業です。以下のコードは、GPIO(ハードウェアの入出力端子)を制御して、特定のピンから信号を送るイメージです。このコードでは、指定した時間だけLEDを点灯・消灯させています。


using System.Device.Gpio;
using System.Threading;

var controller = new GpioController();
int pin = 18; // 使用するGPIOピン番号
controller.OpenPin(pin, PinMode.Output);

// 赤外線を送信する処理
for (int i = 0; i < 10; i++)
{
    controller.Write(pin, PinValue.High); // 点灯
    Thread.Sleep(1); // 1ミリ秒待機
    controller.Write(pin, PinValue.Low);  // 消灯
    Thread.Sleep(1);
}
controller.ClosePin(pin);

このように、GPIO(General Purpose Input/Outputの略で、汎用的な入力・出力端子のこと)を操作して、High(電圧が高い)とLow(電圧が低い)を交互に切り替えることで、赤外線信号を作り出します。

4. 赤外線データを受信して解析する

4. 赤外線データを受信して解析する
4. 赤外線データを受信して解析する

受信は、赤外線受光モジュールを使用して行います。送信と違い、受信機は「光が当たっているか、当たっていないか」を常に監視します。以下のプログラムでは、受信モジュールが信号を検知したときに、そのパルスの時間を計測します。


using System.Device.Gpio;
using System.Diagnostics;

var controller = new GpioController();
int inputPin = 17;
controller.OpenPin(inputPin, PinMode.Input);

Console.WriteLine("待機中...");
while (true)
{
    if (controller.Read(inputPin) == PinValue.Low)
    {
        Console.WriteLine("信号を検知しました!");
        break;
    }
}

実際の解析では、信号がどれくらいの時間「Low」の状態だったかを記録することで、家電メーカー独自のプロトコル(通信のルール)を特定します。このルールを解析することで、特定のボタンの信号をそのままコピーして保存しておくことができます。

5. リモコン信号を記録・再現するコツ

5. リモコン信号を記録・再現するコツ
5. リモコン信号を記録・再現するコツ

家電のリモコン信号は、非常に正確なタイミングが要求されます。C#で制御する場合、WindowsやLinuxなどのOSが途中で他の処理を行うと、信号のタイミングがわずかにズレることがあります。これを防ぐためには、マルチスレッドの概念が重要です。スレッドとは、プログラムの中で同時に動く作業列のことです。メインの処理とは別に、赤外線通信専用のスレッドを作ることで、タイミングの精度を高めます。

また、データが正しく読み取れない場合は、赤外線の周波数(38kHzが一般的)が合っているかを確認してください。赤外線LEDには様々な種類があり、受信モジュールも特定の周波数に反応するように作られています。この「合わせる作業」が、ハードウェア制御の醍醐味であり、もっとも調整が難しい部分でもあります。

6. ハードウェア制御におけるエラーと対策

6. ハードウェア制御におけるエラーと対策
6. ハードウェア制御におけるエラーと対策

プログラムが思った通りに動かないときは、ハードウェアの接続ミスを疑うのが鉄則です。配線がしっかりと刺さっているか、電源電圧は正しいかを確認しましょう。また、C#コードにおいて、ピンをオープンしたままプログラムが終了してしまうと、次に起動したときにエラーが出ることがあります。プログラムの終了時に必ずcontroller.Dispose()を呼んで、リソースを解放する癖をつけましょう。


try
{
    // GPIO操作のメイン処理
}
catch (Exception ex)
{
    Console.WriteLine($"エラーが発生しました: {ex.Message}");
}
finally
{
    controller.Dispose(); // 安全に終了する
}

このtry-catch-finallyブロックを使うことで、エラーが発生しても安全にピンを閉じることができ、ハードウェアの故障を防ぐことができます。プログラミングの学習において、こうした「安全な終了処理」は非常に大切な考え方です。

7. C#によるIoTアプリケーションの可能性

7. C#によるIoTアプリケーションの可能性
7. C#によるIoTアプリケーションの可能性

赤外線通信をマスターすれば、スマートホームの自作も夢ではありません。例えば、スマホのアプリからC#で書いたプログラムを呼び出し、帰宅する前にエアコンをつけたり、テレビのチャンネルを自動で切り替えたりすることが可能になります。C#は非常に強力で、クラウドサービスと連携させれば、外出先から家電を操作するシステムだって構築できます。

最初は小さなLEDを点滅させることから始まりますが、その先には、自分の生活を自分だけのプログラムで便利にするという大きな可能性が広がっています。まずは、目の前にあるリモコンの信号を解析し、パソコンから同じ信号を出して家電が反応する瞬間を体験してみてください。それが、IoTマスターへの第一歩です。

カテゴリの一覧へ
新着記事
New1
C#
C#とは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
New2
C#
C#のメソッドを引数に渡す方法!高階関数の基本を学ぼう
New3
Azure
Azure Front Door Analytics活用|リアルタイム監視とレポートで通信を分析
New4
COBOL
COBOLで数値比較とALPHABETIC・NUMERIC条件をやさしく解説!初心者でも安心ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.2
Java&Spring記事人気No2
COBOL
COBOL教育における教材とリソース完全ガイド!初心者でもわかるプログラミング学習の選び方
No.3
Java&Spring記事人気No3
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.4
Java&Spring記事人気No4
C#
C#のLINQでWhere句を使いこなす!初心者でもわかるデータ抽出とフィルタリング
No.5
Java&Spring記事人気No5
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本