Arduino UNO R4 - LCD I2C

Este tutorial te enseña cómo usar una interfaz LCD I2C 16x2 con un Arduino UNO R4. En detalle, aprenderemos:

Arduino UNO R4 y LCD I2C de 16x2

Acerca de LCD I2C 16x2

La pantalla LCD I2C 16x2 es una pantalla que presenta 16 columnas y 2 filas. Está equipada con una interfaz I2C e incluye un potenciómetro para el ajuste del contraste.

Esquema de pines

La pantalla LCD I2C se conecta a través de una interfaz I2C y tiene 4 pines.

  • Pin GND: conéctalo a GND (0 voltios).
  • Pin VCC: conéctalo a VCC para alimentación (5 voltios).
  • Pin SDA: transporta la señal de datos I2C.
  • Pin SCL: transporta la señal de reloj I2C.
Diagrama de pines LCD I2C

Coordenada LCD

La pantalla LCD I2C 16x2 tiene 16 columnas y 2 filas. Tanto las columnas como las filas comienzan a numerarse desde 0.

Arduino UNO R4 LCD I2C coordenada

Diagrama de Cableado

Diagrama de cableado LCD I2C de Arduino UNO R4

This image is created using Fritzing. Click to enlarge image

Ver La mejor forma de alimentar Arduino Uno R4 y otros componentes.

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

Cómo programar para LCD I2C

El uso de la biblioteca LiquidCrystal_I2C facilita mucho el manejo del LCD.

  • Incluir la biblioteca:
#include <LiquidCrystal_I2C.h>
  • Crea un objeto LiquidCrystal_I2C especificando su dirección I2C, el número de columnas y el número de filas.
LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialize the LCD with I2C address 0x27 for a 16x2 display
  • Configurar la pantalla LCD.
lcd.init(); // Initialize the LCD display lcd.backlight(); // Turn on the backlight of the LCD
  • Coloca el cursor en el lugar elegido (column_index, row_index).
lcd.setCursor(column_index, row_index);
  • Mostrar un mensaje en la pantalla LCD.
lcd.print("Hello World!");

Podemos hacer muchas más cosas con una pantalla LCD (véase la sección 'Hacer más con LCD').

※ Nota:

La dirección I2C del LCD podría ser diferente según el fabricante. En nuestro código, usamos la dirección 0x27 tal como la especifica el fabricante DIYables.

Arduino UNO R4 Código

/* * Este código de Arduino UNO R4 fue desarrollado por es.newbiely.com * Este código de Arduino UNO R4 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-lcd-i2c */ #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(); 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) } void loop() { }

Pasos R\u00e1pidos

Sigue estas instrucciones paso a paso:

  • Si es la primera vez que usas el Arduino Uno R4 WiFi/Minima, consulta el tutorial sobre la configuración del entorno para Arduino Uno R4 WiFi/Minima en el IDE de Arduino.
  • Conecta la pantalla LCD I2C al Arduino UNO R4 según el diagrama proporcionado.
  • Conecta la placa Arduino Uno R4 a tu ordenador usando un cable USB.
  • Inicia el IDE de Arduino en tu ordenador.
  • Selecciona la placa adecuada Arduino Uno R4 (p. ej., Arduino Uno R4 WiFi) y el puerto COM.
  • Ve al ícono de Bibliotecas en el lado izquierdo del IDE de Arduino.
  • Escribe "LiquidCrystal I2C" en la caja de búsqueda y busca la biblioteca LiquidCrystal_I2C de Frank de Brabander.
  • Presiona el botón Instalar para instalar la biblioteca LiquidCrystal_I2C.
Biblioteca LiquidCrystal I2C para Arduino UNO R4
  • Copia el código y ábrelo en Arduino IDE
  • Haz clic en el botón Subir en Arduino IDE para subir el código a Arduino UNO R4
  • Consulta el resultado en la pantalla LCD
pantalla LCD I2C para Arduino UNO R4
  • Prueba a cambiar el texto y su ubicació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 la pantalla LCD

Personaje personalizado

Para mostrar caracteres o símbolos especiales, como un corazón o un pájaro enojado en una pantalla LCD, debes usar el generador de caracteres, porque la función lcd.print() solo puede mostrar caracteres ASCII.

El LCD 16x2 puede mostrar 32 caracteres en 2 líneas, con 16 posiciones en cada línea. Cada carácter utiliza 40 cuadrados diminutos, dispuestos en 8 filas y 5 columnas.

