ESP32で複数のシリアルポートを開く
ESP32の中に入っている3つのUARTを使ってみようと思います。
※Arduino core for ESP32 WiFi chip release v1.0.1以降ではSerial1とSerial2が定義されました。
それに伴い、記事をの内容を修正しました。(2019/06現在)
やり方 (Arduino core for ESP32 WiFi chip release v1.0.1以降版)
Arduinoのサンプルに「MultiSerial」と言うものがあります。
これを編集して3ポート使えるように修正しました。
void setup() { // initialize both serial ports: Serial.begin(9600); Serial1.begin(9600); Serial2.begin(9600); } void loop() { // read from port 1, send to port 0: if (Serial1.available()) { int inByte = Serial1.read(); Serial.write(inByte); } // read from port 0, send to port 1: if (Serial.available()) { int inByte = Serial.read(); Serial1.write(inByte); } // read from port 0, send to port 2: if (Serial2.available()) { int inByte = Serial.read(); Serial2.write(inByte); } }
やり方 (Arduino core for ESP32 WiFi chip release v1.0.0版)
Arduinoのサンプルに「MultiSerial」と言うものがあります。
これを少し編集してシリアルポート0以外のポートを開くことができました。
// ---------- ここを追加 HardwareSerial Serial1(2); // UART2を使う // ---------- void setup() { // initialize both serial ports: Serial.begin(115200); Serial1.begin(115200); } void loop() { // read from port 1, send to port 0: if (Serial1.available()) { int inByte = Serial1.read(); Serial.write(inByte); } // read from port 0, send to port 1: if (Serial.available()) { int inByte = Serial.read(); Serial1.write(inByte); } }
ESP32のIO16とIO17(UART2のTX,RX)を直接接続することでループバックテストをすることができました。
問題点
今回はUART0と2を使用しました。
UART1は下記のサイトに書いてあるように、デフォルトでSPI Flashに設定されているようです。
ESP32 devkit esp-idf UART1 examle not working - ESP32 Forum
UART1の使い方については分かり次第ブログに書こうと思います。
追記: ver.1.0.1以降を使えばすべてのポートが使用可能です。
追記
Qiitaのこちらの記事で、UART1を使用する方法が書かれた記事についての紹介がありました。
Arduino-ESP32 Serial通信 - Qiita
Secret Serial Port For Arduino/ESP32 | Hackaday
どうやら、ライブラリを直接いじる必要があるみたいです。