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

C#でArduinoを制御!シリアル通信の基本とプログラム作成入門

C#でArduinoと通信する基本(シリアル通信)
C#でArduinoと通信する基本(シリアル通信)

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

生徒

「パソコンのC#言語を使って、Arduinoという電子工作ボードを動かすことってできますか?」

先生

「はい、シリアル通信という仕組みを使えば、C#からArduinoに指示を送ったり、センサーの値を受け取ったりすることができますよ。」

生徒

「シリアル通信というのは、具体的にどういうものなんですか?」

先生

「簡単に言うと、パソコンとArduinoの間で、一本の線の道を使い、順番に文字やデータを送受信する方法です。さっそく仕組みを学んでいきましょう!」

1. Arduinoとシリアル通信の仕組みを理解しよう

1. Arduinoとシリアル通信の仕組みを理解しよう
1. Arduinoとシリアル通信の仕組みを理解しよう

Arduino(アルドゥイーノ)は、プログラミングをして電子部品を動かすための小さなコンピューターです。このArduinoとパソコンをUSBケーブルでつなぐと、パソコンからプログラムで指令を送ることができます。このとき使われるのがシリアル通信です。

例えるなら、シリアル通信は「一文字ずつ順番に手紙を送るやりとり」です。たくさんのデータを一度に送るのではなく、決まったルールで順番に送ることで、パソコンとArduinoという異なる機械同士でも、正確に情報を伝え合うことができます。IoT(モノのインターネット)の世界では、この通信がすべての基本となります。

2. C#でのシリアル通信に必要な準備

2. C#でのシリアル通信に必要な準備
2. C#でのシリアル通信に必要な準備

C#でシリアル通信を行うには、標準で用意されているSerialPort(シリアルポート)という機能を使います。ポートとは、情報の「入り口」や「出口」のことです。USBケーブルを挿したとき、パソコンはその差込口に「COM3」や「COM4」といった名前を付けます。この名前を指定して、通信経路を開く準備をします。

初心者が最初に突き当たる壁は、接続先の名前が合っているか確認することです。デバイスマネージャーを開くと、ArduinoがどこのCOMポートに割り当てられているかを確認できます。これが一致していないと、どんなにプログラムを書いても通信ができませんので注意してください。

3. シリアルポートを使って接続を開くコード

3. シリアルポートを使って接続を開くコード
3. シリアルポートを使って接続を開くコード

それでは、実際にC#でArduinoとつながるための準備をするコードを見てみましょう。ここでは、SerialPortクラスを新しく作成し、Arduinoが接続されているポート名と通信速度を設定します。


using System.IO.Ports;

SerialPort serialPort = new SerialPort("COM3", 9600);
serialPort.Open();
Console.WriteLine("接続完了です");

ここでの「9600」はボーレートと呼ばれる通信速度です。これはArduino側とパソコン側で完全に一致している必要があります。もしパソコンが「時速100キロ」で話し、Arduinoが「時速50キロ」で聞こうとすると話が噛み合いません。この数値が同じであることが、通信成功の秘訣です。

4. Arduinoへデータを送信する仕組み

4. Arduinoへデータを送信する仕組み
4. Arduinoへデータを送信する仕組み

接続ができたら、次はパソコンから命令を送ってみましょう。例えば「A」という文字を送って、Arduinoに繋がったLEDライトを光らせるといった処理が可能です。WriteLine(ライトライン)という命令を使えば、文字列を簡単に送ることができます。


serialPort.WriteLine("A");
Console.WriteLine("データを送信しました");

命令を送るということは、パソコンからArduinoに対して「このスイッチを押せ」と指示するようなものです。C#のプログラムでこのコードが実行されると、USBケーブルを通って、瞬時に「A」という信号がArduinoに届きます。Arduino側では、「Aを受け取ったらLEDを光らせる」というプログラムを書いておく必要があります。

5. Arduinoからデータを受け取る方法

5. Arduinoからデータを受け取る方法
5. Arduinoからデータを受け取る方法

次に、Arduino側にある温度センサーやボタンの状態を、パソコン側で受け取る方法を解説します。データを受け取るにはReadLine(リードライン)という命令を使います。これは、Arduinoが送信したデータを、改行まで読み取るという役割を持っています。


string data = serialPort.ReadLine();
Console.WriteLine("受信した値: " + data);

文字列(string)というのは、プログラミングで「文字の集まり」を扱うための型です。Arduinoから届いた温度や距離などの数値は、最初「文字」として送られてくるので、必要に応じて数字に変換して計算に使うこともできます。これでパソコンの画面上に、Arduinoで測定した数値を表示させることが可能になります。

6. 通信が終わったらポートを閉じる大切さ

6. 通信が終わったらポートを閉じる大切さ
6. 通信が終わったらポートを閉じる大切さ

プログラムが終了するときや、別のアプリケーションに接続先を切り替えたいときは、必ずポートを閉じる必要があります。Close(クローズ)メソッドを忘れると、次回のプログラム起動時に「ポートが使用中です」というエラーが出てしまい、通信ができなくなることがあります。


serialPort.Close();
Console.WriteLine("ポートを閉じました");

例えるなら、電話をかけ終わったあとに受話器を置かないのと同じ状態です。受話器を置かなければ、次の人が電話をかけようとしても話し中になってしまいますね。プログラムにおいても、「開いたドアは閉める」という原則を徹底することで、安定した動作が可能になります。これだけで、基本的な制御は完璧です。

カテゴリの一覧へ
新着記事
New1
C#
C#のDictionary(辞書)の使い方を初心者向けに完全解説!キーと値でデータ管理を学ぼう
New2
C#
C#の数値型をマスターしよう!int・double・decimalの違いと使い方
New3
C#
C#で始めるIoT開発!音声認識とスピーカー制御の仕組みを解説
New4
Azure
Azure Reposの使い方を徹底解説!Gitによるソースコード管理とブランチ戦略(Gitflow)
人気記事
No.1
Java&Spring記事人気No1
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.2
Java&Spring記事人気No2
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.3
Java&Spring記事人気No3
Azure
Azureストレージの冗長性比較!LRS/GRS/ZRSの選び方とコストの最適解を完全解説
No.4
Java&Spring記事人気No4
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.5
Java&Spring記事人気No5
C#
C#のログ出力入門!SerilogとNLogの使い方を徹底解説
No.6
Java&Spring記事人気No6
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本
No.8
Java&Spring記事人気No8
COBOL
COBOLの小数点の扱いと符号付きデータ型(S, V)の使い方を初心者向けに解説!