Startseite / Wiki / I²C
Elektronik

I²C

I²C ist ein Kommunikationsprotokoll für Mikrocontroller — mit nur zwei Leitungen können mehrere Sensoren und Displays gleichzeitig angeschlossen werden.

15. Jänner 2025

Was ist I²C?

I²C (gesprochen: “I-squared-C” oder “I-two-C”) steht für Inter-Integrated Circuit — ein serielles Kommunikationsprotokoll, das 1982 von Philips entwickelt wurde. Es ermöglicht die Kommunikation zwischen einem Mikrocontroller und mehreren Sensoren oder Modulen über nur zwei Leitungen.

Bei ESP32, Arduino und Raspberry Pi ist I²C eine der meistgenutzten Schnittstellen — fast jeder OLED-Display, viele Temperatursensoren und zahlreiche andere Module kommunizieren darüber.

Wie funktioniert I²C?

I²C nutzt zwei Leitungen:

LeitungBedeutungPin beim ESP32
SDASerial Data — DatenleitngGPIO 21
SCLSerial Clock — TaktleitungGPIO 22

Jedes Gerät am I²C-Bus hat eine eindeutige Adresse (meist 7-Bit, z.B. 0x3C für viele OLED-Displays). Der Mikrocontroller ist der “Master”, alle angeschlossenen Geräte sind “Slaves”. Bis zu 127 Geräte können theoretisch am gleichen Bus hängen — solange ihre Adressen unterschiedlich sind.

I²C in der Praxis — OLED-Display anschließen

Ein 0,96” OLED-Display (SSD1306) per I²C an den ESP32:

i2c-oled.ino
#include <Wire.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
Wire.begin(21, 22); // SDA=21, SCL=22
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("Hallo DigitaleWelt!");
display.display();
}

I²C vs. SPI — was soll ich verwenden?

EigenschaftI²CSPI
Leitungen2 (SDA + SCL)4 (MOSI, MISO, SCK, CS)
Geräte pro Busbis 1271 pro CS-Pin
Geschwindigkeit100 kHz – 400 kHzbis 80 MHz
Typischer EinsatzSensoren, kleine DisplaysSD-Karte, TFT-Displays
VerkabelungEinfacherKomplexer

Faustregel: Für Sensoren und kleine Displays nimm I²C — weniger Leitungen, einfacher. Für schnelle Datenübertragung (SD-Karte, große TFT-Displays) nimm SPI.

I²C-Adresse herausfinden

Wenn du nicht weißt, welche Adresse ein Modul hat, hilft ein I²C-Scanner-Sketch:

i2c-scanner.ino
#include <Wire.h>

void setup() {
Wire.begin();
Serial.begin(115200);
Serial.println("I2C Scanner...");

for (byte addr = 1; addr < 127; addr++) {
  Wire.beginTransmission(addr);
  if (Wire.endTransmission() == 0) {
    Serial.print("Gerät gefunden: 0x");
    Serial.println(addr, HEX);
  }
}
}

Tipp

#i2c #protokoll #esp32 #arduino #sensor #display #sda #scl