コンテンツ

  1. 前書き
  2. 準備
  3. 接続
  4. スケッチをアップロード
  5. Arduinoコード分析
  6. Arduinoボードにデータの接続・受信・送信

前書き

このレッスンでは、Arduinoのシリアルモニターを使い対話型のプログラムを体験していただきます。構文は単純ですが、プログラミングとArduinoを初めて使用するお客様には少し分かりづらい内容もありますので、少しずつ慣れていきましょう。

レッスンの一環として、シリアルモニターを介してコマンドを送受信する簡単な回路を構築します。

準備

ハードウェア

ソフトウェア

Arduino IDE(バージョン1.6.4+)

接続

下記図が示すように接続します。

スケッチをアップロード

上記の接続が完了したら、USBケーブルを使用してArduinoボードをコンピューターに接続します。緑色の電源LED(ラベルPWR)が点灯します。

コードプログラム

リンクからスケッチをダウンロードするか、以下のコードをArduino IDEウィンドウにコピーできます。

int redLedPin = 2; // 赤色LEDをピンに接続
int count = 0; 
void setup() { 
pinMode(redLedPin, OUTPUT);//LEDピンを出力へ
Serial.begin(9600); //シリアルを9600バンドに設定する
while (! Serial); // シリアルの初期化を許可する
Serial.println("Enter Y to turn on the LED:"); 
} 
void loop() { 
if (Serial.available())  {  
char ch = Serial.read();  
if (ch == 'y'||ch == 'Y')  
{  
digitalWrite(redLedPin, HIGH);  
Serial.println("You have turned on the LED!!");  
Serial.print("The LED was off for ");  
Serial.print(count);  
Serial.println(" seconds");  
Serial.println("If you want to switch it off, simply enter N or n!"); 
count = 0;  
}  
if (ch == 'n'||ch == 'N')  {  
digitalWrite(redLedPin, LOW);  
Serial.println("You have turned off the LED!!");  
Serial.print("The LED was on for ");  
Serial.print(count);  
Serial.println(" seconds");  
Serial.println("If you want to switch it on, simply enter Y or y!");  
count = 0;  
}  
}  
delay(1000);  count += 1; 
}

コンパイルしてアップロード

Arduino IDEを開き、Arduinoボードに対応するボードとポートタイプを選択します。

スケッチをコンパイルしたら、「アップロード」ボタンをクリックします。アップロードが開始されたら、ボード上のRXとTXのLEDが点滅します。成功すると、ステータスバーに「アップロードが完了しました。」というメッセージが表示されます。

アップロードが完了してから数秒後に、Arduino IDEのツールバーのシリアルモニター表示ボタンをクリックします。下記図の丸で囲まれてるボタンをクリックします。

下記のウィンドウが開きます。

このウィンドウはシリアルモニターと呼ばれ、Arduino IDEに備わっている機能の一部として、コンピューターからArduinoボードに(USB経由で)メッセージを送信し、Arduinoからメッセージを受信できるようにすることです。

Arduinoコード分析

ここで使用するコードは、Arduino IEDのシリアルモニターを使用してデータを表示および送信する方法の基本となります。プロジェクトではArduinoをデバッグすることで、プログラム内容に沿ってデータの送受信(対話)を体験する方法を説明します。コードをすぐにダウンロードしたい場合は、ここからフォームからダウンロードできます。

まず、LEDの整数変数を初期化します。これは、LEDにつながるピン番号です。また、countという変数を初期化します。これにより、LEDがオンまたはオフになっている時間が確保されます。

int redLedPin = 2;
int count = 0;

セットアップ機能では、最初に赤色LEDを出力として機能するように設定して、LEDのオンとオフを切り替えます。

パラメーター値9600でserial.beginfunction関数を呼び出します。設定している値は、ビット/秒 といって、プログラムをする上で基本的な単位となります。9600以外の値を設定することも可能ですが、今回は9600の値を使用します。この値は基本設定値と考えてください。またプログラム上でこの値を呼び出せなければ、通信ができなくなりますので大変重要な値となります。

