シリアル通信をあと少し(Arduino詳解)

Arduino詳解その19です。前回の記事はこちらです。

hirocom777.hatenadiary.org

もうちょっとだけシリアル通信

 前回でキッチンタイマーは完成しました。一つ形になると達成感がありますね。で、この後は、引き続きArduinoの機能について解き明かしていこうと思います。連載の中で2回ほどシリアル通信について述べた回がありましたが、今回はその続きを紹介します。
hirocom777.hatenadiary.org
hirocom777.hatenadiary.org

もう一つのシリアル通信

 シリアル通信は、Arduinoを語る上で無くてはならない要素です。PCとの通信、スケッチの書込みはシリアル通信で行われます。でも、シリアル通信はPCとの通信だけに使用されるわけではありません。シリアル通信を使用して制御するモジュール類もありますし、他のマイコンポードとの通信に使用する例もあります。この様にPC以外のデバイスとシリアル通信したい場合はどうすればいいでしょうか?一つの方法として、PCと接続しているピン(0,1番ピン)を切り替えて使う方法があります。GROVEベースシールドにも"UART"と記述されているコネクターがあり、ここから通信対象に接続することが出来るようになっています。でも、この方法は切り替えの手間が必要で、スケッチ書込み時のトラブルが発生したり、デバッグ時に動作状況をシリアルモニターで確認できなかったり等の問題があります。他のボードでは、複数のシリアル通信機能付きピンを持っているものあるのですがArduinoUNOでは一つだけです。
f:id:HiroCom777:20200830215811j:plain

ソフトウェアシリアル

 そういうときのために、Arduinoでは標準ライブラリとして"ソフトウェアシリアル"という手法が用意されています。通常のシリアル通信はCPU本体内にあるシリアル通信用機能(ハードウェア)を使用したものです。ソフトウェアシリアルは、この機能をソフトウェアで実現したものです。今回は、以下のスケッチを用意しました。

#include <SoftwareSerial.h>
SoftwareSerial SoftSerial(2, 3);

void setup()
{
  pinMode(0, INPUT);
  pinMode(1, INPUT);
  pinMode(2, INPUT);
  pinMode(3, OUTPUT);
  SoftSerial.begin(9600);
  SoftSerial.setTimeout(100);
}

void loop() {
  if (SoftSerial.available()) {
    String data = SoftSerial.readString();
    SoftSerial.println(data);
  }
}

このスケッチでは、通常のシリアル通信に使用されるSerial.begin();等のコマンドは出てきません。0、1番ピンとも入力に設定した後はスケッチ内では使用していません。つまり、通常のシリアル通信機能は使用していないということです。GROVEベースシールドの"UART"と表示のあるコネクタと"D2"と表示のあるコネクタをGROVEケーブルで繋げてください。これでスケッチ起動後は標準のシリアル通信に変わってソフトウェアシリアルによるシリアル通信がPCと接続されます。接続が終わったらスケッチを書き込んでシリアルモニターを起動しましょう。シリアルモニターの送信データ欄に何かしら文字データを入力して送信ボタンを押してください。モニターに同じ文字列が表示されるはずです。ソフトウェアシリアルを使用してデータの送受信が出来ているってことです。

ソフトウェアシリアル長所と短所

この様にソフトウェアシリアルを使用すると、簡単にシリアル通信機能を増やすことが出来ます。しかしながら、ソフトウェアで機能を実現しているため、以下の様な短所があります。

・リソースを消費する
 当然ですが、メモリ、CPUのリソースを消費します。使用するのは、あくまで必要な時だけにしましょう。今回のスケッチは動作確認用です。

・送受信している間はスケッチは止まる
 標準のシリアル通信では送信、受信にバッファ(データを貯めていくところ)があり、データの送受信を実行するのもCPU以外のハードウェアが処理します。その間CPUは他の処理を実行できます。でもソフトウェアシリアルでは、シリアル通信がデータの送受信をしている間、CPUは他の処理を実行することができません。

つまり、ソフトウェアシリアルは簡単なシリアル通信を追加したい場合に使用する手法ということです。本格的に通信したい場合には、別の方法も検討する必要があるでしょう。

使用例を知っておこう

 ソフトウェアシリアルは、簡単な通信をするのに便利な機能です。次回は、今回紹介したスケッチの解説とシリアル通信の使用例について紹介していきたいと思います。
hirocom777.hatenadiary.org


Arduino UNO入門の連載記事はコチラからどうぞ!!