En el proyecto anterior vimos como conectamos una pantalla LCD por el método de 4 bits, vimos que se utilizan un total de 6 pines del Arduino para conectar nuestra pantalla, en este proyecto vamos a utilizar el módulo I2C, que irá conectado a la pantalla y la controlaremos por medio de esta interfaz que usa solo dos pines de nuestro Arduino (SDA, SCL).
¿Qué es el módulo I2C?
El módulo I2C es una interfaz de comunicación serial que utiliza el protocolo I²C para controlar una pantalla LCD de una forma más sencilla, al solo utilizar dos pines para comunicarse con nuestro Arduino, lo cual nos deja más pines del Arduino libres para usarlos en con otros sensores.
Este módulo tiene un chip I²C PCF8574 cuya función es la de convertir los datos en serie I²C en datos paralelos para que puedan ser leídos por la pantalla LCD, funciona tanto en pantallas LCD 1602 como en LCD2004.
Por defecto el este módulo tiene la dirección 0x27 (también puede ser la 0x3F ), esta dirección puede ser cambiada con los pines A0, A1 y A2 que posee el módulo.
Este módulo puede trabajar en las siguientes direcciones (0x20 ~ 0x27); un total de 8 display LCD pueden ser conectados en el mismo bus I2C de 2 cables, teniendo cada placa una dirección diferente.
Componentes
A las pantallas LCD1602 y LCD2004 se les puede conectar el módulo I2C, ya que el módulo es compatible con estas dos pantallas y se usa de igual manera, la diferencia es que en el código de inicialización de la pantalla se debe especificar las líneas y columnas de la pantalla a utilizar.
Para este proyecto debemos tener ya soldado o conectado el módulo i2c a la pantalla de cristal líquido.
La siguiente tabla es la distribución de las conexiones entre la pantalla y nuestro Arduino, utilizando Los pines del módulo I2C:
Pin módulo I2C | Pin Arduino |
---|---|
GND | GND |
VCC | +5V |
SDA | A4 |
SCL | A5 |
Código
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { lcd.init(); lcd.backlight(); } void loop() { lcd.setCursor(3,0); lcd.print("Visit Now!"); lcd.setCursor(1,1); lcd.print("www.acortes.co"); delay(400); lcd.clear(); delay(200); }
Explicación del código
Este es el mismo ejemplo del proyecto anterior pero adaptado para el módulo I2C, comenzaremos a revisar el código, primero vamos hacer la declaración de las variables.
#include <Wire.h> #include <LiquidCrystal_I2C.h> //instalar liquidCrystal I2C Frank de Brabander LiquidCrystal_I2C lcd(0x27, 16, 2); //Establece la direccion I2C del LCD 0x27, 16 caracteres y 2 lineas
Lo primero que vemos en esta parte del código es que incluimos la librería Whire.h que es la encargada de realizar la comunicación I2C, luego encontramos que incluimos también la librería LiquidCrystal.h, que es la librería que se va a encargar de controlar nuestro módulo I2C para que maneje el LCD. Esta librería la debemos agregar ya que no es una librería estándar de Arduino, cuando la busquemos instalemos el creado por Frank de Brabander. Por último vemos que declaramos el objeto lcd del tipo LiquidCrystal_I2C, al cual le entregamos la dirección I2C 0x27 (también puede ser 0x3F o si se ha cambiado la dirección como lo muestra la tabla arriba)y le decimos que tiene 16 columnas y 2 filas.
Podemos ver más información de la librería Wire.h aquí y sobre la librería LiquidCrystal.h aquí.
Función setup()
lcd.init(); //Inicializa la pantalla lcd.backlight(); //enciende la luz de fondo
Como hemos visto anteriormente en otros proyectos en el setup ponemos todo lo que debe ser inicializado o ejecutado una sola vez, en nuestro caso encontramos en la primera línea la función init, la cual inicializa la pantalla, luego encontramos la función light que enciende la luz de fondo del display.
Función loop()
lcd.setCursor(3,0); lcd.print("Visit Now!"); lcd.setCursor(1,1); lcd.print("www.acortes.co"); delay(400); lcd.clear(); delay(200);
Comenzaremos revisando el contenido de nuestra función loop, para esto vamos a irlo desglosando un poco, para que sea mas fácil de entender.
lcd.setCursor(3,0); lcd.print("Visit Now!");
En esta primera línea vemos una función sertCursor que recibe dos parámetros setCursor(columna, fila), donde la columna y la fila se comienzan a contar desde 0, entonces vemos en la primera línea de código en el loop se le entregan los valores 3 y 0, por lo que el cursor se ubicará en la 4 columna y la fila 1 de la pantalla para comenzara a escribir desde ahí, en la siguiente línea se aprecia que le ordenamos a imprimir el texto «Visit Now!», por lo que aparecerá en la pantalla en la posición antes mencionada (columna 4 , fila 1).
lcd.setCursor(1,1); lcd.print("www.acortes.co");
Ahora localizamos el cursor en la posición 1,1 es decir en la columna 2 y en la fila 2 y luego imprimimos un texto «www.acortes.co» en la pantalla en la posición mencionada anteriormente.
delay(400); lcd.clear(); delay(200);
Anteriormente vimos que se mostró en pantalla dos líneas de textos, ahora en la siguiere línea encontramos un delay de 400 milisegundos, el cual hace una pausa por ese intervalo de tiempo, luego hay una limpieza de pantalla y finalmente encontramos una delay que hace una pausa de 200 milisegundos antes de volver comenzar de nuevo con el loop.
Resumen
En este proyecto utilizaremos una pantalla de cristal líquido de 16 caracteres por 2 filas para visualizar un texto, el cual se visualizará por 400 milisegundos y desaparecerá por 200 milisegundos, es decir se va a ver de manera intermitente, si miramos es el mismo resultado del proyecto anterior, pero con una ejecución mucho más fácil.