UART & I2C Protokolle

Lernen Sie UART und I2C Protokolle mit praktischen ESP32 Beispielen und interaktiven Visualisierungen.

QR Code

Kommunikationsprotokolle im Überblick

UART

Universal Asynchronous Receiver-Transmitter

  • Punkt-zu-Punkt Verbindung
  • Asynchrone Übertragung
  • 2 Leitungen (TX, RX)
  • Einfache Implementierung

I2C

Inter-Integrated Circuit

  • Multi-Master/Slave Bus
  • Synchrone Übertragung
  • 2 Leitungen (SDA, SCL)
  • Adressierbare Geräte

ESP32 Verbindungen

ESP32 Board
UART Sensor UART Sensor
I2C Display I2C Display

UART Protokoll

Universal Asynchronous Receiver-Transmitter - Die Grundlage der seriellen Kommunikation

Grundlagen

Was ist UART?

UART ist ein Hardware-Kommunikationsprotokoll, das asynchrone serielle Kommunikation zwischen Geräten ermöglicht. Es verwendet nur zwei Leitungen: TX (Transmit) und RX (Receive).

Wichtig: UART ist punkt-zu-punkt und benötigt keine Taktleitung, da beide Geräte die gleiche Baudrate verwenden müssen.
Eigenschaften

UART Merkmale

  • Asynchrone Übertragung
  • Punkt-zu-Punkt Verbindung
  • Konfigurierbare Baudrate
  • Start- und Stoppbits
  • Optionale Paritätsprüfung
// UART Konfiguration am ESP32
void setup() {
    Serial.begin(115200);  // Baudrate: 115200 bps
    Serial.println("UART initialisiert");
}

void loop() {
    if (Serial.available()) {
        String data = Serial.readString();
        Serial.println("Empfangen: " + data);
    }
}
                

Verbindungsschema

ESP32
TX
RX
GND
Sensor/Modul
RX
TX
GND

Konfiguration

I2C Protokoll

Inter-Integrated Circuit - Effiziente Multi-Device Kommunikation

Grundlagen

Was ist I2C?

I2C ist ein synchrones, serielles Kommunikationsprotokoll, das mehrere Geräte über nur zwei Leitungen verbinden kann: SDA (Serial Data) und SCL (Serial Clock).

Vorteil: Ein Master kann mit bis zu 127 Slaves über dieselben zwei Leitungen kommunizieren.
Eigenschaften

I2C Merkmale

  • Synchrone Übertragung
  • Multi-Master/Multi-Slave
  • 7-Bit oder 10-Bit Adressen
  • Pull-up Widerstände erforderlich
  • Arbitrierung bei Kollisionen
// I2C Konfiguration am ESP32
#include <Wire.h>

void setup() {
    Wire.begin();  // I2C als Master initialisieren
    Serial.begin(115200);
}

void readSensor(uint8_t address) {
    Wire.beginTransmission(address);
    Wire.write(0x00);  // Register-Adresse
    Wire.endTransmission();
    
    Wire.requestFrom(address, 2);  // 2 Bytes anfordern
    if (Wire.available() >= 2) {
        uint16_t data = Wire.read() << 8 | Wire.read();
        Serial.println("Sensor-Wert: " + String(data));
    }
}
                

Bus-Topologie

ESP32 (Master)
SDA
SCL
SDA
4.7kΩ
SCL
4.7kΩ
Sensor 1
0x48
Display
0x3C
EEPROM
0x50

Kommunikationsablauf

1
START Condition

SDA fällt bei HIGH SCL

2
Adresse senden

7-Bit Adresse + R/W Bit

3
ACK/NACK

Slave bestätigt Empfang

4
Daten übertragen

8-Bit Datenpakete

5
STOP Condition

SDA steigt bei HIGH SCL

UART vs I2C Vergleich

Entscheidungshilfe für die richtige Protokollwahl

UART

Ideal für

  • Punkt-zu-Punkt Verbindungen
  • Einfache Implementierung
  • Hohe Datenraten
  • Debugging und Logging
  • GPS Module, Bluetooth
I2C

Ideal für

  • Mehrere Sensoren/Geräte
  • Platzsparende Verkabelung
  • Standardisierte Adressen
  • EEPROM, RTC, Sensoren
  • Display-Controller
Eigenschaft UART I2C
Leitungen 2 (TX, RX) 2 (SDA, SCL)
Geräte 2 (Punkt-zu-Punkt) Bis zu 127
Synchronisation Asynchron Synchron
Geschwindigkeit Bis zu 5 Mbps Bis zu 5 MHz
Komplexität Einfach Mittel

Praktische Beispiele

UART: GPS Modul

UART
GPS Module

GPS-Module senden kontinuierlich NMEA-Daten über UART an den ESP32.

Serial2.begin(9600, SERIAL_8N1, 16, 17);
String gpsData = Serial2.readString();
✓ 9600 Baud ✓ Kontinuierliche Daten ✓ NMEA Format

I2C: OLED Display

I2C
OLED Display

OLED-Displays werden über I2C angesteuert und können Text und Grafiken anzeigen.

Wire.begin(21, 22);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
✓ Adresse 0x3C ✓ 128x64 Pixel ✓ Geringer Stromverbrauch

UART: Bluetooth Modul

UART
Bluetooth Module

Bluetooth-Module ermöglichen drahtlose Kommunikation über UART-Schnittstelle.

Serial2.begin(38400, SERIAL_8N1, 16, 17);
Serial2.println("AT+NAME=ESP32_Device");
✓ 38400 Baud ✓ AT-Kommandos ✓ Drahtlos