Você está na página 1de 20

16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

Contacte con nosotros Iniciar sesin

Buscar

0
S/. 0,00

CATEGORAS
All Blog News Tutorial LCD con I2C, controla un LCD con solo dos pines

ARTCULOS POPULARES

Tutorial trasmisor de celda de carga HX711, Balanza Digital ago 23, 2015

Con guracin del mdulo bluetooth HC-05 usando comandos AT ago 08, 2015

Tutorial Mdulo GPS con Arduino jun 25, 2015

ARTCULOS RECIENTES

Usando ESP8266 con el IDE de Arduino oct 21, 2016

Tutorial Sensor de Distancia SHARP sep 28, 2016

Arduino y ESP8266 como cliente web ago 24, 2016

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 1/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

PROMOCIONES ESPECIALES
Shield Geeetech GSM/GPRS
La manera ms sencilla y rpida de...

S/. 160,00 S/. 170,00

Todas los promociones especiales

ETIQUETAS

sensor robot cnc Servo infrarrojo LED LCD driver Fuente cable

NOVEDADES
Piezo Buzzer activo 12mm
Agrega alertas o efectos de sonido a tus proyectos

S/. 1,00

Piezo Buzzer activo 22mm


Agrega alertas o efectos de sonido a tus proyectos

S/. 7,00

Shield Display LCD TFT 3.5"


Pantalla de 3.5", colores vvidos, incluye lector de tarjetas microSD.

S/. 70,00

Mdulo expansor IO PCF8574


El PCF8574 es un expansor de E/S compatible con la mayora de...

S/. 12,00

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 2/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines
Sensor de presin BMP280
Sensor de presin baromtrica BMP280 de alta precisin y de bajo consumo...

S/. 15,00

Sensor de Presin, Temperatura y Humedad BME280


Sensor de monitoreo ambiental ideal para aplicaciones de Drones e...

S/. 28,00

Mdulo GY-91 MPU9250 + BMP280 : Acelermetro, Giroscopio, Magnetmetro, Altmetro I2C


Sensor ultra compacto de 10 grados de libertad (DoF)

S/. 50,00

Shield Relay v2
La manera ms sencilla y rpida de controlar cargas de alta corriente...

S/. 45,00

Todas los nuevos productos

Tutorial LCD con I2C, controla un LCD con solo dos


pines
Posted by Tutoriales 25 Comments

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 3/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

En este tutorial usaremos un mdulo adaptador de LCD a I2C para poder controlar nuestro
LCD con solo dos pines de nuestro Arduino

Este tutorial es similar a este otro (Tutorial LCD, conectando tu arduino a un LCD1602 y LCD2004)
con la diferencia que usamos un mdulo adaptador LCD a I2C, pero trabajaremos los
mismo ejercicios y as ver que el modulo es fcil de usar como si trabajramos
directamente con el LCD.
EL Mdulo adaptador LCD a I2C que usaremos est basado en el controlador I2C
PCF8574, el cual es un expanzor de entrada y salidas digitales controlado por I2C, que en
este mdulo se usa para controlar un LCD.
La direccin del mdulo I2C que viene por defeco es 0x27, pero podemos cambiarlo
soldando los puentes A0,A1y A2; quedando la direccin en binario de la siguiente forma
:0|0|1|0|0|A2|A1|A0. Por defecto A0,A2,A1 valen 1 pero si soldamos los puentes, estos se
conectan a tierra teniendo un valor 0, por ejemplo si soldamos los tres puentes la direccin
seria 0|0|1|0|0|0|0|0 (0x20).
*Tambin existen mdulos con direccin por defecto 0x3F cuyos bits de configuracin son
0|0|1|1|1|A2|A1|A0

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 4/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

Para controlar el contraste solo necesitamos variar el potencimetro que se encuentra en


el mdulo.
La luz de fondo se controla por software, desde el Arduino; pero el modulo tiene un
Jumper para desconectar el Led de la luz de fondo.

Conexiones entre Arduino y Mdulo adaptador LCD a I2C


El adaptador LCD a i2C tiene los pines ordenados para solo conectar al LCD, esto lo
podemos hacer a travs de un protoboard o soldando directamente al LCD

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 5/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

Para conectar con el Arduino solo utilizamos los pines I2C del Arduino y alimentacin

Adaptador LCD a Arduino Uno, Nano, Arduino Mega , Arduino


I2C Mini. DUE Leonardo

GND GND GND GND

VCC 5V 5V 5V

SDA A4 20 2

SCL A5 21 3

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 6/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

* Las conexiones para el LCD de 20 x 4 son las mismas.

Librera LiquidCrystal_I2C para Arduino


