Arduino - LCD I2C

En este tutorial de Arduino LCD I2C, aprenderemos a conectar una LCD I2C (pantalla de cristal líquido) a la placa Arduino. Las pantallas LCD son muy populares y ampliamente utilizadas en proyectos de electrónica para mostrar información. Hay muchos tipos de LCD. Este tutorial toma como ejemplo un LCD 16x2 (16 columnas y 2 filas). Las demás pantallas LCD son similares.

Hardware Requerido

1×Arduino Uno R3
1×Cable USB 2.0 tipo A/B (para PC USB-A)
1×Cable USB 2.0 tipo C/B (para PC USB-C)
1×LCD I2C
1×Cables Puente
1×(Recomendado) Shield de Bloque de Terminales de Tornillo para Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Carcasa para Arduino Uno
1×(Recomendado) Placa Base de Prototipado y Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Acerca de LCD I2C 16x2

En el tutorial anterior, ya habíamos aprendido a usar el LCD normal. Sin embargo, el cableado entre Arduino y el LCD normal es complicado. Por ello, LCD I2C se ha creado para simplificar el cableado. De hecho, LCD I2C está compuesto por un LCD normal, un módulo I2C y un potenciómetro.

Diagrama de pines

El LCD I2C utiliza la interfaz I2C, por lo que tiene 4 pines:

  • Pin GND: debe conectarse a GND (0V).
  • Pin VCC: la fuente de alimentación para el LCD, debe conectarse a VCC (5V).
  • Pin SDA: señal de datos I2C
  • Pin SCL: señal de reloj I2C
Pinout de LCD I2C

Coordenada LCD

LCD I2C 16x2 incluye 16 columnas y 2 filas. Las columnas y filas están indexadas desde 0.

Arduino LCD I2C Coordenada

Diagrama de Cableado

Diagrama de cableado de Arduino para LCD I2C

This image is created using Fritzing. Click to enlarge image

LCD I2C Arduino Uno, Nano Arduino Mega
Vin 5V 5V
GND GND GND
SDA A4 20
SCL A5 21

Cómo programar para LCD I2C

Gracias a la biblioteca LiquidCrystal_I2C, usar la pantalla LCD es pan comido.

  • Incluir la biblioteca:
#include <LiquidCrystal_I2C.h> // Library for LCD
  • Declarar un objeto LiquidCrystal_I2C con la dirección I2C, el número de columnas, el número de filas:
LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows
  • Inicializar la pantalla LCD.
lcd.init(); //initialize the lcd lcd.backlight(); //open the backlight
  • Mover el cursor a la posición deseada (column_index, row_index)
lcd.setCursor(column_index, row_index);
  • Imprimir un mensaje en la pantalla LCD.
lcd.print("Hello World!");

Hay muchas más cosas que podemos hacer con LCD (ver la sección Haz más con LCD)

※ Nota:

La dirección I2C del LCD puede variar según los fabricantes. En el código, usamos 0x27, que está especificado por el fabricante DIYables.

