La pantalla LCD de 16×2 basada en el controlador HD44780 es un periférico muy común, que se utiliza en proyectos con arduino y microcontroladores en general, sin embargo es bien sabido por todo aquel entusiasta que ha incluido una en sus proyectos, que este tipo de pantalla requiere muchos pines del microcontrolador para ser controlada, debido principalmente a que utiliza un bus paralelo para comunicarse. Afortunadamente existe una solución muy fácil y económica para este problema: un adaptador basado en el PCF8574 que permite conectar la pantalla al arduino usando solamente dos lineas digitales a través del bus I2C. Dichos pines, pueden además ser compartidos por otros periféricos como el RTC o memorias EEPROM. En esta entrada te explicamos como utilizar una pantalla LCD 16×2 por I2C con Arduino de manera que puedas aprovechar mejor tus pines de I/O.

Materiales Necesarios

Los materiales para esta experiencia pueden encontrarse en nuestra tienda virtual, hace falta un poco de soldadura para poner a punto la pantalla con el adaptador I2C:

Preparación de la pantalla con el adaptador I2C

Para usar nuestra pantalla LCD de 16×2 a través del bus I2C el primer paso es soldar el adaptador I2C en la parte de trasera de la pantalla. Al finalizar la soldadura, nuestro adaptador debe verse de la siguiente manera:

LCD 16x2 por I2C con Arduino: Soldadura del adaptador serial

Como se aprecia el adaptador para LCD 16×2 por I2C con Arduino nos permite ahorrar bastante tiempo en las conexiones, pues ya incluye el potenciómetro para regular el contraste de la pantalla. También incluye todo lo necesario para el funcionamiento del backlight (retro-iluminación), pudiendo incluso controlar esta a través de software (al menos en nuestro adaptador, esto es posible). Si no queremos soldar el adaptador a la pantalla, podemos utilizar un protoboard para realizar la conexión entre ambas piezas.

Diagrama para conectar el LCD 16×2 por I2C

Una vez que tenemos soldado el adaptador I2C, hay que identificar los pines de I2C en la tarjeta arduino que estemos usando. En el arduino UNO, los pines del bus I2C corresponden con los analógicos A4 y A5. También los encontramos duplicados en la parte superior, cerca del conector USB y se etiquetan como SDA y SCL (por la parte de abajo del PCB). Para realizar las conexiones con el Arduino te recomendamos revisar los mapas de pines en este post y tener la versión impresa siempre a la mano.

Las conexiones se realizan de la siguiente forma con el arduino, como podemos ver estamos usando los pines analógicos A4 y A5, aunque también se puede conectar a SDA y SCL cerca del conector USB:

LCD 16x2 por I2C con Arduino: Diagrama de conexión

Librería para LCD 16×2 por I2C con Arduino

Para usar el LCD 16×2 por I2C con Arduino es necesario también agregar una librería a nuestro IDE, de forma que este sepa como comunicarse con el  chip PCF8574. Ya explicamos en alguna ocasión como cargar una librería y comenzar a utilizarla, si tienes dudas te recomendamos revisar el tutorial. Cabe aclarar que esta librería, así como el adaptador I2C deben funcionar de forma correcta con las pantallas de 20×4.

Puedes descargar la librería desde la página oficial en Bitbucket (repo) o desde nuestro servidor. A continuación dejamos los enlaces para cada una de las opciones.

La librería LiquidCrystal_I2C dispone de métodos similares (algunos idénticos) a los de la librería oficial.

  • LiquidCrystal_I2C() – Constructor de la clase, configura el hardware.
  • init() – Prepara el LCD para su uso.
  • clear() – Borra todos los caracteres de la pantalla LCD.
  • setCursor(col, row) – Permite mover el cursor a la posición indicada en sus parámetros.
  • print() – Imprime una variable o literal en la pantalla
  • scrollDisplayLeft() y scrollDisplayRight() – Recorre el contenido de la pantalla a la izquierda o a la derecha
  • backlight() y noBacklight() – Métodos para encender / apagar la iluminación de fondo
  • createChar(num, data) –  Crear un carácter definido por el usuario en la memoria del controlador de pantalla

Recomendamos revisar el siguiente enlace para conocer todos los métodos de los que dispone la librería oficial LiquidCrystal:

Ejemplo básico para controlar LCD 16×2 por I2C con Arduino

El siguiente programa es un ejemplo básico para comenzar a utilizar nuestra pantalla y probar que las conexiones se encuentran correctas. Al cargarlo debemos ver letras en pantalla y además una animación del texto moviéndose en la pantalla. Hemos comentado lo más posible el código de manera que sea fácil de entender.

Si no se visualiza nada en la pantalla cuando se carga este programa, recomendamos mover el potenciómetro del contraste y/o revisar las conexiones del bus I2C. En el peor de los casos, si el adaptador I2C del que disponemos no es igual al de las fotos, puede ser necesario cambiar los parámetros al constructor de LiquidCrystal_12C

Mostrar valores de sensores en LCD 16×2 por I2C con Arduino

La librería LiquidCrystal_I2C dispone de métodos idénticos a la librería oficial de arduino, de forma que podamos migrar los programas fácilmente, incluidos aquellos en los que se utilizan las funciones de impresión directo en la pantalla. En el siguiente ejemplo, veremos como mostrar el contenido de variables enteras o de tipo flotante.

Mostrar caracteres personalizados en LCD 16×2 por I2C

Las pantallas LCD 16×2 permiten definir hasta 8 caracteres personalizados, la librería LiquidCrystal_I2C provee las facilidades para realizar esta tarea de manera muy sencilla. Cada carácter se define como un grupo de 8 bytes que se envían a la memoria CGRAM. Por ejemplo, podemos crear un icono con una carita feliz de la siguiente forma:

Y traducido a código en C, quedaría de la siguiente forma:

Podemos ponernos bastante creativos con esta funcionalidad del LCD y podemos obtener resultados bastante llamativos como se puede ver en la siguiente imagen:

El siguiente programa nos muestra como dar de alta caracteres personalizados en un LCD 16×2 por I2C con Arduino

 

Únicamente se aceptan pagos en la cuenta de Santander. Descartar