Sie sind auf Seite 1von 11

4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

Pantalla LCD por comunicacin I2C para Arduino


(https://giltesa.com/2014/02/18/pantalla-lcd-por-
comunicacion-i2c-para-arduino)

(https://giltesa.com/wp-content/uploads/2014/02/lcd_i2c.jpg)
18 Feb 2014 (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino) 25
Comentarios (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comments)

Por lo general las pantallas LCD para Arduino suelen necesitar bastantes pines digitales para funcionar, de
6 a 13 segn la pantalla, y eso hace que nuestro Arduino se quede sin pines para conectar otras cosas.

Pero eso tiene fcil solucin, simplemente hace falta usar un modulo que convierta la conexin en paralelo
de la pantalla a conexin en serie mediante alguno de los protocolos de comunicacin que soporta
Arduino.

En cuanto a los mdulos podemos encontrarlos con conexin ISP, Serial e I2C, siendo este ultimo el mas
comn de todos y del que trata esta entrada.

(https://giltesa.com/wp- (https://giltesa.com/wp-

content/uploads/2014/02/LCD-I2C_1.jpg) content/uploads/2014/02/LCD-I2C_2.jpg)

El modulo solo tiene 4 cables que se corresponden a GND, 5V, SDA y SCL. Para conectarlo a la placa
Arduino tendremos que enterarnos dnde estn los pines SDA y SCL del protocolo I2C ya que varia segn
la placa y revisin. Recomiendo consultar esa informacin en los esquemas
(https://giltesa.com/2014/02/17/arduino-esquemas-de-las-placas-y-sus-entradas-y-salidas/)que he
publicado recientemente.

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 1/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

Aparte de lo hablado hasta ahora, tambin es necesario una librera especi ca para el protocolo usado ya
que la que viene de serie con el IDE solo funciona conectando la pantalla directamente.

Hay bastantes disponibles, aunque pocas me han funcionado hasta que encontr la que adjunto a
continuacin, que permite especi car la funcionalidad de cada pin entre el LCD y el modulo.

DESCARGAR LIBRERA LIQUIDCRYSTAL_I2C (HTTPS://GILTESA.COM/WP-CONTENT/UPLOADS/2014/02/LIQUIDCRYSTAL_I2C.ZIP)

Como de costumbre adjunto un par de ejemplos extra aparte de los incluidos con la librera.

El primer ejemplo imprime cuantos segundos lleva encendida la placa, un par de apuntes:

Dentro del setup se imprime la primera linea que contiene el texto Tiempo, se hace dentro del setup
para que se imprima solo una vez ya que ese cdigo solo se ejecuta al arrancar el Arduino.

Luego dentro del loop se imprime en la segunda linea el tiempo que lleva encendida la placa, sin
embargo como el cdigo se ejecuta muchsimas veces por segundo es necesario hacer un control en
la impresin para evitar parpadeos, en este caso solo se imprime la informacin 1 vez por segundo.
Tambin se podra haber puesto un delay(1000) pero eso parara todo el programa y no nos interesa.

2 #include <LCD.h> C
3 #include <LiquidCrystal_I2C.h>
4
5 // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
6 LiquidCrystal_I2C lcd( 0x27, 2, 1,0,4,5,6,7, 3, POSITIVE );
7
8
9 unsigned long tAntes = 0;
10 unsigned long tAhora = 0;
11 unsigned long tEjecucion = 1000;
12
13
14 void setup()
15 {
16 lcd.begin(16,2);
17 lcd.backlight();
18
19 lcd.setCursor(0,0);
20 lcd.print("Tiempo");
21 }
22
23
24 void loop()
25 {
26 tAhora = millis();
27
28 if( tAhora - tAntes >= tEjecucion )
29 {
30 tAntes = tAhora;
31
32 lcd.setCursor(0,1);
33 lcd.print(tAhora/1000);
34 }
35 }

El segundo ejemplo requiere de un modulo de reloj RTC, lo que hace es mostrar por pantalla la hora,
tiempo que lleva encendida la placa, la fecha, y la temperatura leda del reloj.

C
1 #include <Wire.h>
2 #include <gRTC.h>
3 #include <LCD.h>
4 #include <LiquidCrystal_I2C.h>

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 2/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa
5
6 LiquidCrystal_I2C lcd( 0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE );
7 gRTC rtc;
8 Tiempo t;
9
10 unsigned long tAntes = 0;
11 unsigned long tAhora = 0;
12 unsigned long tEjecucion = 1000;
13
14
15 void setup()
16 {
17 lcd.begin(16,2);
18 lcd.backlight();
19 }
20
21
22 void loop()
23 {
24 tAhora = millis();
25 t = rtc.getDatos();
26
27 if( tAhora - tAntes >= tEjecucion )
28 {
29 tAntes = tAhora;
30
31 lcd.clear();
32
33 // LINEA 1:

Y este segundo ejemplo es muy mejorable, porque se utiliza el mtodo clear() para borrar la pantalla y eso
crea un mini parpadeo cada vez que se actualiza la informacin, si esa informacin se actualizara cada
mucho tiempo no importa, pero al actualizarse cada 1 segundo hace que sea bastante molesto.

Ademas hay datos que realmente no es necesario imprimir cada segundo como el contador de minutos
que solo debera de actualizarse cada minuto, la fecha que debera de actualizarse solo una vez al da, o la
temperatura que debera de cambiar solo cuando haya cambiado

Arduino (https://giltesa.com/category/electronica/arduino)

Arduino (https://giltesa.com/tag/arduino)

Entradas relacionadas

(https://giltesa.com/2014/01/28/ (https://giltesa.com/2016/03/31/
estacion-meteorologica-con- 4-curso-iot-con-arduino-y-
arduino-y-wi ) esp8266-wi -modulo-wi -
Estacin Meteorolgica con esp8266-1)
Arduino y WiFi #4 Curso IoT con Arduino y
(https://giltesa.com/2014/01/28/ ESP8266 WiFi: Modulo WiFi
estacion-meteorologica-con- ESP8266 (1)
arduino-y-wi ) (https://giltesa.com/2016/03/31/
4-curso-iot-con-arduino-y-
esp8266-wi -modulo-wi -
esp8266-1)

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 3/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

25 ideas en Pantalla LCD por comunicacin I2C para Arduino

JOSE
19 febrero 2014 a las 8:24 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3001)
Hola!
Tengo el problema que comentas, si el tiempo de actualizacion es muy rapido el parpadeo hace
incomoda la lectura, que se te ocurre para mejorar esto.

Gracias

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3001#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
19 febrero 2014 a las 14:35 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3003)

Hola,

Tienes que actualizar la pantalla solo cuando sea necesario, si te jas en el segundo ejemplo
solo actualiza la pantalla una vez por segundo, para ello obtiene el tiempo que lleva
encendida la placa y lo compara con el tiempo de la ultima actualizacin, dependiendo del
resultado se actualiza o no los datos.

Sin embargo como digo se actualiza toda la pantalla de golpe y el parpadeo, producido por el
mtodo clear(), sigue ejecutndose 1 vez cada segundo.

Si actualizas la pantalla cada 1 minuto ya no sera tan molesto


O si en vez de borrar la pantalla simplemente escribes los datos nuevos sobre los viejos, as
tampoco se producir ese parpadeo.

Tambin puedes probar a crearte una funcin que borre todos los caracteres de la pantalla
sustituyndolos por espacios, quizs as sea mas limpia la actualizacin.

Saludos.

ALEX
4 abril 2014 a las 0:11 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3055)

Giltesa, utilizas alguna web para mostrar el cdigo as?

Saludos.

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3055#RESPOND)

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 4/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

GILTESA (HTTPS://GILTESA.COM/)
4 abril 2014 a las 0:27 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3056)

No, es un plugin para WordPress llamado Crayon Syntax Highlighter, se encarga de leer el
cdigo desde un chero y mostrar su contenido con los colores correspondientes a su
lenguaje de programacin. Tambin permite colorear el cdigo sin necesidad de leerlo de un
chero, es decir, directamente pegado en la entrada, aunque es mejor hacerlo desde chero
porque es imposible que se altere con la edicin de la entrada o las actualizaciones de
WordPress.

ARTURO
26 abril 2014 a las 5:40 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3079)

Hola Giltesa, te invito a que mires este proyecto https://www.youtube.com/watch?


v=a_yyhyfar98 (https://www.youtube.com/watch?v=a_yyhyfar98) y si te gusta entabla una
bonita amistad con Roman. Note una similitud, muy agradable, porque ustedes 2 comparten
los mismos gustos y a mi me gusta. :=D

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3079#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
26 abril 2014 a las 13:00 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3080)

Ese vdeo ya lo haba visto, lo vi cuando busque informacin sobre esa caja.

Saludos.

MARTIN
2 diciembre 2014 a las 2:01 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3245)

