scanner-i2c.ino
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);
}