scanner-i2c.ino

Arduino Duemilanove — Fiche carte · 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 Duemilanove (ATmega168 ou 328P, 16 MHz, 5 V) avec son câble mini-USB-B ; le port série apparaît après installation du driver FTDI. 1 ou plusieurs modules I2C (ex. LCD PCF8574, MPU6050, BME280).

Branchement

SDA sur la broche SDA (A4), SCL sur SCL (A5), 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 Duemilanove » (ou « Diecimila » pour les très vieilles cartes) et le port FTDI, puis Téléverser. L'ATmega168 n'a que 14 Ko pour le sketch.

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 (A4), SCL=SCL (A5)) 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