[I2C] Código Arduino para localizar direcciones I2C

Arduino y el bus I2C

Comprobado. Este código puede utilizarse para identificar la dirección I2C de cada dispositivo conectado a ese bus. Muy útil cuando la desconocemos y necesitamos emplearla en nuestros programas. Bastará conectar a los pines SDA y SCL del Arduino los homólogos del dispositivo y cargar este programa en el Arduino: Por el terminal serie nos aparecerá su dirección I2C.

#include <Wire.h> void setup() { // Habilitación de comunicaciones Serial.begin (9600); // Habilitamos puerto serie a 9600 baudios while (!Serial) {}; // Esperamos a que el puerto serie se conecte Wire.begin(); // Habilitamos bus I2C delay (2000); // Espera prudencial para encender dispositivos I2C // Búsqueda de dispositivos I2C Serial.println (); Serial.println ("Escaneando direcciones I2C..."); byte contador = 0; // Reseteamos el contador de dispositivos conectados // Bucle de búsqueda for (byte direccion = 1; direccion < 120; direccion++){ // Petición de transmisión a esa dirección Wire.beginTransmission (direccion); if (Wire.endTransmission () == 0){ // Existe un dispositivo con esa dirección Serial.print ("Encontrada dirección: "); Serial.print (direccion,DEC); Serial.print (" (0x"); Serial.print (direccion,HEX); Serial.println (")"); contador++; // Actualizamos numero dispositivos encontrados } // Final de dispositivo encontrado } // Final del bucle de búsqueda de dispositivos Serial.println ("Búsqueda finalizada."); Serial.print ("Encontrados "); Serial.print (contador,DEC); Serial.println (" dispositivo(s)."); } // Final del setup void loop() {} // Final del loop

Ejemplo de salida para el módulo de color GY-33

Escaneando direcciones I2C...
Encontrada dirección: 41 (0x29)
Búsqueda finalizada.
Encontrados 1 dispositivo(s).

Ejemplo de salida para el módulo de color GY-33 y un expansor PCF8574

Escaneando direcciones I2C...
Encontrada dirección: 32 (0x20)
Encontrada dirección: 41 (0x29)
Búsqueda finalizada.
Encontrados 2 dispositivo(s).