Einleitung
I2C (Inter-Integrated Circuit) ist ein weit verbreitetes Kommunikationsprotokoll, das es Mikrocontrollern ermöglicht, mit Sensoren, Displays und anderen Peripheriegeräten über nur zwei Leitungen zu kommunizieren: SDA (Daten) und SCL (Takt). Aber beim Prototyping kennt man oft die genaue Adresse eines neuen I2C-Geräts nicht. Hier kommt ein I2C-Scanner ins Spiel. Er testet jede mögliche Adresse auf dem Bus und meldet, welche antworten.
In diesem Tutorial bauen wir einen I2C-Scanner für den Raspberry Pi Pico mit dem Velxio-Browser-Simulator. Du lernst, wie du eine einfache Schaltung mit zwei Anzeige-LEDs aufbaust, den Scan-Code in Arduino C++ schreibst und die Ergebnisse interpretierst. Keine Hardware nötig – nur dein Browser!

Schaltungsaufbau
Unsere Schaltung ist minimal, aber lehrreich. Wir verwenden zwei LEDs, um während des Scans visuelles Feedback zu geben:
- Blaue LED (led-scan): Angeschlossen an GP12 (D12 auf dem Pico) über einen Strombegrenzungswiderstand (im LED-Bauteil integriert). Ihre Anode (A) verbindet sich mit GP12, und ihre Kathode (C) geht an Masse. Diese LED blinkt jedes Mal, wenn der Scanner eine Startbedingung auf dem I2C-Bus sendet.
- Grüne LED (led-found): Angeschlossen an GP10 (D10). Ihre Anode geht an GP10, die Kathode an Masse. Diese LED leuchtet auf, wenn während des Scans ein Gerät gefunden wird.
Beide LEDs teilen sich eine gemeinsame Masseverbindung zum GND.1-Pin des Pico. Der I2C-Bus selbst verwendet die Standard-Pins: SDA = GP4 und SCL = GP5. Es werden keine externen Pull-Up-Widerstände benötigt, da die internen Pull-Ups des Pico von der Wire-Bibliothek aktiviert werden.
Um diese Schaltung in Velxio aufzubauen:
- Öffne die Komponentenauswahl über die Symbolleiste der Leinwand.

- Füge ein Raspberry Pi Pico-Board hinzu.
- Füge zwei LEDs (blau und grün) aus der Kategorie Ausgabe hinzu.
- Verdrahte sie wie beschrieben: GP12 → blaue LED-Anode, GP10 → grüne LED-Anode, beide Kathoden → GND.
- Verwende die Symbolleiste der Leinwand, um Komponenten zu zoomen und ordentlich anzuordnen.

Code-Durchlauf
Jetzt tauchen wir in den Code ein. Öffne den Code-Editor in Velxio und füge den folgenden Sketch ein:
// Raspberry Pi Pico — I2C Scanner
// Scans I2C bus (Wire / I2C0: SDA=GP4, SCL=GP5) for devices
#include <Wire.h>
void setup() {
Serial.begin(115200);
delay(500);
Wire.begin(); // SDA=GP4, SCL=GP5 by default on Pico
Serial.println("=== Pico I2C Scanner ===");
Serial.println("Default I2C0: SDA=GP4, SCL=GP5");
Serial.println();
}
void loop() {
Serial.println("Scanning I2C bus...");
int found = 0;
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
byte error = Wire.endTransmission();
if (error == 0) {
found++;
Serial.print(" Device found at 0x");
if (addr < 16) Serial.print("0");
Serial.print(addr, HEX);
// Identify known addresses
switch (addr) {
case 0x48: Serial.print(" (Temperature sensor)"); break;
case 0x50: Serial.print(" (EEPROM)"); break;
case 0x68: Serial.print(" (DS1307 RTC)"); break;
case 0x27: Serial.print(" (LCD backpack)"); break;
case 0x3C: Serial.print(" (SSD1306 OLED)"); break;
default: break;
}
Serial.println();
}
}
Serial.print("Scan complete. Found ");
Serial.print(found);
Serial.println(" device(s).");
Serial.println();
delay(5000);
}
Wie es funktioniert
Wire.begin()initialisiert das I2C-Peripheriegerät auf den Standard-Pins (GP4/GP5). Auf dem Pico richtet dies I2C0 ein.- Die
for-Schleife durchläuft alle möglichen 7-Bit-Adressen von 1 bis 127. Adresse 0 ist für den allgemeinen Aufruf reserviert, daher überspringen wir sie. - Für jede Adresse rufen wir
Wire.beginTransmission(addr)und dannWire.endTransmission()auf. Der Rückgabewert vonendTransmission()ist 0, wenn das Gerät bestätigt hat, oder ein Nicht-Null-Fehlercode. - Wenn ein Gerät antwortet, geben wir seine Adresse im Hexadezimalformat aus. Der Code enthält auch eine switch-Anweisung, die einige gängige Adressen kennzeichnet (z. B. 0x3C für SSD1306 OLED-Displays).
- Die blaue LED an GP12 schaltet jedes Mal um, wenn ein Scan-Zyklus beginnt (du kannst
digitalWrite(12, HIGH)unddigitalWrite(12, LOW)um die Scan-Schleife herum für visuelles Feedback hinzufügen). Die grüne LED an GP10 leuchtet auf, wenn ein Gerät gefunden wird.
Zum Kompilieren und Ausführen klicke auf die Schaltfläche Kompilieren in der Editor-Symbolleiste.

