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 Duemilanove (ATmega168 o 328P, 16 MHz, 5 V) con su cable mini-USB-B; el puerto serie aparece tras instalar el driver FTDI. 1 o más módulos I2C (p. ej. LCD PCF8574, MPU6050, BME280).
Cableado
SDA al pin SDA (A4), SCL al SCL (A5), 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. En el Arduino IDE, elija « Arduino Duemilanove » (o « Diecimila » para placas muy antiguas) y el puerto FTDI, y pulse Subir. El ATmega168 solo deja 14 KB para el sketch.
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 (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);
}