組み込み開発に触れ始めると、かなり早い段階で UART・I2C・SPI という3つの通信方式に出会います。
マイコンとセンサ、表示器、PC、各種モジュールをつなぐうえで基本となる技術ですが、最初は「名前は聞くけれど、違いが整理しにくい」と感じやすい部分でもあります。
この記事では、UART・I2C・SPIの役割と違いをまとめて整理しつつ、実機で確認するときにどこを見るべきか まで含めて解説します。
仕様を暗記するというより、現場で「この通信はこういう理由で使うのか」と判断できる状態を目指します。
UART・I2C・SPIとは
この3つは、どれも機器同士でデータをやり取りするためのシリアル通信です。
ただし、配線本数や通信の進め方、得意な用途が異なります。
まずは全体像を表で押さえると分かりやすいです。
| 通信方式 | 主な配線 | 特徴 | 向いている用途 |
|---|---|---|---|
| UART | TX, RX, GND | 構成がシンプル | デバッグログ、PC接続 |
| I2C | SCL, SDA, GND | 少ない配線で複数接続しやすい | センサ、EEPROM、RTC |
| SPI | SCLK, MOSI, MISO, CS, GND | 高速で扱いやすい | LCD、ADC、フラッシュメモリ |
実務では、UARTは確認用、I2Cはセンサ接続、SPIは高速デバイス接続 という形で覚えると入りやすいです。

UARTの基本
UARTは、非同期式のシリアル通信です。
送信側と受信側で通信速度を事前に決めておき、クロック線なしでデータをやり取りします。
UARTの特徴
UARTの代表的な信号線は以下の2本です。
- TX:送信
- RX:受信
加えて、GNDを共通にします。
1対1でつなぐのが基本で、構成が単純なため最初の学習対象として向いています。
たとえば、マイコンのファームウェアで printf を使ってログを出し、PCのシリアルモニタで読む使い方は非常によくあります。
不具合解析でも「まずUARTログを見る」という場面は多いです。
実機での確認ポイント
UARTでよくあるミスは次の通りです。
- TXとRXをそのまま同名同士でつないでしまう
- ボーレートが一致していない
- GND共通を忘れる
実際には、送信側TX → 受信側RX、送信側RX → 受信側TX と交差させて接続します。
通信できないときは、まず配線とボーレートを確認すると切り分けが早いです。
I2Cの基本
I2Cは、少ない配線で複数デバイスをぶら下げられる通信方式です。
マイコン周辺のセンサ接続で特によく使われます。
I2Cの特徴
I2Cで使う主な信号線は次の2本です。
- SCL:クロック
- SDA:データ
I2Cでは、マスタがクロックを出し、各デバイスはアドレスで区別されます。
そのため、温度センサ、加速度センサ、RTCなどを同じバスにまとめて接続しやすいのが利点です。
実機での確認ポイント
I2Cは便利ですが、初学者がつまずきやすい点もあります。
代表例はプルアップ抵抗です。
SCLとSDAはオープンドレインで使うため、通常はプルアップ抵抗が必要です。
これがないと、信号が不安定になったり、通信そのものが成立しなかったりします。
また、確認時は以下も重要です。
- センサのアドレスが仕様書通りか
- 7bitアドレスか8bit表記かを取り違えていないか
- 電圧レベルが3.3V系か5V系か
実務では、まずI2Cスキャナでデバイスが見えているかを確認し、その後にレジスタ読み書きへ進む流れが安定です。
SPIの基本
SPIは、同期式で比較的高速な通信方式です。
I2Cより配線は増えますが、表示器や高速デバイスで広く使われています。
SPIの特徴
SPIの主な信号線は以下です。
- SCLK:クロック
- MOSI:マスタからスレーブへのデータ
- MISO:スレーブからマスタへのデータ
- CS:通信相手を選ぶ信号
複数デバイスをつなぐ場合、MOSI・MISO・SCLKは共有し、CSだけ個別に分ける構成が一般的です。
LCDや外部フラッシュ、A/Dコンバータなどでよく見かけます。
実機での確認ポイント
SPIでは、CSの制御と通信モードの設定が重要です。
クロック極性と位相の組み合わせが合っていないと、配線が正しくてもデータが崩れます。
たとえば、センサのIDレジスタを読むだけの簡単な処理でも、
- CSを有効にする
- コマンドを送る
- データを受信する
- CSを無効に戻す
という流れを意識する必要があります。
ロジックアナライザで波形を見ると、UARTやI2Cとの違いがかなりはっきり分かります。
どう使い分けるか
迷ったときは、次の基準で考えると整理しやすいです。
UARTが向く場面
- とにかく簡単につなぎたい
- デバッグログを出したい
- PCや通信モジュールと1対1で接続したい
I2Cが向く場面
- センサを複数つなぎたい
- 配線を減らしたい
- 速度より接続性を重視したい
SPIが向く場面
- ある程度の速度が必要
- 表示器やメモリを扱いたい
- 配線本数が増えても問題ない
実際の製品では、UARTでログを出しつつ、I2Cで環境センサを読み、SPIで液晶を駆動する という組み合わせも普通にあります。
まとめ

UART・I2C・SPIは、どれも組み込み開発の基本ですが、役割はかなり異なります。
重要なのは、名前を覚えることよりも、どんな配線で、どんな相手に、どんな目的で使うか を結び付けて理解することです。
最初に試すなら、次の順番がおすすめです。
- UARTで文字列を送ってPCで確認する
- I2Cでセンサのレジスタを読む
- SPIで表示器や外部メモリを動かす
この順で触ると、難しさが段階的に上がるので学びやすくなります。
実機で通信を確認しながら進めると、ソフトウェア視点だけでなく、ハードウェアとの接点もかなりクリアに見えてきます。
