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 2560 (ATmega2560, 16 MHz, 5 V): 54 E/S digitales, 15 PWM, 16 entradas analógicas, 4 UART por hardware. 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. En el Arduino IDE, elija « Arduino Mega 2560 » y el puerto, y suba. PWM en 2-13 y 44-46; UART1=18/19, UART2=16/17, UART3=14/15; SPI en 50-53.
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);
}