I2C ist ein serieller Bus (eine gemeinsame Datenverbindung mehrerer Bausteine) mit nur zwei Leitungen: SDA trägt die Daten, SCL den Takt, an dem der Empfänger die Bits erkennt. Wer versteht, wie sich viele Geräte diese zwei Adern teilen, spart Pins und erkennt Störungen sofort.
🔋 Eine Baugruppe zieht den Bus nur nach unten, nie nach oben.
SDA und SCL sind Open-Drain-Leitungen: Ein Baustein kann seinen Ausgang nur gegen Masse schalten. Zieht keiner aktiv auf Low, laden die Pull-up-Widerstände beide Leitungen auf High. Deshalb liegt der Bus im Leerlauf ruhig auf High.
📡 Jedes Gerät hört mit, aber nur eines antwortet.
Der Master, also die steuernde Instanz wie ein ESP32, startet jede Übertragung mit der Slave-Adresse des gewünschten Bausteins. Alle am Bus hören mit, doch nur der Angesprochene reagiert. Mit 7-Bit-Adressen stehen 128 Werte bereit; 16 sind reserviert, also bleiben 112 nutzbare Adressen je Bus.
🔧 Fehlen die Pull-ups, bleibt der Bus stumm.
Ein verbreiteter Startwert ist 4,7 kΩ bei 3,3 V und 100 kHz. Achtung: Viele Breakout-Module bringen eigene Widerstände mit. Mehrere parallel senken den Gesamtwiderstand und können für die Treiber zu klein werden. Am ESP32 liegen die Standardpins auf GPIO21 (SDA) und GPIO22 (SCL). Ein Kollisionsfall bleibt: Zwei Bausteine mit gleicher Adresse, etwa zwei BME280 auf 0x76, stören sich. Abhilfe: ein Adresspin am Baustein, ein I2C-Multiplexer (Umschalter auf mehrere Busse) oder ein zweiter I2C-Controller.
I2C heißt nicht ein Drahtpaar je Sensor, sondern ein geteilter Bus mit Adressen und Pull-ups. Wer die Adresse kennt, findet sein Gerät.
📌 SDA und SCL · Pull-ups · 7-Bit-Adresse
📚 IoT von Grund auf · Tag 3 von 30
#I2C #esp32 #Mikrocontroller