WROOM-32のArduino開発環境でシリアル通信を行う方法を確認します。
必要な事項は以下です。
(1) シリアル通信のハードウェアピンの接続
(2) Arduinoライブラリ Serialを使ったプログラム
#(1) シリアル通信のハードウェアピンの接続
ハードウェアのピン配置については
EPS32と使用するモジュールのドキュメントのUARTを確認します。
UARTは0,1,2の3系統があります。
UART0 ( デフォルト RX=GPIO3, TX=GPIO1 )
UART1 ( デフォルト RX=GPIO9, TX=GPIO10 ) ※WROOM32では、デフォルトでは使用不可
UART2 ( デフォルト RX=GPIO16, TX=GPIO17 )
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を使えるようにしているようです。