Introduction
I2C (Inter-Integrated Circuit) est un protocole de communication populaire qui permet aux microcontrôleurs de dialoguer avec des capteurs, des écrans et d’autres périphériques en utilisant seulement deux fils : SDA (données) et SCL (horloge). Mais lors du prototypage, on ne connaît souvent pas l’adresse exacte d’un nouveau périphérique I2C. C’est là qu’un scanner I2C devient utile. Il sonde toutes les adresses possibles sur le bus et rapporte celles qui répondent.
Dans ce tutoriel, nous allons construire un scanner I2C pour le Raspberry Pi Pico en utilisant le simulateur en ligne Velxio. Vous apprendrez à câbler un circuit simple avec deux LED indicatrices, à écrire le code de balayage en Arduino C++ et à interpréter les résultats. Aucun matériel nécessaire — juste votre navigateur !

Présentation du circuit
Notre circuit est minimal mais instructif. Nous utiliserons deux LED pour fournir un retour visuel pendant le balayage :
- LED bleue (led-scan) : Connectée à GP12 (D12 sur le Pico) via une résistance de limitation de courant (interne au composant LED). Son anode (A) se connecte à GP12, et sa cathode (C) va à la masse. Cette LED clignote chaque fois que le scanner envoie une condition de démarrage sur le bus I2C.
- LED verte (led-found) : Connectée à GP10 (D10). Son anode va à GP10, sa cathode à la masse. Cette LED s’allume lorsqu’un périphérique est trouvé lors du balayage.
Les deux LED partagent une connexion de masse commune avec la broche GND.1 du Pico. Le bus I2C lui-même utilise les broches par défaut : SDA = GP4 et SCL = GP5. Aucune résistance de tirage externe n’est nécessaire car les résistances de tirage internes du Pico sont activées par la bibliothèque Wire.
Pour construire ce circuit dans Velxio :
- Ouvrez le sélecteur de composants depuis la barre d’outils du canevas.

- Ajoutez une carte Raspberry Pi Pico.
- Ajoutez deux LED (bleue et verte) depuis la catégorie Sortie.
- Câblez-les comme décrit : GP12 → anode LED bleue, GP10 → anode LED verte, les deux cathodes → GND.
- Utilisez la barre d’outils du canevas pour zoomer et disposer les composants proprement.

Explication du code
Plongeons maintenant dans le code. Ouvrez l’éditeur de code dans Velxio et collez le sketch suivant :
// 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);
}
Comment ça fonctionne
Wire.begin()initialise le périphérique I2C sur les broches par défaut (GP4/GP5). Sur le Pico, cela configure I2C0.- La boucle
forparcourt toutes les adresses 7 bits possibles de 1 à 127. L’adresse 0 est réservée pour l’appel général, nous l’ignorons donc. - Pour chaque adresse, nous appelons
Wire.beginTransmission(addr)puisWire.endTransmission(). La valeur de retour deendTransmission()est 0 si le périphérique a accusé réception, ou un code d’erreur non nul sinon. - Si un périphérique répond, nous affichons son adresse au format hexadécimal. Le code inclut également une instruction switch qui étiquette certaines adresses courantes (par exemple, 0x3C pour les écrans OLED SSD1306).
- La LED bleue sur GP12 bascule à chaque début de cycle de balayage (vous pouvez ajouter
digitalWrite(12, HIGH)etdigitalWrite(12, LOW)autour de la boucle de balayage pour un retour visuel). La LED verte sur GP10 s’allume lorsqu’un périphérique est trouvé.
Pour compiler et exécuter, cliquez sur le bouton compiler dans la barre d’outils de l’éditeur.

Concepts clés
- Protocole I2C : Un bus de communication série, multi-maître, multi-esclave, à commutation de paquets et à extrémité unique. Chaque périphérique possède une adresse unique.
- Bibliothèque Wire : La bibliothèque intégrée d’Arduino pour la communication I2C. Sur le Pico, elle utilise I2C0 par défaut.
- Résistances de tirage : Les lignes I2C nécessitent des résistances de tirage vers VCC. Le Pico dispose de résistances de tirage internes qui peuvent être activées, mais pour un fonctionnement fiable avec de nombreux périphériques, des résistances externes de 4,7 kΩ sont recommandées.
- Adressage : Les adresses 7 bits vont de 0x01 à 0x7F (127). Certaines adresses sont réservées (par exemple, 0x00 pour l’appel général).
Pièges courants et conseils de débogage
- Aucun périphérique trouvé ? Vérifiez que vos périphériques I2C sont alimentés et connectés correctement. En simulation, assurez-vous d’avoir ajouté des périphériques I2C virtuels (comme un OLED ou un capteur de température) au circuit.
- Mauvaises broches ? Les broches I2C0 par défaut du Pico sont GP4 (SDA) et GP5 (SCL). Si vous utilisez des broches différentes, appelez
Wire.setSDA(pin)etWire.setSCL(pin)avantWire.begin(). - Le moniteur série n’affiche rien ? Assurez-vous que le débit en bauds correspond (115200 dans notre code). Dans Velxio, ouvrez le moniteur série depuis la barre d’outils.
- Les LED ne clignotent pas ? Vérifiez le câblage : anode vers GPIO, cathode vers GND. Vérifiez également que vous avez configuré les broches comme sorties dans
setup()avecpinMode(12, OUTPUT)etpinMode(10, OUTPUT).
Extensions suggérées
- Ajoutez un vrai périphérique I2C : Placez un OLED SSD1306 ou un capteur BMP280 sur le canevas et voyez le scanner le détecter.
- Balayez plusieurs bus : Le Pico dispose de deux périphériques I2C (I2C0 et I2C1). Modifiez le code pour balayer les deux.
- Affichez les résultats sur un LCD : Au lieu du moniteur série, montrez les adresses trouvées sur un LCD 16x2.
- Détection et configuration automatiques : Une fois que vous connaissez l’adresse d’un périphérique, initialisez automatiquement sa bibliothèque.
Essayez par vous-même !
Prêt à balayer le bus I2C ? Ouvrez l’exemple en direct dans Velxio et commencez à expérimenter :
Lancez le scanner I2C Pico sur Velxio
Pas de téléchargement, pas de soudure — juste de la pure simulation. Modifiez le code, ajoutez de nouveaux composants et voyez les résultats instantanément. Bon balayage !