Hola, tengo un problema me dice que la variable POSITIVE no esta declara, y no me compila.

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3245#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
2 diciembre 2014 a las 8:21 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3246)

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 5/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

Hola, has aadido las libreras al IDE? Usas una versin actual del IDE? Te debera de
funcionar slo con eso..

IVAN RAMIREZ
14 octubre 2015 a las 21:53 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3582)

para que utilizas la libreria lcd . pues no la encuentro dentro de mi ide

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3582#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
14 octubre 2015 a las 21:55 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3583)

Para poder comunicar el Arduino con la pantalla I2C

SUSO
20 diciembre 2015 a las 0:09 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3668)

Hola Giltesa. Gracias a tu forma de refrescar el LCD, pude solucionar el mo, ya que yo
refrescaba cada segundo con espacios en blanco, no con clear y el parpadeo era evidente y
molesto. Ahora refresco con millis() y lcd.clear() cada 10000 ms y se ha mejorado el pequeo
proyecto.

Gracias y saludos.

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3668#RESPOND)

PEDRO
3 febrero 2016 a las 0:08 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3761)

Lo he probado todo varias versiones de librerias los ejemplos q traen tu codigo y no hay
manera no sale texto es como si no comunicara con la lcd no es capaz de apagar la luz de la
pantalla siquiera todo funciona ok la luz esta encendida salen los cuadritos se regula con el pot
el contraste ya no se q mas provar

