scanner-i2c.ino

Arduino Mega ADK (Rev3) · Archivo : scanner-i2c.ino · Lenguaje : Arduino · Uso : Détecter les périphériques I2C connectés et afficher leurs adresses

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

← Volver a la ficha