Código de Arduino

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows void setup() { lcd.init(); // initialize the lcd lcd.backlight(); } void loop() { lcd.clear(); // clear display lcd.setCursor(0, 0); // move cursor to (0, 0) lcd.print("Arduino"); // print message at (0, 0) lcd.setCursor(2, 1); // move cursor to (2, 1) lcd.print("GetStarted.com"); // print message at (2, 1) delay(2000); // display the above for two seconds lcd.clear(); // clear display lcd.setCursor(3, 0); // move cursor to (3, 0) lcd.print("DIYables"); // print message at (3, 0) lcd.setCursor(0, 1); // move cursor to (0, 1) lcd.print("www.diyables.io"); // print message at (0, 1) delay(2000); // display the above for two seconds }

Pasos R\u00e1pidos

  • Ve al icono de Bibliotecas en la barra izquierda del IDE de Arduino.
  • Busca "LiquidCrystal I2C", luego encuentra la biblioteca LiquidCrystal_I2C de Frank de Brabander.
  • Haz clic en el botón Instalar para instalar la biblioteca LiquidCrystal_I2C.
Biblioteca LiquidCrystal I2C para Arduino
  • Copie el código anterior y ábralo con Arduino IDE
  • Haga clic en el botón Subir en Arduino IDE para subir el código al Arduino
  • Ver el resultado en la pantalla LCD
Arduino muestra texto en la pantalla LCD
image source: diyables.io
  • Prueba a modificar el texto y la posición

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

Haz más con LCD

Personaje personalizado

La función lcd.print() solo admite caracteres ASCII. Si quieres mostrar un carácter o símbolo especial (p. ej. corazón, pájaro enfadado), necesitas usar el siguiente generador de caracteres.

La pantalla LCD 16x2 puede mostrar 32 caracteres (2 filas y 16 columnas). Cada carácter está compuesto por 40 píxeles (8 filas y 5 columnas).

Arduino LCD 16x2 píxel

El generador de personajes representa un personaje (40 píxeles). Solo necesitas hacer los siguientes pasos:

Click on each pixel to select/deselect


Copy below custom character code
Replace the customChar[8] in the below code
#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.createChar(0, customChar); // create a new custom character lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char at (2, 0) } void loop() { }

Resultado en la pantalla LCD:

carácter LCD personalizado

Múltiples caracteres personalizados

Podemos crear hasta 8 caracteres personalizados (con índices de 0 a 7). El siguiente ejemplo crea y muestra tres caracteres.

#include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27, 16 column and 2 rows byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); lcd.createChar(0, customChar0); // create a new custom character (index 0) lcd.createChar(1, customChar1); // create a new custom character (index 1) lcd.createChar(2, customChar2); // create a new custom character (index 2) lcd.setCursor(2, 0); // move cursor to (2, 0) lcd.write((byte)0); // print the custom char 0 at (2, 0) lcd.setCursor(4, 0); // move cursor to (4, 0) lcd.write((byte)1); // print the custom char 1 at (4, 0) lcd.setCursor(6, 0); // move cursor to (6, 0) lcd.write((byte)2); // print the custom char 2 at (6, 0) } void loop() { }

Resultado en la pantalla LCD:

Múltiples caracteres personalizados en una pantalla LCD

Resumen: cómo usar un carácter personalizado en una pantalla LCD

  • Utilice el generador de caracteres anterior para crear el código binario del carácter personalizado.
  • Declare el código binario para el carácter personalizado (copie del paso anterior).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Crear un carácter personalizado y asignarlo a un valor de índice (de 0 a 7) en la función setup()
lcd.createChar(index, customChar);
  • Imprimir el carácter personalizado en la pantalla LCD en cualquier momento, en cualquier lugar (en setup() o loop())
lcd.setCursor(column, row); // move cursor to a desired position lcd.write((byte)index); // print the custom char at the desired position

Otras funciones

Añade las funciones que se muestran a continuación a la función loop() una por una y añade delay(5000) después de cada función.

  • Pantalla LCD clara
lcd.clear();
  • Mover el cursor a la esquina superior izquierda de la pantalla LCD
lcd.home();
  • Mover el cursor a la posición (columna, fila)
lcd.setCursor(column, row);
  • Mostrar el cursor de la pantalla LCD
lcd.cursor();
  • Oculta el cursor LCD.
lcd.noCursor();
  • Muestra el cursor LCD parpadeante.
lcd.blink()
  • Apaga el cursor parpadeante de la pantalla LCD.
lcd.noBlink()

Rétate a ti mismo

Utiliza una pantalla LCD para realizar alguno de los siguientes proyectos:

Solución de problemas de LCD I2C

Si el texto no se muestra en la pantalla LCD I2C, por favor verifique los siguientes problemas:

  1. Ajusta el brillo de la pantalla LCD girando el potenciómetro en la parte trasera de la pantalla LCD
  2. Dependiendo del fabricante, la dirección I2C de la pantalla LCD puede ser diferente. Por lo general, la dirección I2C predeterminada de la pantalla LCD es 0x27 o 0x3F. Prueba estos valores uno por uno. Si aún no funciona, ejecuta el código de abajo para encontrar la dirección I2C.
// I2C address scanner program #include <Wire.h> void setup() { Wire.begin(); Serial.begin(9600); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found"); else Serial.println("done"); delay(5000); // wait 5 seconds for next scan }

El resultado en el Monitor Serial:

COM6
Send
Scanning... I2C device found at address 0x3F ! done Scanning... I2C device found at address 0x3F ! done
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!