Arduinoでソフトウェアシリアル通信を使用する

スポンサーリンク
Arduino
スポンサーリンク

Arduino UNOにはUARTのchが一つしかないため、デバッグの時などちょっと不便に感じていました。検索してみた結果、I/Oポートを使用してソフトウェアでシリアル通信を実現するためのライブラリがあるとのことでしたので早速試してみました。

スポンサーリンク

ソースコード

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(57600); // ハードウェアシリアルを準備
  Serial.println("Ready");
  mySerial.begin(4800); // ソフトウェアシリアルの初期化
  mySerial.println("Hello, world?");
}

void loop() {
  if (mySerial.available()) Serial.println(mySerial.readString());
  if (Serial.available()) mySerial.println(Serial.readString());
}

動作説明

  1. ソフトウェアシリアルのポートとしてpin10をRx、pin11をTxで使用します
  2. pin10,pin11をUSB-シリアル変換ICを介してPCと接続します
  3. PC側でTeraTermなどのターミナルソフトを立ち上げ、ソフトウェアシリアル用の設定を行います(改行コードはCR+LF、ボーレートは4800bps)。ボーレートは任意ですが、あまり早くすると処理が追い付かなくなる可能性があります
  4. また、Arduinoのシリアルモニタも立ち上げ、こちらはハードウェアシリアル用の通信設定を行います(改行コードはCR+LF、ボーレートは57600bps)。ボーレートは任意です
  5. プログラムを実行するとTeraTermには”Hello, world?”、シリアルモニタには”Ready”と表示されます
  6. TeraTermで文字を入力すると、入力した文字がシリアルモニタ側に表示されます
  7. シリアルモニタで文字を入力して送信ボタンをクリックすると、入力した文字がTeraTerm側に表示されます

シリアル通信のデバッグをしたい場合などに、デバッグ出力をシリアル通信で出力してしまうとそのデータが相手先に伝わってしまうため、本来の通信はハードウェアシリアル、デバッグ用の出力はソフトウェアシリアルといった使い分けをするとよさそうです。

参考

武蔵野電波様

コメント