見出し画像

シリアル通信

私のごく大雑把な理解では、一本の信号線上で、「スイッチのオン・オフ」のタイミングを使って情報を送る、のがシリアル通信、ですよね?(GNDもいる、送信、受信があるから全部で三本線ですね)

普段、ArduinoUNO とパソコンとをUSBケーブルでつないで、スケッチをいじりながら、さんざん「シリアルモニター」のお世話にはなっています。

が、UNOのデジタルポート(0,1)を使って・・というのは試しておらず、実際意識もしていなかったので、やってみました。

Arduino公式のレファレンスで

まず、定期的にSerialでデータを発信する側をUNOで作ってみます。

void setup() {
 Serial.begin(9600);
}

void loop() {
 Serial.println("ABC");
 delay(5000);
 Serial.println("DEF");
 delay(5000);
 Serial.println(1.23);
 delay(5000);
 Serial.println(456);
 delay(5000);
}

5秒おきに、適当に文字列と、小数、整数を出力するようにしてみました。

シリアルモニターで見ると

画像1

この構成(USBはPCに繋がっています)

画像2

はOKです。

では、次。

UNOとPCとの間にArduino MEGAを入れてみます。

画像3

・UNOのUSB端子にはモバイルバッテリーをつないでいます。

・UNOのGND端子とMEGAのGND端子
・UNOの、DIGITAL0(RX)端子とMEGAのDIGITAL16 (TX2)端子
・UNOの、DIGITAL1(TX)端子とMEGAのDIGITAL17 (RX2)端子
の計3本をジャンパワイヤ3本でつないでいます。

・MEGAのUSB端子はPCにつなげています。

これで「MEGA」の側のスケッチは

String str;
void setup() {
 Serial.begin(9600);
 Serial2.begin(9600);
}

void loop() {
 if(Serial2.available() > 0){
   str = Serial2.readStringUntil('\n');
   Serial.println(str);       
 }
 delay(1000);
}

Serial2に信号が来たらそっくりそのままSerialに転送してやります。PC側では

画像4

無事、MEGAによる「中継」ができているようです。

まあ、こんなことをやってみたくてシリアルポートが複数ある「MEGAにした」

わけなんです。

この記事が気に入ったらサポートをしてみませんか?