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を接続した画像を次に示します。
ArduinoはD13にLEDが接続されていることが多いですが、ProMicroではこのLEDは存在しないので、代わりにRXのLEDをD17に、TXのLEDをD30に割り当てられており使用できます。どちらのLEDもLOWで点灯します。
作成するプログラムの仕様
今回作成プログラムの仕様を次に示します。
- ProMicroはESP8266に5秒ごとにカウンタを送信し、ESP8266は受信したカウンタを使用してLEDのON/OFFを切り替えます。
- ESP8266はLEDのON/OFF切り替えに同期して、メッセージ「TomoSoft」をProMicroに送信します。
- 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が点灯/消灯が切り替わります。



