scanner-i2c.ino

Arduino Mega 2560 (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 2560 (ATmega2560, 16 MHz, 5 V) : 54 E/S numériques, 15 PWM, 16 entrées analogiques, 4 UART matériels. 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. Dans l'Arduino IDE, choisissez « Arduino Mega 2560 » et le port, puis Téléverser. PWM sur 2-13 et 44-46 ; UART1=18/19, UART2=16/17, UART3=14/15 ; SPI sur 50-53.

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