ESP32は、Wi-FiやBluetoothだけでなく、UART(Universal Asynchronous Receiver/Transmitter)を使ったシリアル通信にも優れたマイコンです。
センサーやGPSモジュール、RS-485変換器、USB-シリアル変換ICなど、多くの周辺機器と接続できるため、IoT機器や組み込みシステムでは欠かせない通信インターフェースとなっています。
しかし、ESP32を使い始めた方からは、次のような疑問をよく聞きます。
- UART0・UART1・UART2の違いは?
- デバッグ用のUARTとユーザーアプリで使うUARTは分けるべき?
- GPIOは自由に変更できるの?
- USBシリアル書き込みとUART通信は競合しない?
この記事では、ESP32のUARTの基本から、開発時・製品化時に知っておきたいポイントまで、実務目線で分かりやすく解説します。
UARTとは?
UARTは、マイコンと外部機器がシリアル通信を行うための代表的なインターフェースです。
SPIやI²Cとは異なり、基本的には
- TX(送信)
- RX(受信)
の2本の信号線で通信できるため、構成がシンプルで扱いやすいという特長があります。
ESP32では、デバッグログの出力だけでなく、
- GNSS(GPS)モジュール
- セルラーモデム
- Bluetoothモジュール
- RS-232/RS-485変換器
- 他のマイコン
など、さまざまな機器との接続にUARTが利用されています。
ESP32には複数のUARTが搭載されている
ESP32には複数のUARTコントローラが搭載されています。
一般的なESP32では、
- UART0
- UART1
- UART2
の3つを利用できます。
このうちUART0は、多くの開発ボードでUSB-シリアル変換ICに接続されており、
- プログラムの書き込み
- シリアルモニターへのログ出力
に使用されることが一般的です。
そのため、UART0をユーザーアプリケーションで使用する場合は、書き込みやデバッグへの影響を考慮する必要があります。
一方、UART1やUART2は、外部機器との通信に利用されることが多く、センサーや通信モジュールとの接続に適しています。
GPIOは自由に割り当てられる
ESP32の大きな特長の一つが、GPIOマトリクス機能です。
UARTのTX・RX信号は、多くのGPIOへ割り当てることができるため、基板設計の自由度が高くなります。
例えば、回路レイアウトや他の周辺機能との兼ね合いに応じて、UARTの使用ピンを変更できるケースも少なくありません。
ただし、すべてのGPIOが同じように使えるわけではありません。
ブートストラップピンや入力専用ピンなど、用途に注意が必要なGPIOも存在するため、ピン配置はデータシートや技術資料を確認したうえで決定することが重要です。
UART0・UART1・UART2の使い分け
ESP32には複数のUARTが搭載されていますが、それぞれ役割を意識して使い分けることで、開発や保守がしやすくなります。
UART0
UART0は、多くのESP32開発ボードでUSB-シリアル変換ICと接続されています。
そのため、
- プログラムの書き込み
- ブートログの表示
- デバッグメッセージの出力
に使用されることが一般的です。
製品開発では、UART0をそのままデバッグ専用として残しておくと、不具合解析やメンテナンスが容易になります。
UART1・UART2
UART1とUART2は、外部機器との通信に使用されることが多いUARTです。
例えば、
- GNSS(GPS)モジュール
- LTE/5G通信モジュール
- RS-232・RS-485変換器
- 他のマイコン
- PLCや産業機器
などとの接続に適しています。
ESP32ではGPIOマトリクス機能により、多くのGPIOへTX・RXを割り当てられるため、基板設計の自由度が高いことも特徴です。
ESP-IDFでUARTを使用する流れ
ESP-IDFでは、UARTは次のような手順で利用します。
- UARTの通信条件を設定する
- UARTドライバをインストールする
- TX・RXピンを設定する
- データの送受信を行う
このように、ESP-IDFではUARTドライバが用意されているため、レジスタを直接操作することなく実装できます。
通信速度やパリティ、ストップビットなどもAPIから設定できるため、さまざまな機器との接続に対応できます。
UART利用時によくあるトラブル
UART通信で相談を受ける内容として、次のようなものがあります。
- TXとRXを逆に接続している
- ボーレートが一致していない
- GPIOの割り当てミス
- USBシリアルと外部UARTを混在させている
- フロー制御の設定が一致していない
特にUART0は、書き込みやデバッグにも使用されるため、用途を十分に理解したうえで利用することが大切です。
通信ができない場合は、配線だけでなく、ソフトウェア側の設定も合わせて確認しましょう。
設計時のポイント
実務では、次のような構成をおすすめします。
- UART0:書き込み・デバッグ専用
- UART1:ユーザー機器との通信
- UART2:予備、または追加機器との通信
このように役割を分けることで、ソフトウェアの保守性が向上し、トラブル発生時の切り分けも容易になります。
また、UARTのTX・RXをコネクタへ引き出しておくと、量産後の保守や現地調査にも役立ちます。
まとめ
ESP32には複数のUARTが搭載されており、GPIOマトリクス機能によって柔軟にピンを割り当てられます。
一方で、UART0は書き込みやデバッグにも使用されるため、用途を理解したうえで設計することが重要です。
UART1・UART2を外部機器との通信に活用し、それぞれの役割を明確に分けることで、開発効率や保守性を高めることができます。
ESP32は、Wi-FiやBluetoothだけでなく、有線シリアル通信にも優れたマイコンです。
UARTの特徴を理解し、用途に応じて使い分けることで、より安定したシステム設計につながるでしょう。
※本記事はESP32(オリジナル)を中心に説明しています。ESP32-C3、C5、S3ではUART数や利用可能なGPIOが異なるため、詳細は各データシートをご確認ください。
技術は、経験から価値になる。
DLROW Design