PR

Arduinoのシリアルモニタの使いかたをマスターする方法を徹底解説

thorough-explanation-of-how-to-use-the-serial-monitor-included-with-arduinoide
thorough-explanation-of-how-to-use-the-serial-monitor-included-with-arduinoide

 今回は、ArduinoIDE(Arduinoの統合開発環境)でなくてはならない、シリアルモニタの使い方について徹底解説します。

 まずシリアルウインドウとはコレのことです。

 ArduinoIDEを立ち上げて右上に出てくるアイコンを押すことで表示できます。

 シリアルモニタを使うことで実現できることは大きく分けて二つです。それがこちら。

Arduino IDEのシリアルモニタでできること
  • Arduinoから値を出力する
  • Arduinoへ指令を送る

 どちらの機能も非常に強力なので、ぜひ今回の記事でマスターしてください!

この記事を読むことでわかること

Arduino IDEの機能であるシリアルモニタの使い方が理解できる

自己紹介

サラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

注意

本ブログはアフィリエイトを用いた広告を掲載しています。

シリアルモニタに文字を表示させてみよう

 シリアルモニタの表示の仕方は冒頭でご説明した通りなので省略します。ここではシリアルモニタを使えるようにするための前準備をご紹介します。

 具体的には、スケッチにシリアルモニタを使うための記述をします。勘のいい方だとお気づきかもしれませんが、シリアルモニタを使いたいと思ったスケッチ毎にこの記述をする必要があります。

 それでは具体的にどんな記述をすればよいか見ていきましょう。

setup関数で記述する内容

 まずはsetup関数で記述する内容は、Serial.begin()です。かっこの中にはボーレートと呼ばれる通信速度を記述します。

 文字で説明されてもよくわからないと思うので、実際にコードを書いておきます。

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

void loop() {
 
}

 たったこれだけです。()の中身の115200という数字自体ははいったん気にせず、そのままコピーして使ってください。後ほど解説します。

setup関数にはSerial.beginを記述する。

loop関数で記述する内容

 次にloop関数の中で記述する内容です。今回は、loop関数の中で指定した文字列をシリアルモニタに表示するようにしましょう。

 実際のコードはこちらです。

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

void loop() {
  Serial.println("hoppy");
  delay(1000);
}

 loop関数の中で記述するのは、Serial.println()です。かっこの中には表示したい文字列を記述します。文字列ですので、必ず”(ダブルコーテーション)で文字を囲むようにしましょう。

 このスケッチをArduinoに書き込んでみましょう。書き込みが完了したらシリアルモニタを開いてみてください。

 するとこのように1秒に1回hoppyという表示が増えていくのがわかるはずです。

シリアルモニタに改行付きでhoppyと出力されている

 先ほどはSerial.println()を使用しましたが、Serial.print()という関数もあります。それぞれの違いは出力するときに自動的に改行するかどうかの違いです。

 試しにSerial.println(“hoppy”)ではなく、Serial.print(“hoppy”)として出力させた結果がこちらです。

シリアルモニタにhobbyhappyと出力されている

loop関数にはprintlnを記述することでモニタに表示できる。

シリアルモニタからArduinoに文字を送ってみよう

 シリアルモニタに文字列を表示させるところまでできましたね。ここでシリアルモニタのここをご覧ください。何か文字が書けそうなテキストボックスがありますね。

ArduinoIDEのシリアルモニタの入力窓

 今度はここに文字を打ちこんで、Arduino側でその文字を処理する方法について解説します。

シリアルモニタでArduinoに文字列を送るときの注意点

 ここからシリアルモニタを使ってArduinoに文字を送っていくわけですが、いくつか注意点があります。それがテキストボックスの右側の設定です。

ArduinoIDEに表示されるボーレートとターミネータ

 この画像ではCRのみを選択しています。これは、文字を記述してエンターキーを押したときに最後に何を足してデータとして送るか?という設定です。いわゆる終端文字というものです。

 この終端文字は重要なので必ずCRにしておいてください。

シリアルモニタから文字列を取得する方法

 では実際にシリアルモニタに打ち込まれた文字列をArduinoで取得してみる方法を解説します。使うコマンドは、Serial.available()と、Serial.readStrintgUntil()の2つです。

 いきなりですがスケッチを紹介します。

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

void loop() {
  String recieveData;
  String outputData;
  if(Serial.available() > 0){
    recieveData = Serial.readStringUntil('\r');
  
    Serial.println(recieveData );
  }
}

 setup関数は先ほどのSerial.println()の時と同じなので説明は省略します。重要なのはloop関数の中です。とくに重要なのが、先ほど紹介したSerial.available()とSerial.readStringUntil()です。

