電子部品

I2Cとは?超入門ガイド

この記事のねらい
「I2Cってなに?」と聞かれてモゴモゴしない をゴールに、
歴史・仕組み・メリット/デメリット・実例・よくある疑問までまとめました。
キーワード:I2Cとは/I2C バス/I2C 通信/マイコン I2C


1. I2Cの誕生ヒストリー

I2C(アイ・スクエア・シー、Inter-Integrated Circuit)は 1982年に当時フィリップス(現NXP) が家電機器の基板内配線を減らすために考案した二線式シリアル通信規格です。誕生当初は 100 kbit/s が上限でしたが、その後改訂で高速化が進み、現在は 3.4 Mbit/s(High-speed mode)や片方向 5 Mbit/s(Ultra-Fast mode)まで拡張されています。ti.comnxp.comeeweb.com


2. 物理層は“たった2本”──SDA と SCL

信号線役割備考
SDASerial Data Lineデータを1ビットずつ送受信
SCLSerial Clock Line送受信を同期させるクロック

どちらも オープンドレイン/オープンコレクタ 出力で、バスがアイドル時に必ず “H(High)” になるよう プルアップ抵抗 を VCC に接続します。抵抗値が小さすぎると電流が増え、大きすぎると波形が立ち上がらず通信に失敗します(目安:100 kHzなら 4.7 kΩ前後、1 MHzなら 1 kΩ程度)。learn.adafruit.comforum.arduino.cc


3. 通信モードと転送速度(まとめ)

モード上限速度主な用途
Standard100 kbit/s基本・旧家電
Fast400 kbit/s汎用センサ
Fast-mode Plus (Fm+)1 Mbit/sLCDドライバ 等
High-speed (HS)3.4 Mbit/s高速AD/DA
Ultra-Fast (UFm)5 Mbit/s(片方向)LED制御 等

※ HS と UFm はコントローラ/ターゲット共に対応 IC が必要です。i2c-bus.orgeeweb.com


4. どうやって多デバイスを区別するの?

  • 7ビットアドレス(最大112台) が主流。
  • 拡張で 10ビットアドレス も規定。
  • コントローラ(マスター)から送る Start & Stop 条件、ACK/NACK ビットで通信を管理。バス上で衝突すると“仲良く譲り合う(アービトレーション)”仕組みがあります。nxp.com

5. I2CとSPI/UARTをざっくり比較

特徴I2CSPIUART
信号線数2本4本以上2本
通信相手数多台数OK基本1対1(CSで増やせる)1対1
速度3.4 Mbit/s(HS)数十 Mbit/s も可~数 Mbit/s
長距離適性低(数十 cm)
配線コスト◎安い△多い

ポイント:短距離・低中速で「センサをたくさん繋げたい」ときはI2Cがベスト。高速ストレージや長距離通信はSPI/UARTが有利。


6. 実際の利用例

デバイス役割代表IC
センサ温度・加速度・気圧 等BME280, MPU-6050
メモリEEPROM/FRAM24LC256
時計RTCDS3231(時計+EEPROM)protosupplies.com
表示OLED/LCDSSD1306
GPIO拡張I/OエキスパンダPCF8574

7. “やってみよう”――ArduinoでRTCを読む最小コード


#include <Wire.h>
#include <RTClib.h>

RTC_DS3231 rtc;

void setup() {
  Wire.begin();          // SDA=A4, SCL=A5 (Uno系)
  rtc.begin();
  Serial.begin(115200);
}

void loop() {
  DateTime now = rtc.now();
  Serial.print(now.year()); Serial.print('/');
  Serial.print(now.month()); Serial.print('/');
  Serial.println(now.day());
  delay(1000);
}
  • 配線: DS3231 の SDA → A4, SCL → A5, VCC → 5 V, GND → GND。
  • プルアップ抵抗: モジュールに 4.7 kΩ が実装済みなら省略可。

8. よくあるトラブル & 解決策

症状原因候補処方箋
読み書き失敗プルアップ不足抵抗値を 10 kΩ→4.7 kΩへ
ゴミデータGNDが遠いバスをツイスト、GNDライン強化
アドレス衝突同アドレスIC複数アドレスピン切替、I2C-Mux使用
伸びた立ち上がりバス容量過多配線短縮 or ファンアウト減

9. まとめ ― I2Cは「ゆる速・省線で多デバイス」

  • 省配線:たった2本で多数デバイスを接続。
  • 適材適所:センサや低速周辺を束ねるのに最適。
  • 拡張性:標準100 kから最大3.4 Mbit/sまで成長。
  • 注意点:プルアップ抵抗と配線長をケチると失敗しやすい。

「とりあえず動かして雰囲気を掴みたい」という人は、
Arduino + DS3231モジュール から始めるのが最短ルート!


FAQ(駆け出しエンジニアのつまずきポイント)

  1. 7ビットと8ビットアドレスの違いは?
    8ビット形式は7ビットアドレス+R/Wビットを合わせた“便宜的表記”。データシートの書き方に注意。nxp.com
  2. バス長を1 m以上に伸ばせる?
    物理仕様上は推奨されません。必要なら低速モード+バッファICを検討。
  3. プルアップ抵抗はいくつ?
    100 kHzなら 4.7 kΩ をまず試し、波形を見ながら調整。1 MHz では 1 kΩ 付近が多いです。forum.arduino.cc

おわりに

I2Cは**「配線をシンプルにしたい」「センサを一括制御したい」**といった場面で力を発揮する定番プロトコルです。この記事を参考に、自分のプロジェクトでもぜひ活用してみてください!

関連記事

-電子部品