Introducción

Si queremos usar el módulo I2C para conectar nuestra LCD y ahorrar cables, es necesario (en la mayoría de casos) saber la dirección hexadecimal de dicho módulo. Dicha dirección puede (y siempre lo hace) variar.

Para ahorrarnos los problemas, alguien más hizo un sketch en Arduino que prueba con todas las direcciones posibles y en caso de encontrar algún dispositivo I2C nos avisa.

Hoy veremos cómo usar dicho sketch. Por cierto, lo encontré aquí, créditos a su autor.

Conexión

La conexión es simple. Un pin va a tierra, otro a voltaje positivo. Los otros dos son SCL y SDA. Lo que varía son estos dos últimos pines. Aquí mostraré la conexión para Arduino MEGA, UNO y Leonardo.

Arduino MEGA

  • SCL: Pin 21
  • SDA: Pin 20

Imagen de Fritzing:

Arduino UNO

  • SDA: Pin A4
  • SCL: Pin A5

Imagen de Fritzing:

Arduino Leonardo

Los pines SCL y SDA están marcados con esas leyendas. De todos modos dejo la imagen de Fritzing:

Código y modificaciones

Le hice algunas modificaciones al código original. Para comenzar, lo traduje al español y reduje el tiempo de espera en cada iteración. También lo puse en un gist de GitHub para que cualquier persona pueda copiarlo, pegarlo en el editor de Arduino y subirlo a la tarjeta.

Nada de zips, nada de “Descarga esta librería” y cosas de esas. Simplemente pega el siguiente código en tu editor:

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
}

void loop() {
  byte codigoDeRespuesta, direccion;
  int dispositivosEncontrados = 0;
  Serial.println("\n\nBuscando dispositivos...");

  for (direccion = 1; direccion < 127; direccion++ ) {
    Wire.beginTransmission(direccion);
    codigoDeRespuesta = Wire.endTransmission();

    if (codigoDeRespuesta == 0) {
      Serial.print("Dispositivo encontrado en la dirección 0x");
      if (direccion < 16)
        Serial.print("0");
      Serial.print(direccion, HEX);

      dispositivosEncontrados++;
    }else if (codigoDeRespuesta == 4) {
      Serial.print("Error desconocido en la dirección 0x");
      if (direccion < 16)
        Serial.print("0");
      Serial.println(direccion, HEX);
    }
  }
  if (dispositivosEncontrados == 0) Serial.println("No se encontró ningún dispositivo");
  delay(1000);
}

Una vez subido al Arduino, abre el monitor serial con Ctrl + Shift + M y se verá algo así:

Así estará infinitamente. Si dice que no se encontró ninguno, por favor verifica la conexión. Ya con la dirección podemos pasar ahora sí a trabajar con una pantalla LCD que usa este módulo.

Recuerda que la dirección es tal cual la manda, por lo que en mi caso es 0x3F. Es esencial copiar tal y como está dicha dirección.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto