scanner-i2c.ino

Arduino Mega ADK (Rev3) · Fichier : scanner-i2c.ino · Langage : Arduino · Usage : Détecter les périphériques I2C connectés et afficher leurs adresses

Avant d'écrire un pilote, on vérifie que le module (capteur, afficheur, extendeur) répond sur le bus. Wire balaye les 127 adresses et liste celles qui acquittent — le réflexe quand un périphérique « ne marche pas ».

Matériel requis

Une Arduino Mega ADK Rev3 (ATmega2560 + puce hôte USB MAX3421E avec port USB-A, broche D7 réservée au reset du MAX3421E). 1 ou plusieurs modules I2C (ex. LCD PCF8574, MPU6050, BME280).

Branchement

SDA sur la broche SDA (20), SCL sur SCL (21), VCC 5 V (ou 3,3 V) et GND ; des résistances de pull-up sont souvent déjà à demeure sur les modules.

Fonctionnement

beginTransmission/endTransmission renvoie 0 quand un circuit tire SDA bas (ACK) : l'adresse est affichée en hexadécimal. Carte « Arduino Mega ADK » dans l'IDE. Pour l'hôte USB/ADK, installez la bibliothèque USB Host Shield 2.0 ; ne pas utiliser D7. Le port USB-A alimente l'accessoire en 5 V.

Pour aller plus loin

Notez l'adresse trouvée et testez la bibliothèque du fabricant avec elle ; 0x27 (LCD) et 0x3C (OLED) sont les classiques.

scanner-i2c.ino

// Scanner de bus I2C (SDA=SDA (20), SCL=SCL (21)) avec la bibliotheque Wire.
#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial);
  Serial.println(F("Scanner I2C — 8 adresses par ligne"));
}

void loop() {
  int trouve = 0;
  for (byte addr = 1; addr < 127; addr++) {
    Wire.beginTransmission(addr);
    if (Wire.endTransmission() == 0) {
      Serial.print(F("Peripherique a 0x"));
      Serial.println(addr, HEX);
      trouve++;
    }
  }
  Serial.print(trouve);
  Serial.println(F(" peripherique(s) — nouvelle passe dans 5 s"));
  delay(5000);
}

← Retour à la fiche