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

C#で複数デバイスを同時制御!IoT初心者向け並列処理入門

C#で複数デバイスを同時制御するテクニック
C#で複数デバイスを同時制御するテクニック

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

生徒

「C#を使って複数の機械やセンサーを同時に動かすにはどうすればいいですか?」

先生

「C#には、複数の仕事を同時に進める並列処理という仕組みが備わっています。」

生徒

「難しそうですが、初心者でも使えますか?」

先生

「最初は少し不思議に感じるかもしれませんが、基本を覚えればとても便利ですよ。」

1. 複数デバイス制御とは?

1. 複数デバイス制御とは?
1. 複数デバイス制御とは?

IoT(Internet of Things:モノのインターネット)の世界では、一台のパソコンで複数のモーターを動かしたり、複数の温度センサーからデータを受け取ったりすることがあります。これらを順番に処理していると、時間がかかりすぎて動きが遅くなってしまいます。そこで登場するのが、並列処理です。これは、料理人が複数のコンロを使って同時に料理を作るようなものです。C#を使えば、この並列処理を効率よくプログラムに書き込むことができます。

2. 非同期処理とTaskクラスの基本

2. 非同期処理とTaskクラスの基本
2. 非同期処理とTaskクラスの基本

C#で並列処理を行う際、最もよく使われるのがTaskという機能です。これは「あとでやっておいてね」と指示を出す伝言メモのようなものです。非同期処理とは、ある処理が終わるのを待たずに次の処理へ進む仕組みのことです。これにより、一つのデバイスからの反応を待っている間に、別のデバイスを操作することが可能になります。


using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Console.WriteLine("デバイスを開始します。");
        await Task.Run(() => SensorCheck());
        Console.WriteLine("すべての作業が完了しました。");
    }

    static void SensorCheck()
    {
        Console.WriteLine("センサーを確認中...");
    }
}

3. 同時に複数の処理を実行する方法

3. 同時に複数の処理を実行する方法
3. 同時に複数の処理を実行する方法

次に、実際に二つのデバイスを同時に動かす例を見てみましょう。ここで重要なのが、await(アウェイト)というキーワードです。これは「この処理が終わるまで待機する」という意味ですが、Taskと組み合わせることで効率的な実行ができます。例えば、LEDを光らせる処理と、モーターを動かす処理を同時に開始するような場面で活躍します。


public async Task RunMultipleDevices()
{
    Task task1 = Task.Run(() => MoveMotor("A"));
    Task task2 = Task.Run(() => MoveMotor("B"));

    await Task.WhenAll(task1, task2);
    Console.WriteLine("両方のモーターが停止しました。");
}

void MoveMotor(string name)
{
    Console.WriteLine(name + "のモーターが回転中");
}

4. 処理の待ち時間と効率化

4. 処理の待ち時間と効率化
4. 処理の待ち時間と効率化

ハードウェア制御では、処理の間に遅延(ディレイ)を入れることがよくあります。例えば「センサーのデータを読み取ってから1秒待つ」といった動きです。これを単純に書くとプログラムが止まってしまいますが、Taskを使えば他の処理を並行して実行できます。これによって、センサーの反応待ち時間を有効活用し、全体の動きをスムーズにすることができます。


public async Task WaitExample()
{
    await Task.Delay(1000); // 1秒間だけ待機します
    Console.WriteLine("1秒経過しました。");
}

5. ハードウェア制御で注意すべきこと

5. ハードウェア制御で注意すべきこと
5. ハードウェア制御で注意すべきこと

複数のデバイスを同時に操作する場合、競合(コンフリクト)に注意が必要です。これは、二つのプログラムが同時に同じ部品を操作しようとして喧嘩してしまう状態です。初心者のうちは、なるべく一つの部品を一度に一つの処理で操作するようにルールを決めることが大切です。これを防ぐためのロック処理という機能もありますが、まずは同時に動かしても問題ない構成から始めるのがコツです。

6. 実践的な並列制御の構築手順

6. 実践的な並列制御の構築手順
6. 実践的な並列制御の構築手順

最後に、実際の開発で役立つ構成を紹介します。デバイスを制御するときは、まず個別の動きをメソッド(小さな機能の塊)として作ります。その後、メインの場所からそれらをTaskを使って呼び出します。これにより、コードが整理されて間違いが少なくなります。プログラミングの学習は、小さな成功を積み重ねるのが一番の近道です。最初は一つのLEDから、次は二つ、その次はモーターと、少しずつ並列処理の規模を大きくしていきましょう。


public async Task StartIoTSystem()
{
    var tasks = new List<Task>();
    tasks.Add(Task.Run(() => ControlFan()));
    tasks.Add(Task.Run(() => ControlLight()));
    
    await Task.WhenAll(tasks);
}
カテゴリの一覧へ
新着記事
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ループを完全ガイド!初心者でもわかるコレクション操作の基本