scanner-i2c.ino
Antes de escribir un driver, compruebe que el módulo (sensor, display, expansor) responde en el bus. Wire barre 127 direcciones y lista las que responden con ACK: el gesto clásico cuando un dispositivo «no va».
Hardware necesario
Un Arduino Mega ADK Rev3 (ATmega2560 + chip de host USB MAX3421E con puerto USB-A; el pin digital 7 queda reservado para el reset del MAX3421E). 1 o más módulos I2C (p. ej. LCD PCF8574, MPU6050, BME280).
Cableado
SDA al pin SDA (20), SCL al SCL (21), VCC 5 V (o 3,3 V) y GND; las resistencias pull-up suelen venir puestas en los módulos.
Funcionamiento
beginTransmission/endTransmission devuelve 0 cuando un circuito baja SDA (ACK): la dirección se imprime en hexadecimal. Placa « Arduino Mega ADK » en el IDE. Para host USB/ADK, instale la biblioteca USB Host Shield 2.0; no use D7. El puerto USB-A alimenta el accesorio a 5 V.
Para ir más lejos
Anote la dirección hallada y pruebe la librería del fabricante; 0x27 (LCD) y 0x3C (OLED) son las clásicas.
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);
}