Edited at

Arduino-ESP32 Serial通信

More than 1 year has passed since last update.

WROOM-32のArduino開発環境でシリアル通信を行う方法を確認します。

必要な事項は以下です。

(1) シリアル通信のハードウェアピンの接続

(2) Arduinoライブラリ Serialを使ったプログラム


(1) シリアル通信のハードウェアピンの接続

ハードウェアのピン配置については

EPS32と使用するモジュールのドキュメントのUARTを確認します。

UARTは0,1,2の3系統があります。

UART0 ( デフォルト RX=GPIO3, TX=GPIO1 )

WROOM_UART_0_PIN.png

UART1 ( デフォルト RX=GPIO9, TX=GPIO10 ) ※WROOM32では、デフォルトでは使用不可

WROOM_UART_1_PIN.PNG

UART2 ( デフォルト RX=GPIO16, TX=GPIO17 )

WROOM_UART_2_PIN.png

http://ht-deko.com/arduino/esp-wroom-32.html#18

上記を参考にしますと、UART1はデフォルトのピン(IO9,10)では使用不可なので、UART1を使用する際には使用するピンを変更して使用するようです。

<20180209追記>

UART1の動作確認しました。

使用する場合は、

(1) HardwareSerial Serial1(1); を定義して、

(2) Serial1.begin(115200, SERIAL_8N1, 33, 34); をsetup()で実行することで、使用可能になります。

上記はRX=33, TX=34の例ですので、引数で使用したいGPIOの番号を指定できます。(IO6~IO11, IO34, IO35は使用不可)

begin()関数の詳細はgithubのここを確認してください。

<20180209追記 end>

今回はUART2を使用して確認します。


(2) シリアル通信のハードウェアピンの接続

Arduinoでのシリアル通信はSerialというライブラリを使用します。

ArduinoのSerial ライブラリ ドキュメント

https://www.arduino.cc/en/Reference/Serial

日本語の解説

https://garretlab.web.fc2.com/arduino_reference/language/functions/communication/serial/findUntil.html

Serialの送受信のサンプルは[MultiSerial]がSDKのサンプルに入っています。

https://github.com/arduino/Arduino/blob/master/build/shared/examples/04.Communication/MultiSerial/MultiSerial.ino

以下を参考にESP32のUART2(IO16,IO17)を使うように設定します。

http://taltalp.hatenablog.jp/entry/2017/05/12/153509

HardwareSerial Serial1(2);

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);
}
}

受信したデータがAsciiの場合は、Serial.write(inByte);とすることで、文字が出力されます。

サンプルの関数Serial.read()は1byteを読み込みします。

また、Serial.avialable()は、取得可能なバイト数を確認できます。

Additional UART

http://hackaday.com/2017/08/17/secret-serial-port-for-arduinoesp32/

こちらのリンクだと、ライブラリ側のピン設定を変更してUART1を使えるようにしているようです。