Lo estoy haciendo con un Leonardo segun el escaner bus I2C es 0x27 los pin estan conectados
a SDA y SCL de arduino

gracias de antemano

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3761#RESPOND)

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 6/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

GILTESA (HTTPS://GILTESA.COM/)
4 febrero 2016 a las 13:46 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3762)

Dependiendo de tu chip I2C debers de con gurar la librera con unos pines u otros, esta es
la linea que puede variar:

Arduino

1 // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
2 LiquidCrystal_I2C lcd( 0x27, 2, 1,0,4,5,6,7, 3, POSITIVE );

Mira la documentacin de la librera, creo recordar que vienen varias con guraciones de
ejemplo para probar.
Saludos.

ENRIQUE
27 mayo 2016 a las 19:12 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3883)

Hola descarge el programa y sale un codigo error de compilacion .se te ocurre por que ?

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3883#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
27 mayo 2016 a las 19:23 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3884)

Hola,
No habrs aadido la librera que hace falta.
El motivo del error sale en el cuadro de resultado de la compilacin, soluciona lo que te
ponga ah y te funcionar.

Saludos.

EDUARDO
31 mayo 2016 a las 18:49 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3887)

Muy buenas:

Como tantos otros me he metido en esto del Arduino y a ratos me pregunto si sabre salir

Por algn motivo que desconozco no consigo hacer funcionar la libreria del I2C:

Este es el mensaje que me pone

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 7/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

C:\Users\Eduardo\Documents\Arduino\libraries\LiquidCrystal_I2C\I2CIO.cpp:35:26: fatal error:


../Wire/Wire.h: No such le or directory

#include

compilation terminated.

exit status 1

Error compilacin en tarjeta Arduino/Genuino Mega or Mega 2560.
Libreria invalidad encontrada en C:\Users\Eduardo\Documents\Arduino\libraries\docs:
C:\Users\Eduardo\Documents\Arduino\libraries\docs

He probado todo lo que se me ha ocurrido, pero debo ser poco ocurrente.


Puede ser que desistalando el IDE de arduino y volviendolo a instalar se solucionase?

Si pudieras darme luz en esto te lo agradeceria, porque no tengo ni idea de lo que hago mal.

Muchas gracias

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3887#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
31 mayo 2016 a las 19:48 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3888)

Hola Eduardo,

Prueba a mover la librera del directorio donde la tienes ahora al directorio libraries en la
carpeta de instalacin del IDE de Arduino.

Saludos

EDUARDO
1 junio 2016 a las 12:07 pm (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3890)

Muy buenas de nuevo:

Gracias por tu pronta respuesta.

No me dio la solucin pero si animo

Por alguna causa que no comprendo algunas libreras no las cargo bien.

Por n me di cuenta de que cuando cambia el color del nombre de la librera es que lo
reconoce.

Localice una librera que si que funcionaba.

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 8/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

Al volcarlo en el Arduino no hacia nada

Me acorde de que haba ledo algo sobre direcciones I2C