Arduino UNO R4 LCD 16x2 píxel

El generador de personajes crea un personaje (40 píxeles). Solo necesitas seguir estos 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> // Initialize the LCD connected via I2C at address 0x27 with 16 columns and 2 rows LiquidCrystal_I2C lcd(0x27, 16, 2); // Define byte array for creating custom character shape byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; void setup() { lcd.init(); // Initialize LCD screen lcd.backlight(); // Turn on the backlight lcd.createChar(0, customChar); // Register the custom character on LCD with ID 0 lcd.setCursor(2, 0); // Set cursor to start at column 2, row 0 lcd.write((byte)0); // Display the custom character at the current cursor position } void loop(){ }

Resultado mostrado en la pantalla:

Carácter LCD personalizado

Varios caracteres personalizados

Podemos crear hasta 8 caracteres especiales (numerados del 0 al 7). El ejemplo a continuación muestra cómo crear y mostrar tres caracteres.

#include <LiquidCrystal_I2C.h> // Create an LCD object, using I2C address 0x27 with 16 columns and 2 rows LiquidCrystal_I2C lcd(0x27, 16, 2); // Define custom character 0 (heart shape) byte customChar0[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 }; // Define custom character 1 (arrow pointing upwards) byte customChar1[8] = { 0b00100, 0b01110, 0b11111, 0b00100, 0b00100, 0b00100, 0b00100, 0b00100 }; // Define custom character 2 (arrow pointing downwards) byte customChar2[8] = { 0b00100, 0b00100, 0b00100, 0b00100, 0b00100, 0b11111, 0b01110, 0b00100 }; void setup() { lcd.init(); // Initialize the LCD display lcd.backlight(); // Turn on the LCD backlight // Register custom character 0 with index 0 on the LCD lcd.createChar(0, customChar0); // Register custom character 1 with index 1 on the LCD lcd.createChar(1, customChar1); // Register custom character 2 with index 2 on the LCD lcd.createChar(2, customChar2); // Set the cursor to column 2, row 0 lcd.setCursor(2, 0); // Display the custom character 0 at the current cursor position lcd.write((byte)0); // Set the cursor to column 4, row 0 lcd.setCursor(4, 0); // Display the custom character 1 at the current cursor position lcd.write((byte)1); // Set the cursor to column 6, row 0 lcd.setCursor(6, 0); // Display the custom character 2 at the current cursor position lcd.write((byte)2); } void loop() { }

Resultado mostrado en la pantalla de cristal líquido (LCD):

LCD con múltiples caracteres personalizados

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

  • Utiliza el generador de caracteres anterior para crear el código binario de tu carácter especial.
  • Escribe el código binario de tu carácter (cópialo del paso anterior).
byte customChar[8] = { 0b00000, 0b01010, 0b11111, 0b11111, 0b01110, 0b00100, 0b00000, 0b00000 };
  • Crea un personaje personalizado y colócalo en un número entre 0 y 7 en la función setup().
lcd.createChar(index, customChar);
  • Muestra un carácter especial en la pantalla LCD cuando quieras, ya sea en la función setup() o loop().
lcd.setCursor(column, row); // Set the cursor to the specified column and row lcd.write((byte)index); // Display the custom character stored at 'index' position

Otras funciones

Inserta las siguientes funciones en la función loop() una por una, añadiendo un delay(5000) después de cada función.

  • Pantalla LCD de lectura fácil
lcd.clear();
  • Coloca el cursor en la esquina superior izquierda de la pantalla.
lcd.home();
  • Coloca el cursor en un lugar específico (columna, fila).
lcd.setCursor(column, row);
  • Mostrar el cursor de la pantalla LCD.
lcd.cursor();
  • Apaga el cursor de la pantalla LCD.
lcd.noCursor();
  • Mostrar el cursor parpadeante de la pantalla LCD.
lcd.blink()
  • Detiene el cursor parpadeante de la pantalla LCD.
lcd.noBlink()

Solución de problemas del LCD I2C

Si el texto no aparece en la pantalla LCD I2C, por favor verifique estos problemas:

  • Ajusta el brillo de la pantalla LCD girando el potenciómetro en su parte posterior.
  • La dirección I2C de la LCD puede variar entre diferentes fabricantes. Normalmente es 0x27 o 0x3F. Prueba estas direcciones por separado. Si ninguna funciona, usa el siguiente código para descubrir la dirección I2C correcta.
// 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 mostrado 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!