関数を呼び出したのち、シリアルインターフェイスが初期化され、コンピューター/デバイスに接続されるまで待機します。Serial.println()という関数を使用していますが、これはArduino IEDのシリアルモニターにテキストを表示させるもので、入力/出力のために新しい行が表示されます。

void setup() {
  pinMode(redLedPin, OUTPUT);
  Serial.begin(9600);
  while (! Serial);
  Serial.println("Enter Y to turn on the LED:");
}

ループ関数の設定に関しては、新しいプログラムがアップロードされるか、Arduinoのスイッチがオフになるまで継続的にループします。

ループ関数内には、シリアルポートから受信したデータを一時保存するシリアルバッファ(Serial.Available)に保存しているデータの有無を確認するif値があります。if値はコマンドを送信したかどうかを確認し、仮にYを選択したらifにYが入力されます。

次に、chandcallSerial.read()という関数を作成します。この関数は、シリアルバッファで現在待機しているデータを取得するものです。Arduinoボードがデータを受信する最初のバイトデータのみ取得します。文字列全体のバイトを取得したい場合は、Serial.readStringの変数を使用する必要があります。

LEDピンの出力に対し点灯または消灯かを、if関数が入力された文字YまたはNで判断します。その後、Serial.println関数が入力されたデータに基づき点灯または消灯の動作を送信します。またthecountexampleの関数を使った場合、デバック(間違った処理を自動で判断・修復・適正処理)機能が働きます。

最後は1秒待機してカウントに1を追加する機能を追加しています。シリアルモニターに表示される値が1ずつ増えていきます。

void loop(){
  if (Serial.available()){
    char ch = Serial.read();
    if (ch == 'y' ||	ch == 'Y'){
      digitalWrite(redLedPin, HIGH);
      Serial.println("You have turned on the LED!!");
      Serial.print("The LED was off for ");
      Serial.print(count);
      Serial.println(" seconds");
      Serial.println("If you want to switch it off, simply enter N or n!");
      count = 0;
    }
    if (ch == 'n' ||	ch == 'N'){
      digitalWrite(redLedPin, LOW);
      Serial.println("You have turned off the LED!!");
      Serial.print("The LED was on for ");
      Serial.print(count);
      Serial.println(" seconds");
      Serial.println("If you want to switch it on, simply enter Y or y!");
      count = 0;
    }
  }
    delay(1000);
    count += 1;
}

完了したら、コードをArduinoにデプロイできるはずです。 次のパートでは、Arduinoにデータを接続、受信、送信する方法を示します。

Arduinoボードにデータの接続・受信・送信

コードのアップロードが完了したら、シリアルモニターを開きます。

シリアルモニターの開き方は、ツールタブ内にある、シリアルモニターを選択します。または、CTRL + SHIFT + Mでも同じウィンドウが表示されます。Arduinoに接続されていることを確認してください。接続されていない場合、ウィンドウは開きません。


これで、以下に表示されている画面が開きます。シリアルモニター上部に文字を入力する場所があり、ここにテキストを入力してArduinoに送信します。入力したテキストを送信するには、入力に送信ボタンを押します。

シリアルモニター下部に出力画面あり、送信されたすべてのデータが表示されます。上記のサンプルコードを使用している場合は、Serial.printlnの関数に入力された文字が表示されます。

シリアルモニターの一番下側には3つのオプション項目があります。内訳は、出力画面に対し自動でスクロールする有無の項目。

次に、行末オプションがあります。Arduinoへの入力/送信の後に終了する行を自動的に追加するようにモニターを設定できます。

最後に、ボーレート機能です。コードで設定した内容と一致したか確認することができます。もし想定していた以外の機能が働いた場合は、シリアルモニターに出力された内容が規定値と違うとはずなので、原因を特定しやすくなります。

このレッスンでシリアルモニターの基本を理解しておきましょう。またシリアルモニターに関して学ぶことは他にもありますが、現状はこのレッスンで学習したことを抑えるだけで十分です。

シリアルモニターを正しく使用する方法を理解し、将来の学習や業務で役立てていただければ幸いです。何かお気づきの点や、発見した内容があれば以下にコメントをお願い致します。