Tutorial Arduino - Conectar LCD 16x2 por protocolo I2C

Tutorial Arduino - Conectar LCD 16x2 por protocolo I2C

ar5I²C (también lo verás escrito como I2C) es un bus de comunicaciones en serie que utiliza dos líneas para transmitir la información: una para los datos y por otra la señal de reloj. Como suelen comunicarse circuitos en una misma placa que comparten una misma masa, esta tercera línea no suele ser necesaria. En la mayoría de las placas Arduino, SDA (línea de datos) está en el pin analógico 4, y SCL (línea de reloj) está en el pin analógico 5. En Arduino Mega, SDA está en el pin digital 20 y SCL en el 21. Con el protocolo I2C podemos ampliar nuestro numero de entradas digitales e incluso comunicar varios arduinos entre sí. Usando nuestro LCD por I2C también ahorraremos muchos pines.

Arduino tiene de serie una librería para la comunicación sobre este protocolo. Esta es la librería Wire.h .

Para este tutorial, utilizaremos un LCD 16x2, aunque se podría hacer casi igual con un 16x4, y una placa para la conexión de este por I2C. Aunque esta placa la podríamos hacer nosotros, actualmente las venden hechas y a un precio muy competente, así que nos facilita mucho las cosas adquirir una en vez de hacerla.

Yo compré exactamente esta, LCDtoI2C. Muy cómoda porque viene también con el potenciómetro para regular el contraste. Es el modelo diseñado por MJKDZ, el cual tiene sus características propias, muy a tener en cuenta si conseguís otra placa que sea diferente.

 

Será necesario también añadir una nueva librería para la comunicación del LCD por el protocolo. Para descargar la librería, sigue el siguiente enlace: librería i2cLCD.

El esquema de conexión es muy fácil. Simplemente conectando los pines de la placa a los pines correspondientes del LCD, el SDA al pin A4 del arduino UNO (pin 20 Mega), el SCL al pin A5 arduino UNO (21 Mega), la masa y el power.

[caption id="attachment_5627" align="aligncenter" width="722"]la foto Conexionado. Perdón por la calidad de la foto.[/caption]

Lo siguiente a hacer es hacer una pequeña prueba de "hola mundo" con algún detallito más y ver que realmente funciona, ahí va el código:

/*Prueba de LCD por protocolo I2C 
Mostraremos un mensaje y lo borraremos continuamente haciendo parpadear el backlight*/
// Importamos las librerias necesarias 
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library

/*-----( Declare Constants )-----*/
#define I2C_ADDR    0x20  // Direccion I2C para PCF8574A que es el que lleva nuestra placa diseñada por MJKDZ
//definimos las constantes para esta placa

#define  LED_OFF  0
#define  LED_ON  1

//mjkdz i2c LCD board
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(I2C_ADDR, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE);

void setup()  
{
  lcd.begin (16,2);  // inicializar lcd 
// Activamos la retroiluminacion
  lcd.setBacklight(LED_ON);
}

void loop()
{

// Reset the display  
  lcd.clear();
  lcd.setBacklight(LED_OFF);//Backlight OFF 
  delay(500); 

  lcd.backlight(); //Backlight ON 
  lcd.setCursor(0,0);
  lcd.print("Hola Geekytheory"); 
  lcd.setCursor(0,1);
  lcd.print("LCD por I2C"); 
  delay(2000); 
}
Espero que os haya gustado y no tengáis ningún problema. ¡Saludos!

Deja un comentario


18 comentarios


Javier · Hace 2 horas

Tendré que coger un Arduino Uno, por que tengo leonardo y aunque utilizo los pines adecuados a la hora de meter las librerías no me funciona. Leo por aquí algunos usuarios preguntando que donde las pueden descargar las librerias. Igual es por eso mi error. Por que yo copio y pego . la librería e. no es la de esta pagina? justo encima de donde estoy escribiendo?

Luis · Hace 11 días

muy buen trabajo...pero por favor podrías indicar de como descargar la librería LCD.h gracias de ante mano

CARLOS SANCHEZ · Hace 4 meses

saludos te comento no soy experto en esto pero la librería de LCD.h donde la puedo descargar por que me marca un error de que no la tengo pero si la esta reconociendo pues la cambia de color rojo en el programa arduino; compila todo bien pero no encuentra la librería quisiera que alguien me pudiera ayudar se lo agradesco

SANTIAGO GOMEZ · Hace 3 meses

tengo el mismo problema con LCD.h ¿Cómo lo has resuelto?

Jhan Bozzo · Hace 10 meses

hola me da ese error pruea_dht:26: error: 'I2C_ADDR' was not declared in this scope LiquidCrystal_I2C lcd(I2C_ADDR, 4, 5, 6, 0, 1, 2, 3, 7, NEGATIVE); ^ exit status 1 'I2C_ADDR' was not declared in this scope

JuanMa Sevilla · Hace 1 año

buenas, como puedo hacer para conectarlo en otros pines analogicos? porque los pines A4 y A5 los tengo ocupados con un sensor

Zarco Tepoca · Hace 1 año

Hola amigo tengo una duda, esas librerias funcionan solo para ese modulo i2c? podria funcionar tambien con este?http://mlm-s1-p.mlstatic.com/modulo-interfaz-i2c-para-lcd-16x2-arduino-pic-raspberry-184001-MLM20257103853_032015-O.jpg

dan · Hace 1 año

