37
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Arduino-ESP32 Serial通信

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を使えるようにしているようです。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
37
Help us understand the problem. What are the problem?