Serial.available()の役割と使い方

 Serial.available()は、シリアル通信でデータが入ってきたかどうかをチェックする関数です。もしチェックしてデータがArduinoに入ってきたと認識されると、入ってきたデータの長さつまりバイト数が戻り値として出てきます。

 例えば、33333とシリアルモニタで打ち込むと、5という数値が返ってきます。逆に、なにもデータが入ってきていない場合は、-1が返ってきます。ですから、loop関数の中でSerial.availableの戻り値が0よりも大きい=データが入ってきた。と認識しているというロジックです。

Serial.readStringUntil()の役割と使い方

 Serial.readStringUntilは、名前の通り、ある文字が入ってくるまでは読み込み続ける。という関数です。例えば、エンターキーを入力の最後に打ち込むと、\rという文字が入ります。これはエンターキーも文字として認識されるためです。

 ですから、このように、\rが入ってくるまでは読み込み続けてね。とおねがいをしているわけです。

 recieveData = Serial.readStringUntil('\r');

 こうすることで、シリアルモニタに記述した文字列がrecieveDataに格納されるというわけです。

シリアルモニタのテキストボックスから文字列を取得するのはSerial.readStringUntilを使う

実は文字列を取得する方法は3つある。

 今回はある文字が入ってくるまで読み込みを続けるreadStringUtil()をご紹介しましたが、他にも2つデータを読み込む関数があります。それがこれです。

Serial.readStringUtil()以外のデータを読み込む関数
  • Serial.read()
  • Serial.readString()

Serial.read()の役割と使い方

 Serial.read()は、入ってきたデータの最初のバイトのみを戻り値として出力します。つまり、1234と入力が入ってきた場合には、最初の1のみを返します。

 もし必ず1バイトしか入ってこないとわかっている場合、もしくは入ってきたデータの1バイト目しか使わないと決まっている場合にはこちらを使うといいでしょう。

 ただし注意点としては、戻り値がintの整数型で出力されます。例えばaと入力された場合には、97と出力されます。aなのに97???と疑問に思いますよね。実はこの97というのは、先ほどちらっと出てきたアスキーコードの番号に対応しています。

 たいていの文字に関してはアスキーコードで番号が決まっています。ですから、aだろうが8だろうがすべてにアスキーコードの番号が決まっているので、戻り値はintの整数型だったというわけです。

Serial.readString()の役割と使い方

 Serial.readString()は、さきほどのSerial.read()のStringバージョンです。Serial.read()は戻り値がアスキーコードのintでしたが、このSerial.readStringはStringの文字列で返してくれます。

 ですから、aと入力すると、ちゃんとaとシリアルモニタに表示されます。Serial.readStringUntil()との使い分けですが、文字列の読み込みに時間がかかる場合や、最後に必ず決まった文字が入る場合にはSerial.readStringUtil()を使うのがおすすめです。

 なぜなら、Serial.readString()やSerial.read()は文字が入力されてからタイムアウト時間が来るまで待機するためです。どんなデータが来るかわかりませんから、タイムアウトまで待つ動作は自然ですよね。

 一方、Serial.readStringUntil()の場合は、()のなかで指定した文字が入ってきたらそこで読み込みを終了させればいいので、タイムアウトまで待つ必要がなくなります。つまり時間短縮という意味で有用であることがわかると思います。

 他にも、もし終端文字として\rや\nなどを入れた場合に、文字列として\rや\nが認識されてしまい、最後の文字だけ消去する手間が発生しますが、Serial.readString()で読み込むと、終端文字を消去した状態で文字列が返ってきます。使い勝手もこちらのほうが良いですね。

公式のドキュメントはこちら

今回のまとめ:シリアルモニタの使い方徹底解説

 今回はArduinoIDEに搭載されているシリアルモニタの解説をしました。外部との通信や、何かの値を読み取るときに手軽に使えるツールとして使えたほうが良いです。というか使わないと損です。

 そんなシリアルモニタのまとめはこうなります。

シリアルモニタに表示させるにはSerial.print()もしくはprintln()を使う。

外部入力されたデータをarduino側で取得するにはSerial.read他3個から選んで使う。

 文字列の加工など、最初は戸惑うこともあると思いますが、やっていくうちに何とかなるものなので、とりあえず失敗しながら少しずつ試行錯誤してくことをおすすめします。

コメント

タイトルとURLをコピーしました