Le pase un programa a mi LCD china y vi que su direccin era 0x3F y no la que yo estaba
usando

Para entonces ya no sabia ni que libreria me chutaba ni nada (mala cabeza)

Ahora ya casi le tengo cogido el tranquillo.



Por cierto que la libreria que uso ahora, al descomprimirse no genera correctamente el
nombre de la carpeta, y no la reconoce el IDE, menos mal que lo ponia en las instrucciones y
las he leido

Muchas gracias y he puesto todo este rollo por si le vale a alguien

JMCN
23 junio 2016 a las 0:56 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3915)

Buenas Noches.

Lo primero agradecerte unos tutoriales que realmente son de gran ayuda. Y despues las
consultas:

1.- He visto que has creado la libreria RTC.h y me sorprende que no la utilizaras en el segundo
ejemplo. Por qu?. Que diferencia tiene con la que usas (gRTC.h).

2.- No conozco bien la libreria LCD. Podrias explicarme que reprentan los parametros de esta
instruccin:
LiquidCrystal_I2C lcd( 0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE );
El primero est claro que es la direccin, pero que son los siguientes?, son siempre los
mismos?. Y POSITIVE a que se re ere?.

3.- La funcin lcd.backlight() permite encender y apagar la iluminacin de fondo del LCD?. y
como se apagara?

Agradezco de antemano tu ayuda.


Un saludo

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3915#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
23 junio 2016 a las 1:20 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3916)

Hola JMCN,

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 9/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa

Hace unos aos la librera se llamaba gRTC porque usaba tambin otras libreras y si hubieran
tenido el mismo nombre dan err en el IDE por no saber cul abrir. Finalmente la deje en RTC
porque ahora la ma es la nica que uso.

De cabeza no recuerdo para qu era cada parmetro pero en conjunto sirven para con gurar
la comunicacin que tiene que tener el chip I2C y la pantalla. En los comentarios del mtodo
dentro de la librera tienes informacin de cada parmetro.

Dentro de la librera tienes informacin sobre qu hace el mtodo. Apaga/enciende la luz, no


puede apagar la pantalla ni regular el contraste.

Saludos

MAJUVIR
25 junio 2016 a las 9:04 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-arduino#comment-
3919)

Hola buenas, hay alguna forma de apagar la retroiluminacin con un botn, no encuentro la
manera. Saludos.

RESPONDER (HTTPS://GILTESA.COM/2014/02/18/PANTALLA-LCD-POR-COMUNICACION-I2C-PARA-ARDUINO?REPLYTOCOM=3919#RESPOND)

GILTESA (HTTPS://GILTESA.COM/)
25 junio 2016 a las 10:04 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3920)

Hola,

Puedes instalar un pulsador y programar un tu cdigo que al pulsarlo se encienda o apague la


retroalimentacin.

Saludos.

MAJUVIR
25 junio 2016 a las 11:24 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3921)

Me podras orientar como sera el codigo saludos y gracias.

GILTESA (HTTPS://GILTESA.COM/)
25 junio 2016 a las 11:30 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3922)

La librera tiene un mtodo que permite encender o apagar la iluminacin:

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 10/11
4/7/2016 PantallaLCDporcomunicacinI2CparaArduinoelblogdegiltesa
Arduino
1 /*!
2 @function
3 @abstract Switch-on/off the LCD backlight.
4 @discussion Switch-on/off the LCD backlight.
5 The setBacklightPin has to be called before setting the backlight for
6 this method to work. @see setBacklightPin.
7
8 @paramvalue: backlight mode (HIGH|LOW)
9 */
10 void setBacklight ( uint8_t value );

MAJUVIR
25 junio 2016 a las 11:32 am (https://giltesa.com/2014/02/18/pantalla-lcd-por-comunicacion-i2c-para-
arduino#comment-3923)

Ok. Gracias.

ESCRIBA AQU SU COMENTARIO

Introduceaqutucomentario...

(http://creativecommons.org/licenses/by-nc-sa/3.0/deed.es_ES)
el blog de giltesa por giltesa (https://giltesa.com/sobre-mi/) se encuentra bajo una Licencia Creative Commons
(http://creativecommons.org/licenses/by-nc-sa/3.0/es)
giltesa (https://giltesa.com) @ 2007 - 2016 - Powered by WordPress (http://es.wordpress.org/)

https://giltesa.com/2014/02/18/pantallalcdporcomunicacioni2cparaarduino 11/11