
シリアル通信
私のごく大雑把な理解では、一本の信号線上で、「スイッチのオン・オフ」のタイミングを使って情報を送る、のがシリアル通信、ですよね?(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秒おきに、適当に文字列と、小数、整数を出力するようにしてみました。
シリアルモニターで見ると
この構成(USBはPCに繋がっています)
はOKです。
では、次。
UNOとPCとの間にArduino MEGAを入れてみます。
・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側では
無事、MEGAによる「中継」ができているようです。
まあ、こんなことをやってみたくてシリアルポートが複数ある「MEGAにした」
わけなんです。