Existen diferentes tipos y versiones de la librera para LCD I2C, informacin ms completa
pueden encontrar en: http://playground.arduino.cc/Code/LCDi2c , nosotros usaremos la librera
LiquidCrystal_I2C
Las funciones que utiliza esta librera son similares a la librera LiquidCrystal de Arduino,
pero volveremos a explicaremos las funciones principales.

LiquidCrystal_I2C(lcd_Addr, lcd_cols, lcd_rows)


Funcin constructor, crea una variable de la clase LiquidCrystal_I2C, con direccin,
columnas y filas indicadas.

init()
Inicializa el modulo adaptador LCD a I2C, esta funcin internamente configura e
inicializa el I2C y el LCD.

clear()
Borra la pantalla LCD y posiciona el cursor en la esquina superior izquierda (posicin
(0,0)).

setCursor(col, row)
Posiciona el cursor del LCD en la posicin indicada por col y row(x,y); es decir,
establecer la ubicacin en la que se mostrar posteriormente texto escrito para la
pantalla LCD.

print()
http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 7/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

print()
Escribe un texto o mensaje en el LCD, su uso es similar a un Serial.print

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

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

backlight();
Enciende la Luz del Fondo del LCD

noBacklight();
Apaga la Luz del Fondo del LCD

createChar (num, datos)


Crea un carcter personalizado para su uso en la pantalla LCD. Se admiten hasta
ocho caracteres de 5x8 pxeles (numeradas del 0 al 7). Dnde: num es el nmero de
carcter y datos es una matriz que contienen los pixeles del carcter. Se ver un
ejemplo de esto ms adelante.
Explicado la librera veamos unos ejemplos:

1. Un Hola mundo con Arduino y LCD


Mostraremos texto y un valor numrico en el LCD, para esto cargamos el siguiente
sketch:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd direccin 0x27 y 16 columnas x 2 filas


LiquidCrystal_I2C lcd(0x27,16,2); //

void setup() {
// Inicializar el LCD
lcd.init();

//Encender la luz de fondo.


lcd.backlight();

// Escribimos el Mensaje en el LCD.


lcd.print("Hola Mundo");
}

void loop() {
// Ubicamos el cursor en la primera posicin(columna:0) de la segunda lnea(fila:1)
lcd.setCursor(0, 1);

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 8/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

// Escribimos el nmero de segundos trascurridos


lcd.print(millis()/1000);
lcd.print(" Segundos");
delay(100);
}

Despus de cargar, en su LCD deben obtener el siguiente resultado

La programacin es similar para un LCD de 20x4, solo hay que modificar en:
LiquidCrystal_I2C lcd(0x27,20,4);

2. Desplazando el texto en el LCD


En este ejemplo para desplazar el texto usaremos la funcin scrollDisplayLeft(). El codigo
es el siguiente:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd direccin 0x27 y 16 columnas x 2 filas


LiquidCrystal_I2C lcd(0x27,16,2); //

void setup() {
// Inicializar el LCD

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 9/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

lcd.init();

//Encender la luz de fondo.


lcd.backlight();

// Escribimos el Mensaje en el LCD en una posicin central.


lcd.setCursor(10, 0);
lcd.print("WWW.NAYLAMPMECHATRONICS.COM");
lcd.setCursor(4, 1);
lcd.print("Tutorial LCD, Test de desplazamiento ");
}

void loop() {
//desplazamos una posicin a la izquierda
lcd.scrollDisplayLeft();
delay(500);
}

EL resultado sera el texto desplazandose de derecha a izquierda.

3. Mostrando datos de sensores o variables en el LCD


En este ejemplo mostramos en el LCD variables, que pueden representar valores de
sensores u otros datos. Para simular los sensores usaremos potencimetros
conectados a los puertos analgicos.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 10/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

//Crear el objeto lcd direccin 0x27 y 16 columnas x 2 filas


LiquidCrystal_I2C lcd(0x27,16,2); //

