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が点灯/消灯が切り替わります。