Warum ein zweiter Sensor den micro:bit oder Arduino einfrieren lässt

Wenn ein zusätzlicher Sensor das ganze micro:bit- oder Arduino-Projekt lahmlegt, steckt fast immer eine blockierte I2C-Busleitung dahinter – ausgelöst durch Adresskollisionen, Pull-up-Probleme oder unterschiedliche Spannungspegel.
Wenn Ihr Projekt mit einem OLED-Display oder einem Umweltsensor einwandfrei lief und in dem Moment komplett einfror, in dem Sie einen zweiten Sensor angesteckt haben, dann ist das kein kleiner Logikfehler im Code – Ihr Kommunikationsbus hat sich physikalisch verklemmt. Das Board bleibt stehen, weil der Mikrocontroller in einer Endlosschleife auf eine elektrische Bestätigung wartet, die nie eintreffen kann.
Auf Plattformen wie dem BBC micro:bit, dem Arduino Uno und dem ESP32 kommunizieren Aufbauten mit mehreren Sensoren fast immer über I2C (Inter-Integrated Circuit). I2C ist beliebt, weil es unabhängig von der Zahl der angeschlossenen Geräte nur zwei Datenleitungen braucht (SDA und SCL) – zugleich ist es notorisch anfällig für Hardware-Deadlocks an einer einzigen Stelle.
Warum I2C hängen bleibt, statt sauber abzubrechen
Anders als eine gewöhnliche serielle Verbindung oder digitale Eingänge arbeitet I2C nach dem Open-Drain-Prinzip. Der Mikrocontroller und die Sensoren ziehen die Leitungen nicht selbst auf High; externe oder interne Pull-up-Widerstände heben SDA (Daten) und SCL (Takt) sanft auf Betriebsspannung. Jedes Gerät am Bus kann signalisieren, indem es die Leitung auf Masse herunterzieht.
Wenn Ihr Code eine Funktion wie Wire.endTransmission() aufruft oder über eine MakeCode-Erweiterung Daten anfordert, sendet der Mikrocontroller einen Adressrahmen und wartet auf ein Acknowledge-Bit (ACK). Hält ein Hardwarefehler SDA oder SCL auf Low, oder verwürfeln zwei Geräte das Signal, wartet die synchrone Firmware-Bibliothek unbegrenzt. Für Lehrkraft und Schüler wirkt das Board schlicht tot.
Die drei Übeltäter hinter dem Einfrieren
Drei verbreitete Hardwaresituationen erklären nahezu alle I2C-Blockaden mit mehreren Sensoren im Unterricht:
1. Doppelte Standardadressen
Jeder I2C-Sensor hat eine feste 7-Bit-Hex-Adresse, die fest im Silizium verdrahtet ist. Wenn Sie zwei identische Sensoren anschließen (etwa zwei MPU6050-Beschleunigungssensoren oder zwei gängige 0,96-Zoll-OLED-Displays), teilen sich beide Geräte exakt dieselbe Adresse (etwa 0x68 oder 0x3C).
Sendet der Mikrocontroller diese Adresse, wollen beide Chips im selben Augenblick antworten. Ihre Datenleitungen kollidieren, die Taktimpulse werden verstümmelt, und der Buszustand blockiert.
| Sensortyp | Übliche Standardadresse | Zweitadresse (Pin umgelegt) |
|---|---|---|
| MPU-6050 (Gyro/Beschleunigung) | 0x68 | 0x69 (AD0 auf 3,3 V) |
| SSD1306 OLED (128x64) | 0x3C | 0x3D (Lötbrücke umgesetzt) |
| BME280 (Temperatur/Druck) | 0x76 | 0x77 (SDO auf VCC oder GND) |
| DS3231 (Echtzeituhr) | 0x57 / 0x68 | Fest / Lötbrücke |
2. Fehlende oder floatende Pull-up-Widerstände
Weil I2C darauf angewiesen ist, dass Pull-up-Widerstände die Leitungen wieder auf High ziehen, führen fehlende Pull-ups dazu, dass Takt- und Datenleitung unvorhersehbar floaten. Umgekehrt schaltet man diese Widerstände parallel, wenn man vier oder fünf Breakout-Boards zusammensteckt, die jeweils eigene interne Pull-ups von 4,7 kΩ oder 10 kΩ mitbringen. Der Gesamtwiderstand des Busses sinkt dadurch so weit, dass die schwachen Transistoren in gängigen Sensoren die Leitung nicht mehr ganz auf 0 V ziehen können – die Übertragung scheitert.
3. Unterschiedliche Logikpegel: 3,3 V und 5 V
Der BBC micro:bit und moderne ESP32-Mikrocontroller arbeiten mit 3,3-V-Logik, ein klassischer Arduino Uno oder ein älteres Sensor-Breakout dagegen mit 5 V. Stecken Sie einen 5-V-Sensor mit eigenen Pull-up-Widerständen zusammen mit einem 3,3-V-Sensor an denselben Bus, zieht die 5-V-Leitung die Datenleitungen des micro:bit auf 5 V hoch. Im besten Fall wird der Bus dadurch gestört, im schlimmsten Fall nehmen der 3,3-V-Sensor oder die I2C-Peripherie des Mikrocontrollers Schaden.
Eine Fehlersuche in vier Schritten für den Unterricht
Wenn der Mehrsensor-Aufbau einer Schülerin das Board einfriert, arbeiten Sie diese Diagnosefolge Schritt für Schritt ab, um den elektrischen Fehler schnell einzukreisen:
Schritt 1: Isolieren und scannen
Ziehen Sie den neuen Sensor ab und prüfen Sie, ob die ursprüngliche Schaltung noch startet. Flashen Sie dann ein I2C-Scanner-Skript auf das Board (in den Arduino-Standardbeispielen oder über einfache MakeCode-Erweiterungen leicht verfügbar). Der Scanner pingt die Adressen von 0x01 bis 0x7F durch und meldet jedes antwortende Gerät über die serielle Schnittstelle. Stecken Sie anschließend den zweiten Sensor allein an und scannen Sie erneut. Melden beide Sensoren exakt dieselbe Hex-Adresse, haben Sie die Kollision gefunden.
Schritt 2: Den Adress-Pin der Hardware ändern
Die meisten Breakout-Boards haben einen Pin zur Adressauswahl (oft mit ADDR, AD0 oder SDO beschriftet) oder eine kleine Lötbrücke auf der Rückseite der Platine. Legt man diesen Pin auf 3,3 V oder GND, ändert sich das niedrigste Bit der Geräteadresse. Sobald der Pin umgelegt ist, passen Sie den Initialisierungscode für genau diese Sensorinstanz auf die Zweitadresse an.
Schritt 3: Busspannung und Leitungslängen prüfen
Stellen Sie sicher, dass alle Sensoren am Bus mit demselben Logikpegel laufen. Wenn Sie 5-V-Module mit einem 3,3-V-micro:bit kombinieren müssen, führen Sie die Signale über einen dedizierten bidirektionalen Pegelwandler statt sie einfach parallel zu verdrahten. Halten Sie außerdem die Jumperkabel kurz – lange, unordentliche Steckbrettverdrahtung bringt parasitäre Kapazitäten mit, die die rechteckigen Taktflanken verschleifen und zu Paketverlusten führen.
Schritt 4: Timeouts im Treiber aktivieren
Alter Arduino-Code stützt sich auf blockierende Funktionen. In der Arduino-IDE können Sie verhindern, dass der Mikrocontroller dauerhaft einfriert, indem Sie nach Wire.begin() ein Bus-Timeout setzen:
Wire.begin();
Wire.setWireTimeout(3000, true); // 3 ms Timeout, Bus bei Blockade zurücksetzenBlockiert der Bus wegen eines losen Kabels oder einer Spannungsspitze, setzt der Treiber die Hardware-Peripherie automatisch zurück und arbeitet den Rest der Schleife weiter ab, statt das gesamte System anzuhalten.
Robuste Schaltungen für den Unterricht bauen
Wenn Lernende verstehen, wie I2C unter der Haube funktioniert, wird aus einer frustrierenden, stummen Blockade eine anschauliche Lektion über Kommunikationsprotokolle. Wenn Sie Mehrsensor-Robotikbausätze für AGs oder den Lehrplan zusammenstellen, finden Sie modulare Breakout-Boards und Hardware-Sets für den Unterricht im sheen robotics Store; ganze Lernpfade planen Sie mit unseren strukturierten Unterrichtseinheiten auf sheen Canvas.
Kurze Leitungswege, vor dem Zusammenbau geprüfte Hardwareadressen und Schülerinnen und Schüler, die Hex-Adressen im I2C-Scanner lesen können: So verhindern Sie das gefürchtete Einfrieren beim zweiten Sensor, bevor es Ihre Stunde sprengt.



