Saltar al contenido
Control Automático Educación

I2C Arduino

Hola controleros y controleras en el día de hoy vamos a aprender como funciona la comunicación I2C con Arduino, y a modo de Ejemplo vamos a conectar una Interfaz I2C LCD para conectar la pantalla LCD a través de este protocolo

Antes de comenzar, te hago la invitación para que veas nuestro CURSO GRATIS DE ARDUINO.

I2C Arduino

El bus de comunicación I2C es un protocolo que permite controlar varios dispositivos conectados únicamente a dos hilos. Estos dos hilos corresponden a la línea SDA encargada de transmitir los datos y la línea SCL encargada de enviar los sincronismos de reloj.

A continuación, podemos ver un esquema de conexión de varios dispositivos i2c donde vemos que únicamente emplean esas dos líneas y claro, la alimentación vcc y tierra.

I2C Arduino

Dentro de ese bus de comunicación I2C, pueden existir varios maestros y esclavos o un maestro y varios esclavos. La clave es que cada uno de esos dispositivos poseen una dirección única, por lo cual es posible hacer comunicación usando solo las dos líneas.

Como podemos ver, ambas líneas SDA y SCL son líneas de colector abierto, por lo que siempre se debe colocar dos resistencias a positivo (PULLUP) para garantizar el estado alto en ambas líneas.

En una ENTRADA anterior de este sito WEB explicamos detalladamente el funcionamiento del protocolo I2C que puede aplicarse a cualquier microcontrolador. Esas serán las bases para que aprendas a utilizar el I2C Arduino y entiendas el funcionamiento que hay debajo de esto. Sin embargo, te resumo el funcionamiento del I2C en el siguiente video:

Como encontrar la Dirección I2C

Cada dispositivo que usa el protocolo de comunicación I2C tiene una dirección dentro del bus de comunicación. Esta dirección muchas veces puede ser establecida físicamente en el circuito colocando algunos pines a positivo y negativo, o puenteando algunas entradas. Todo eso estará disponible siempre en el datasheet del dispositivo que queramos conectar via I2C con Arduino.

Sin embargo, si no es posible obtener el datasheet, podemos averiguar la dirección I2C del dispositivo programando el CÓDIGO DE ARDUINO QUE TE DEJO AL FINAL DE ESTE POST y verificando la dirección en el Serial Monitor, tal y como se muestra en el siguiente video.

PINES I2C de Arduino

La conexión de cualquier dispositivo I2C debe respetar los siguientes pines dependiendo de la placa que tengas

Adaptador LCD a I2C Arduino Uno, Nano, Mini. Arduino Mega , DUE Arduino Leonardo
  GND GND GND GND
  VCC 5V 5V 5V
  SDA A4 20 2
  SCL A5 21 3

Para usar el bus I2C en Arduino, el IDE Standard proporciona la librería “Wire.h”, que contiene las funciones necesarias para controlar el hardware integrado.

Existen otras librerías más avanzadas que Wire.h para manejar el bus I2C, como por ejemplo I2Cdevlib o I2C library.

Interfaz LCD via I2C

A modo de ejemplo, vamos a usar uno de los módulos más populares que utilizan la comunicación I2C, y es el modulo de interfaz LCD via I2C.

La ventaja de usar este módulo es que podremos conectar un LCD utilizando únicamente dos líneas del Arduino y la alimentación.

lcd i2c arduino

Si viste la entrada de I2C PIC o viste el video de este post, ya sabrás que cada dispositivo tiene una dirección única dentro del protocolo, en este caso el LCD I2C de Arduino tiene tres pines los cuales sirven para establecer físicamente su dirección.

Pines A0, A1 y A2. Puenteando estos pines por medio de soldadura podremos definir la dirección del periférico. Estos tres pines corresponden a los bits menos significativos de la dirección I2C del módulo. La dirección 0x3F en binario sería: 0|0|1|1|1|A2|A1|A0 y la dirección 0x27: 0|0|1|0|0|A2|A1|A0.

Pines I2C Interfaz LCD
Pines interfaz I2C LCD

O también podemos emplear el código anterior para saber su dirección.

LCD con Arduino I2C

Podemos encontrar infinidad de librerías para la manipular el LCD I2C Arduino. En este caso vamos a usar la librería LiquidCrystal_I2C que posee funciones similares a la propia librería del Arduino IDE.

LiquidCrystal_I2C  lcd(lcd_Addr, lcd_cols, lcd_rows)

Función constructor, crea un objeto de la clase LiquidCrystal_I2C, con dirección, columnas y filas indicadas.

lcd.init()

Inicializa el modulo adaptador LCD a I2C, esta función internamente configura e inicializa el I2C y el LCD.

lcd.clear()

Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posición (0,0)).

lcd.setCursor(col, row)

Posiciona el cursor del LCD en la posición indicada por col y row(x,y);

lcd.print()

Escribe un texto o mensaje en el LCD.

lcd.scrollDisplayLeft()

Se desplaza el contenido de la pantalla (texto y el cursor) un espacio hacia la izquierda.

lcd.scrollDisplayRight()

Se desplaza el contenido de la pantalla (texto y el cursor) un espacio a la derecha.

lcd.backlight();

Enciende la Luz del Fondo del LCD

lcd.noBacklight();

Apaga la Luz del Fondo del LCD

Ejemplo LCD I2C Arduino

Vamos a montar el siguiente circuito y verificar el funcionamiento de un display conectado a través de la comunicación I2C

Interfaz I2C LCD

A continuación te dejo el código de Ejemplo del LCD I2C junto con el código para determinar la dirección I2C de cualquier dispositivo de Arduino para que lo descargues totalmente grátis.

Código Interfaz LCD I2C

 

Código para determinar dirección I2C

 

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.