ESP8266を使って「ESP-8266でロボットカーの作成」を作成したとき、ロボットカー上のESP8266のプログラム動作を確認する必要がありました。ESP8266の開発環境で作成したデバッグ用のメッセージをそのまま利用できるように考え、ProMicroをESP8266のUARTに接続し、ProMicroでSoftwareSerialを使ってESP8266のデバッグメッセージをProMicroで受信し、受信したメッセージをUSB経由でパソコンに送信しました。

パソコン、ESP8266、ProMicroの接続

パソコン、ESP8266(TRIAL-ESP8266-LEAFキット)、ProMicroの接続を次に示します。

  • ProMicroのVCCは5Vのため、TRIAL-ESP8266-LEAFキットの5Vに接続しました。
  • ProMicroは、全てのピンが入力の変化に対する割り込みをサポートしていなくて、8, 9, 10, 11, 14(MISO), 15(SCK), 16(MOSI)のピンだけが受信(RX)に対応しています。つまり、2,3ピンは入力に対応していません。

パソコン、ESP8266、ProMicroを接続した画像を次に示します。

SoftwareSerialを使ってESP8266と接続

ArduinoはD13にLEDが接続されていることが多いですが、ProMicroではこのLEDは存在しないので、代わりにRXのLEDをD17に、TXのLEDをD30に割り当てられており使用できます。どちらのLEDもLOWで点灯します。

作成するプログラムの仕様

今回作成プログラムの仕様を次に示します。

  1. ProMicroはESP8266に5秒ごとにカウンタを送信し、ESP8266は受信したカウンタを使用してLEDのON/OFFを切り替えます。
  2. ESP8266はLEDのON/OFF切り替えに同期して、メッセージ「TomoSoft」をProMicroに送信します。
  3. ProMicroは、カウンターの値をUSB経由でパソコンに送信し、ESP8266から受信したメッセージをUSB経由でパソコンに送信します。

ESP8266プログラム作成

次のプログラムを作成します。

  • 10行目でavailable関数によりUARTにデータ受信していないかを調べ、11行目で受信したデータをread関数を使用して読み込みます。
  • 12行目で受信したデータの偶数/奇数によりLEDのON/OFFを切り替えます。
  • 17行目でメッセージ「TomoSoft」をUARTにprintln関数を使用して送信します。

ESP8266tx.ino

#include <ESP8266WiFi.h>
#define LED 16

void setup(){
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
}

void loop(){
  while(Serial.available()){
    byte inChar = (byte)Serial.read();
    if((inChar % 2) == 1){ 
      digitalWrite(LED, HIGH);
    }else{
      digitalWrite(LED, LOW);
    }
    Serial.println("TomoSoft");
    delay(10);
  }
}

ProMicroプログラム作成

次のプログラムを作成します。

  • 2行目でSoftwareSerialを宣言し、パラメータでRX、TXの順にデータピンを与えます。
  • 16行目でlisten関数により宣言したSoftwareSerialを使用できるように設定します。
  • 17行目でUARTにカウンタ値をwrite関数を使用して送信します。
  • 21行目でUARTでデータを受信していないかを調べ、22行目でreadString関数によりUARTからデータを受信します。

promicrorx.ino

#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 9); // RX, TX

int count = 0;

void setup() {
  Serial.begin(115200);
  mySerial.begin(115200); // ソフトウェアシリアルの初期化
}

void loop() {
  count++;
  Serial.print("counter = ");
  Serial.println(count);

  mySerial.listen();
  mySerial.write(count);

  delay(5000);

  if (mySerial.available()) {
    Serial.print(mySerial.readString());
  }
}

動作確認

ProMicroとESP8266に作成したプログラムを書き込み、実行すると、Arduino IDEのシリアルモニタには次のようにESP8266で送信したメッセージ「TomoSoft」が表示されます。原因は不明ですが文字化けが時々発生しました。

ProMicroのTX LEDが5秒ごとに点灯し、それに同期してESP8266のLEDが点灯/消灯が切り替わります。