eso es ya un I2c solo que sera otro modelo

Jose · Hace 2 años

En mi Arduino Leonardo no funciona

cross · Hace 2 años

Ayuda en la linea 17 me dice: NEGATIVE was not declared in this scope

Nikolas Martin Nextart · Hace 2 años

descarga la vercion 2.1

Jose Rodriguez · Hace 1 año

donde se descarga la libreria " LCD.h " ??? la otra ya la tengo pero esta no hay caso de encontrarla ni usar otra sin q aparezca el error del NEGATIVE no declarado..

Daniel Rebollo · Hace 3 años

Hola, estoy dando a conocer mi LCDBPV2. Es un LCD tactil de 3.2" 320x240 y 16 bits de color y mucho mas barato que cualquier solucion similar. Ademas todo lo parecido es inferior en prestaciones y velocidad gracias a que he optimizado el funcionamiento a nivel hardware y software. Aqui se puede ver en funcionamiento con las librerias que acabo de terminar: http://youtu.be/69TIaPOkcns y aqui hay mas informacion: http://danirebollo.es/index.php/blog/item/23-lcd-boosterpack-v2 Un saludo.

jeferson · Hace 3 años

donde consigo las librerías??

Alca · Hace 3 años

https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads

wero · Hace 3 años

Buenas tardes donde podria conseguir un I2C?

Alca · Hace 3 años

I2C es un protocolo. Si lo que necesitas un módulo de estos en internet hay infinidad de ellos. De hecho en el post en el cuarto párrafo hay un link para comprar uno de ellos.

Antonio_M-S · Hace 3 años

Bravo por los 2 capitulos de Arduino por Bluetooth. Espero con impaciencia el tercero.

Alca · Hace 3 años

Tengo que comentar que tuve un problema con las vueltas del potenciometro que no mostraba nada y resulta que tuve que darle bastantes hasta empezar a mostrar los caracteres

tino soto · Hace 3 años

Ejemplo_LCD_I2C:25: error: 'LiquidCrystal_I2C' does not name a type Ejemplo_LCD_I2C.ino: In function 'void setup()': Ejemplo_LCD_I2C:29: error: 'lcd' was not declared in this scope Ejemplo_LCD_I2C.ino: In function 'void displayKeyCodes()': Ejemplo_LCD_I2C:60: error: 'lcd' was not declared in this scope Eso me sale y no se que hacer eh intentado mucho me podrias ayudar

Alca · Hace 3 años

Todo apunta a que la libreria no la tienes bien instalada o algo. Compruébalo bien.

Tino · Hace 3 años

Amigo me puedes ayudar ya eh batallado mucho no se que hacer :S, me salen estos errores Ejemplo_LCD_I2C:25: error: 'LiquidCrystal_I2C' does not name a type Ejemplo_LCD_I2C.ino: In function 'void setup()': Ejemplo_LCD_I2C:29: error: 'lcd' was not declared in this scope Ejemplo_LCD_I2C.ino: In function 'void displayKeyCodes()': Ejemplo_LCD_I2C:60: error: 'lcd' was not declared in this scope

Creatore_hmc · Hace 3 años

Hola Dknalca, muy bueno tu tutorial, estoy desarrollando un proyecto con una placa arduino uno a la que quiero conectarle una pantalla de lcd de 20x4 con una placa de i2c mjkdz, hasta ahi no tengo problema, pero quiero a traves de la misma placa controlar un motor de 12 voltios y un ventilador de 5x5 cm, con un puente h, una placa driver que encontre, encontre el problema que tanto la pantalla de lcd como el driver de los motores necesita el pin de 5v y en la placa ardunio solo hay un pin de 5v y otro de 3.3v, hay forma de conectar ambas placas al arduino y convertir algun pin a salida de 5v? O que se podria utilizar para solucionar esto? Agradezco tu ayuda. Saludos

Alca · Hace 3 años

De un pin puedes sacar los cables que quieras. De todas formas venden unas shields para arduino donde expanden los puertos de power y I/O, pero para lo que quieres hacer no es necesario.

Creatore_hmc · Hace 3 años

Buenisimo, es decir que puedo conectar ambas cosas al pin de 5v y no quemaria la placa? Voy a intentar y te comento como sale, gracias alca!

Creatore_hmc · Hace 3 años

El driver que uso para los motores es un L298n, quedo atento a tus comentarios, saludos

javier · Hace 3 años

dknalca gracias por ayudarme, pero como se a que direccion se refiere??? desde ya muchas gracias

dknalca · Hace 3 años

dependera como este conectado el chip, normalmente tienen 3 patillas llamadas a2, a1 y a0, según como estén conectadas es una dirección. Las tres a masa es 0x20, la a0 a +v y las otras a masa 0x21. Mira la conexión de la placa y busca el data sip del chipset y adivina que dirección tiene establecida

javier · Hace 3 años

hola, tengo el display ywrobot lcm1602 IIc v1. y no logro que ande... ya cargue mil programas de internet. tengo el sda y el scl conectados en los pines 20 y 21 del arduino mega 2560. alguien me podria dar una mano???? desde ya muchas gracias.

dknalca · Hace 3 años

Tienes que mirar a que dirección referirte para comunicarte con el lcd, cambia según el chip que adapta tu LCD al protocolo i2c buscando un poco por google. http://tallerarduino.com/2013/06/23/lcd-i2c-y-arduino/