void setup() {
// Inicializar el LCD
lcd.init();

//Encender la luz de fondo.


lcd.backlight();

void loop() {
int sen1=analogRead(A0);
float sen2=analogRead(A1)*(5.0 / 1023.0);
float sen3=analogRead(A2)*(100.0 / 1023.0);
int tiempo=millis()/1000;
// Cursor en la primera posicin de la primera fila
lcd.setCursor(0,0);
lcd.print("ADC:");
lcd.print(sen1);
lcd.print(" ");
// Cursor en la 11 posicin de la primera fila
lcd.setCursor(10,0);
lcd.print("V:");
lcd.print(sen2,1);//1 decimal
lcd.print("V ");
// Cursor en la primera posicin de la 2 fila
lcd.setCursor(0,1);
lcd.print("T:");
lcd.print(sen3,1); //1 decimal
lcd.print("337C "); // "337" -> ""
// Cursor en la 11 posicin de la 2 fila
lcd.setCursor(10,1);
lcd.print("t:");
lcd.print(tiempo);
lcd.print(" s ");

delay(200);

Su resultado debe ser el siguiente.

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 11/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

4. Agregando nuevos caracteres a nuestro LCD


Explicaremos nuevamente como esta caracterstica en caso no hayan revisado el tutorial
anterior.
En algunos casos el LCD no tiene los caracteres que deseamos, o necesitamos dibujar
caracteres personalizados, en este caso usamos la funcin createChar () pero antes
expliquemos como est constituido un carcter:
Un carcter est formado por 5x8 pixeles los cuales se representan por 8 bytes, uno para
cada fila, los 5 bits menos significativos representan los pixeles del carcter

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 12/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

Como mximo podemos crear 8 caracteres nuevos.


Para este ejemplo crearemos los siguientes caracteres:

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 13/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

A continuacin se muestra el cdigo para implementar los nuevos caracteres.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>

//Crear el objeto lcd direccin 0x27 y 16 columnas x 2 filas


LiquidCrystal_I2C lcd(0x27,16,2); //
byte N[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B00000,
};
byte A[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B11111,
B10001,
B00000,
};
byte Y[8] = {
B10001,

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 14/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

B10001,
B10001,
B10001,
B11111,
B00100,
B00100,
B00000,
};
byte L[8] = {
B10000,
B10000,
B10000,
B10000,
B10000,
B10000,
B11111,
B00000,
};
byte M[8] = {
B11111,
B10101,
B10101,
B10101,
B10101,
B10101,
B10101,
B00000,
};
byte P[8] = {
B11111,
B10001,
B10001,
B10001,
B11111,
B10000,
B10000,
B00000,
};
byte cara[8] = {
B00000,
B10001,
B00000,
B00000,
B10001,
B01110,
B00000,
};
byte cuerpo[8] = {
B01110,
B01110,
B00100,
B11111,
B00100,
B01010,
B10001,
B00000,
};

void setup() {
// Inicializar el LCD
lcd.init();

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 15/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

//Encender la luz de fondo.


lcd.backlight();

//creamos los nuevos caracteres


lcd.createChar (0,N);
lcd.createChar (1,A);
lcd.createChar (2,Y);
lcd.createChar (3,L);
lcd.createChar (4,M);
lcd.createChar (5,P);
lcd.createChar (6,cara);
lcd.createChar (7,cuerpo);
// Escribimos el texto en el LCD
lcd.setCursor(0, 0);
lcd.print("Tutorial LCD_I2C");
lcd.setCursor(0, 1);
lcd.write (byte (7));
lcd.print(" ");
lcd.write (byte (6));
lcd.print(" ");
lcd.write (byte (0));
lcd.write (byte (1));
lcd.write (byte (2));
lcd.write (byte (3));
lcd.write (byte (1));
lcd.write (byte (4));
lcd.write (byte (5));
lcd.print(" ");
lcd.write (byte (6));
lcd.print(" ");
lcd.write (byte (7));

void loop () {}

El resultado del ejemplo anterior es el siguiente:

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 16/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

Los ejemplos anteriores se trabajan similar con un LCD2004

Pueden adquirir los materiales usados en este tutorial en


nuestra tienda
-Arduino Uno R3
-Mdulo adaptador LCD a I2C
-LCD1602 Azul Backlight
-LCD2004 Azul Backlight


Tutoriales Relacionados
-Tutorial LCD, conectando tu arduino a un LCD1602 y LCD2004
-Tutorial pantalla TFT tctil con Arduino

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 17/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

Tags: LCD Display

12 ? ? 0 ? Compartir

25 Comments

Matias
jul 18, 2016

Hola que tal? Saludos desde Argentina. Primero que nada muchisimas gracias por la creacion de
este contenido. A mi parecer, el mejor blog de habla hispana de Arduino entre todos los que
conozco por su gran diseo web en el buscador de contenido y la facil y detallada explicacion!
Envio este mensaje ademas, porque resulta que la libreria que descargu en este tutorial,
solamente me imprimia en el display la columna 0. Reemplace la libreria por la del link a
continuacion https://codeload.github.com/marcoschwartz/LiquidCrystal_I2C/zip/master y sin
cambiar absolutamente NADA me anduvo perfectamente. Saludos y segui asi!!

Reply

Naylamp
jul 20, 2016

Hola Matias, gracias por el comentario, estaremos revisando la librera del tutorial.
Seguiremos desarrollando nuevos tutoriales, saludos desde Per.

Reply

emerson
ago 31, 2016

Hola amigo, me esta pasando exactamente lo mismo, pero descargue la libreria que
pusiste y me sigue pasando lo mismo solo me imprime la primera letra. tendras
alguna otra solucion porsiacaso ?

Reply

ivan
may 11, 2017

Consigue una version de ide menor a la actual a mi con la 1.5.7 me


funciona

Reply

pedro
ago 5, 2016

Hola Naylamp:Tengo un arduino mega y unaLCD con I2C, he comiado tu codigo y me funciona
pero solo me sale en la pantalla la primera letra del texto la W en la primera fila y la T de la
segunda fila.En que estoy equivocandome?,que es lo que me falta?. Soy nuevo en esto de

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 18/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

arduino y mis conocimientos son pocos por ahora hasta que vaya aprendiendo.Que con tutoriales
como el tuyo los que estamos metiendonos en este mundo de arduino nos hace mucho bien y nos
ayuda un monton. GRACIAS Y UN SALUDO, Pedro lopez

Reply

Naylamp
ago 12, 2016

Hola pedro, cul de los programas es el que te est fallando, o en todos los
ejemplos del tutorial tienes el mismo error? , si estas usando un lcd diferente al LCD
de 16x2 tienes que modificar dichas dimensiones en el cdigo. Si el error te sale en
todos los ejemplos tambin puede ser que est fallando la librara, prueba con la
librera del comentario de Matas (cometario anterior)

Reply

Rafa_RGB
jul 2, 2017

Hola Pedro,Me llegaron hace unos das las backplates y displays 20x4 de China. He
estado varios das igual que t, con slo el primer caracter en cada lnea...La
direccin de las "mochilas" en mi caso es0x3F, as que OJO y usad I2CScan para
buscar en cada caso, no sea que tambin sufris con esto.( Como hice yo.... 8( )La
solucin al trexto ha sido DESCARGAR el zip que referenciaba Matas y ha
empezado a funcionar todo como una reloj suizo.NOTA: Siento el "reflote".

Reply

napoleon
ago 27, 2016

Hola, espectacular post!, gracias por la info! pregunta, tengo una Elego UNO R3 + Display Qpass
LCD 2x16 con I2c, sobre Arduino 1.6.9 solo aparecen la primera letra de cada palabra, he
descargado ciento de libreras y no he resuelto el asunto

Reply

Naylamp
ago 31, 2016

Estimado Napolen, Ese error puede ser por la librera, intenta con la librera que
recomienda Matias en el primer comentario, si no solucionas, prueba con otra
versin del IDE de Arduino para descartar que sea tu compilador

Reply

Reinaldo
nov 1, 2016

hola,Al cargar el primer programa, me aparece este errorClass LiquidCrystal_I2C has no member
named `init`ayudenme porfa.gracias

Reply

Naylamp
http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 19/20
16/7/2017 Tutorial LCD con I2C, controla un LCD con solo dos pines

nov 5, 2016

Hola Reinaldo, es un problema de librara, asegrate de haber importado


correctamente tu librera o intenta instalar nuevamente la librera.

Reply

Uriel
ene 6, 2017

Buenas noches compaeros, les comento que adquir este modulo y la pantalla LCD pero no me
funciona, ya cargue ambas libreras y me sigue sin funcionar, si me pudieran ayudar se los
agradecera.

Reply

Naylamp
ene 7, 2017

Hola Uriel, tienes errores al compilar? Te carga algunos caracteres en el LCD? Si tu


LCD no muestra actividad puedes ser porque no est recibiendo datos del arduino,
comprueba tu conexin y comprueba la direccin I2C, por lo general es 0x27 y
configurable de 0x20 a 0x27, pero tambin hemos encontrado mdulos que trabajan
con direccin 0x3F.

Reply

Naylamp
feb 3, 2017

Para descartar problemas de comunicacin Arduino-MduloLCD, Pueden probar un Scanner I2C,


EL scanner debe encontrar al mdulo y su direccin correspondiente:
http://playground.arduino.cc/Main/I2cScanner

Reply

Jesly
mar 15, 2017

Porque el init no se me pinta de color anaranjado; a que se debe ???

Reply

Naylamp
mar 26, 2017

Hola Jesly, puede ser por la versin del arduino que tienes o tambin porque recin
has instalado la librera, intenta con cerrar y abrir el IDE de arduino.

Reply

juan
abr 3, 2017

http://www.naylampmechatronics.com/blog/35_Tutorial--LCD-con-I2C-controla-un-LCD-con-so.html 20/20