scanner-i2c.ino

Arduino Duemilanove — Ficha de placa · 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 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);
}

← Volver a la ficha