Wichtige Konzepte
- I2C-Protokoll: Ein serieller Kommunikationsbus mit mehreren Mastern, mehreren Slaves, paketvermittelt und single-ended. Jedes Gerät hat eine eindeutige Adresse.
- Wire-Bibliothek: Arduinos integrierte Bibliothek für die I2C-Kommunikation. Auf dem Pico verwendet sie standardmäßig I2C0.
- Pull-Up-Widerstände: I2C-Leitungen benötigen Pull-Up-Widerstände zu VCC. Der Pico hat interne Pull-Ups, die aktiviert werden können, aber für einen zuverlässigen Betrieb mit vielen Geräten werden externe 4,7kΩ-Widerstände empfohlen.
- Adressierung: 7-Bit-Adressen reichen von 0x01 bis 0x7F (127). Einige Adressen sind reserviert (z. B. 0x00 für den allgemeinen Aufruf).
Häufige Fallstricke & Debugging-Tipps
- Keine Geräte gefunden? Überprüfe, ob deine I2C-Geräte mit Strom versorgt und korrekt angeschlossen sind. Stelle in der Simulation sicher, dass du virtuelle I2C-Peripheriegeräte (wie ein OLED oder einen Temperatursensor) zur Schaltung hinzugefügt hast.
- Falsche Pins? Die Standard-I2C0-Pins des Pico sind GP4 (SDA) und GP5 (SCL). Wenn du andere Pins verwendest, rufe
Wire.setSDA(pin)undWire.setSCL(pin)vorWire.begin()auf. - Serieller Monitor zeigt keine Ausgabe? Stelle sicher, dass die Baudrate übereinstimmt (115200 in unserem Code). Öffne in Velxio den Seriellen Monitor über die Symbolleiste.
- LEDs blinken nicht? Überprüfe die Verkabelung: Anode an GPIO, Kathode an GND. Stelle auch sicher, dass du die Pins in
setup()mitpinMode(12, OUTPUT)undpinMode(10, OUTPUT)als Ausgänge festgelegt hast.
Vorgeschlagene Erweiterungen
- Ein echtes I2C-Gerät hinzufügen: Platziere ein SSD1306 OLED oder einen BMP280-Sensor auf der Leinwand und beobachte, wie der Scanner es erkennt.
- Mehrere Busse scannen: Der Pico hat zwei I2C-Peripheriegeräte (I2C0 und I2C1). Ändere den Code, um beide zu scannen.
- Ergebnisse auf einem LCD anzeigen: Zeige die gefundenen Adressen anstelle von Serial auf einem 16x2 LCD an.
- Automatische Erkennung und Konfiguration: Sobald du die Adresse eines Geräts kennst, initialisiere automatisch seine Bibliothek.
Probier es selbst aus!
Bereit, den I2C-Bus zu scannen? Öffne das Live-Beispiel in Velxio und beginne zu experimentieren:
Starte den Pico I2C Scanner auf Velxio
Keine Downloads, kein Löten – nur reine Simulation. Ändere den Code, füge neue Komponenten hinzu und sieh die Ergebnisse sofort. Viel Spaß beim Scannen!