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 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);
}