マイコン開発をしていると、UART(ユーアート)という通信方式をよく目にします。
UARTは、マイコン同士の通信やGPS・Bluetoothモジュールなどとの通信、さらにPCへデバッグ情報を表示するときにも使われる、組み込み開発では非常に基本的な通信方式です。
UARTの基本はTXとRXという2本の信号線です。
- TX:データを送信する
- RX:データを受信する
ただし、UARTではI2CやSPIのようなクロック信号を使いません。その代わりに「9600bps」「115200bps」といったボーレートなどの通信条件を送信側と受信側で合わせて通信します。
この記事では、UARTとは何かという基本から、TX・RX、ボーレート、スタートビット・ストップビット、Arduinoでのシリアル通信まで順番に解説します。
UARTとは?
UART(Universal Asynchronous Receiver/Transmitter)は、シリアル通信を行うための送受信機能です。
日本語では「汎用非同期送受信機」などと訳されます。
UARTでは、データを1ビットずつ順番に送受信します。
I2CやSPIとの大きな違いは、クロック信号線を使わないことです。
そのためUARTでは、送信側と受信側であらかじめ通信速度などの条件を合わせておく必要があります。
UARTで使うTXとRX
UART通信では、主に次の2本の信号線を使用します。
| 信号 | 意味 | 役割 |
|---|---|---|
| TX | Transmit | データを送信する |
| RX | Receive | データを受信する |
実際に2つの機器を接続するときは、基本的にTXとRXを交差させて接続します。
マイコンA マイコンB TX ─────────────────→ RX RX ←───────────────── TX GND ────────────────── GND
マイコンAのTXから送信したデータをマイコンBのRXで受信するため、TX同士・RX同士ではなく、TX → RX、RX ← TXと接続します。
また、2つの機器で信号の基準電位を合わせるため、通常はGNDも共通に接続します。
UARTはクロック信号を使わない
SPIにはSCLK、I2CにはSCLというクロック信号があります。
一方、UARTにはクロック信号線がありません。
このように共通のクロック信号を使わずに通信する方式を非同期通信と呼びます。
クロック信号がないため、送信側と受信側では「どのくらいの速度でデータを送るのか」をあらかじめ決めておく必要があります。
ボーレートとは?
UARTを使うときによく登場するのがボーレート(baud rate)です。
マイコンのUARTでは、9600、19200、38400、57600、115200などの値がよく使われます。
たとえばArduinoでは、次のようなコードをよく見かけます。
Serial.begin(115200);
これはシリアル通信の通信速度を115200に設定しています。
一般的なUARTでは1シンボルで1ビットを表すため、115200 baudは実質的に115200 bit/sとして扱われることが多いですが、厳密には「baud」と「bit/s」は異なる概念です。
重要なのは、送信側と受信側で同じ通信速度に設定することです。
通信速度が一致していないと、受信した文字が文字化けしたり、正しくデータを取得できなかったりします。
UARTはどのように1文字を送っている?
UARTでは、単純に8ビットのデータだけを送っているわけではありません。
たとえば一般的な8N1という設定では、次のような構成で1つのデータを送信します。
- スタートビット:1ビット
- データビット:8ビット
- パリティ:なし
- ストップビット:1ビット
待機 Start D0 D1 D2 D3 D4 D5 D6 D7 Stop HIGH 0 ───── データ8bit ───── 1
UARTの信号線は、一般的には通信していないときHIGHになっています。
送信を開始すると最初にLOWのスタートビットを送り、受信側に「これからデータが始まる」と知らせます。
続いてデータビットを送り、最後にストップビットを送って1つのデータの送信を終了します。
8N1とは?
UARTの仕様書や設定画面では、8N1という表記をよく見かけます。
| 文字 | 意味 |
|---|---|
| 8 | データビットが8ビット |
| N | パリティなし(None) |
| 1 | ストップビットが1ビット |
つまり8N1は、8データビット・パリティなし・1ストップビットという通信設定です。
UARTではボーレートだけでなく、こうした通信条件も送信側と受信側で合わせる必要があります。
パリティビットとは?
UARTでは、簡単なエラー検出のためにパリティビットを付加することがあります。
代表的なのは、偶数パリティ(Even)と奇数パリティ(Odd)です。
ただし、マイコン開発やArduinoでよく使われる設定では、パリティを使用しない8N1がよく利用されます。
UARTとシリアル通信は同じもの?
「UART」と「シリアル通信」は同じ意味のように使われることがありますが、厳密には同じではありません。
シリアル通信は、データを1ビットずつ順番に送る通信方式の総称です。
UARTは、そのシリアル通信を実現する方法の1つです。
I2CやSPIもデータを直列に送るため、広い意味ではシリアル通信の仲間です。
UARTとUSBは別物
初心者が混同しやすいのがUARTとUSBです。
USBケーブルでマイコンとPCを接続してシリアルモニターを使用していても、USBそのものがUARTというわけではありません。
開発ボードによっては、基板上のUSB-UART変換回路を介してマイコンのUARTとPCのUSBを接続しています。
PC │ USB │ USB-UART変換 │ TX / RX │ マイコン
一方、USB機能を内蔵したマイコンでは、UART変換ICを使わずUSB CDCなどによって仮想COMポートを実現する場合もあります。
UARTでは電圧レベルにも注意する
UART機器を接続するときは、TX・RXだけでなく信号の電圧レベルも確認する必要があります。
たとえば3.3V系マイコンのGPIOに、5Vの信号をそのまま入力できるとは限りません。
使用するマイコンやモジュールのデータシートを確認し、必要に応じてレベル変換回路を使用します。
また、UARTのTX/RXで使われるロジックレベルと、RS-232などの物理インターフェースは別物です。RS-232機器をマイコンのGPIOへ直接接続してはいけません。
UARTは何に使われる?
UARTはさまざまな組み込み機器で利用されています。
- マイコン同士の通信
- GPSモジュールとの通信
- Bluetoothモジュールとの通信
- Wi-Fi・通信モジュールとの通信
- 各種センサー・計測機器との通信
- PCへのデバッグログ出力
特に組み込み開発では、プログラムの状態を確認するためにUARTへログを出力する方法がよく使われます。
ArduinoでUART通信を試してみる
Arduino環境では、UARTやシリアル通信を簡単に試すことができます。
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Hello UART!");
delay(1000);
}
このプログラムでは、通信を115200に設定し、1秒ごとに「Hello UART!」を出力します。
シリアルモニター側も115200に設定すると、送信された文字を確認できます。
KUMITATE-C3でUARTを試す
UARTの仕組みは、実際にデータを送受信してみると理解しやすくなります。
KUMITATE-C3はESP32-C3を搭載した学習用ボードで、組み込みプログラミングを実際のハードウェアを使って学習できます。
まずはシリアル出力を使って、変数の値やプログラムの実行状況を確認してみるとよいでしょう。
void setup() {
Serial.begin(115200);
}
void loop() {
static int count = 0;
Serial.print("count = ");
Serial.println(count);
count++;
delay(1000);
}
このようなログ出力は、単にUARTを学ぶだけでなく、今後プログラムをデバッグするときにも役立ちます。
なお、ESP32-C3ではUSB CDCなどを利用してシリアルモニターへ出力する構成もあるため、Serialが必ず物理的なTX/RX端子を経由しているとは限りません。使用するボード設定や接続方法を確認してください。
UART・I2C・SPIの違い
マイコンでよく使われるUART・I2C・SPIを比較すると、次のようになります。
| UART | I2C | SPI | |
|---|---|---|---|
| 主な信号線 | TX・RX | SDA・SCL | SCLK・MOSI・MISO・CS |
| クロック線 | なし | あり | あり |
| 機器の識別 | 基本的になし | アドレス | CS |
| 複数デバイス | 基本は1対1 | 得意 | CSを追加して接続 |
| 全二重通信 | 可能 | 通常は不可 | 可能 |
| 特徴 | シンプル | 少ない配線で複数機器 | 高速通信に向く |
I2Cについては「I2Cとは?SDA・SCL・アドレス・通信の仕組みを初心者向けに解説」、SPIについては「SPIとは?MOSI・MISO・SCLK・CSと通信の仕組みを初心者向けに解説」で詳しく解説しています。
UARTで通信できないときの確認ポイント
UARTがうまく通信できない場合は、次のポイントを確認してみましょう。
- TXとRXが交差して接続されているか
- GNDが共通になっているか
- 送信側と受信側のボーレートが一致しているか
- データビット・パリティ・ストップビットが一致しているか
- 3.3V・5Vなど信号電圧が適合しているか
- 使用しているUARTポートやGPIO番号が正しいか
特にTX/RXの接続間違いとボーレートの不一致は、UART通信でよくあるトラブルです。
まとめ
UARTは、マイコン開発で広く使われているシンプルなシリアル通信方式です。
- TXは送信、RXは受信
- TXとRXは基本的に交差して接続する
- GNDも共通にする
- クロック線を使わない非同期通信
- 送受信側でボーレートなどの通信条件を合わせる
- スタートビットとストップビットを使ってデータの区切りを判断する
- 代表的な設定として8N1がある
UARTは通信そのものだけでなく、デバッグログを確認する手段としても非常に重要です。組み込み開発を学ぶなら、I2CやSPIと合わせて仕組みを理解しておきましょう。

