🛠 Scanner le bus I²C de l'UNO (A4/A5)

Arduino UNO R3 · avance · Schéma : IMG-uno-r3-avance-2-scanner-bus-i2c.svg — UNO R3 avec un module I²C (afficheur OLED) sur le bus A4 (SDA) / A5 (SCL), pull-up R1/R2 notées, broches SDA/SCL près de AREF mises en évidence.

Objectifs

Maîtriser le bus I²C standardisé par les connecteurs R3 : SDA sur A4, SCL sur A5, et les broches SDA/SCL dédiées ajoutées à côté de AREF sur l'UNO R3 (avec IOREF et 3,3 V — c'est cet ajout qui a défini le standard des shields). Vous allez écrire un scanner d'adresses, outil de diagnostic indispensable avant tout driver de capteur.

Matériel

Code complet

// Scanner I²C : interroge les adresses 8..127 et liste les réponses.
#include <Wire.h>

void setup {
  Wire.begin;          // maître, broches A4/A5 par défaut sur UNO
  Serial.begin(115200);
  Serial.println(F("Scanneur I2C — bus A4(SDA)/A5(SCL)"));
}

void loop {
  uint8_t trouves = 0;
  for (uint8_t addr = 8; addr <= 127; addr++) {
    Wire.beginTransmission(addr);
    uint8_t err = Wire.endTransmission;
    if (err == 0) {                       // 0 = ACK reçu, périphérique présent
      Serial.print(F("Périphérique à l'adresse 0x"));
      Serial.println(addr, HEX);
      trouves++;
    } else if (err == 4) {
      // Erreur sur la phase d'écriture : on ignore sans bloquer.
    }
  }
  if (trouves == 0) Serial.println(F("Aucun périphérique — vérifiez SDA/SCL et les pull-up"));
  Serial.println(F("--- nouvelle passe (Ctrl+Shift+M pour arrêter le moniteur) ---"));
  delay(5000);
}

Vérification attendue

Chaque module branché apparaît avec son adresse (OLED : 0x3C, PCF8574 : 0x20/0x27, etc.). Test de diagnostic : débranchez SCL — le scan ne trouve plus rien ; inversez SDA/SCL sur un shield — rien non plus. C'est votre multimètre du bus.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels