Una función útil en nuestros proyectos es la de mostrar los datos necesarios a las personas del exterior. La pantalla Nokia 5110 te permite hacer esto teniendo un espacio suficiente para mostrar información.
Es un módulo con tecnología de los años 90 pero su usabilidad, precio y versatilidad han ayudado a que se mantenga vigente hasta la actualidad en los proyectos con microcontroladores.
Aspectos técnicos
La pantalla es de baja resolución y muestra la información mediante pixeles individuales representados por bits para activarse o desactivarse. Está organizada de la siguiente forma: 84 columnas y 6 bloques, cada bloque tiene 8 filas. Las columnas, bloques y filas se cuentan iniciando desde el 0. Por ello al seleccionarlas las columnas, por ejemplo, tendríamos que elegir desde la columna 0 hasta la 83.
El módulo que se encarga de controlar la pantalla es un PCD8544 y se comunica con los microcontroladores con le protocolo SPI.
Tecnología | Visualizador de matriz (Dot Matrix LCD) |
Protocolo | SPI |
Tamaño de pantalla | 1.5 pulgadas |
Resolución | 84 x 48 pixeles |
Voltaje | 2.2V – 3.3V |
Corriente | 50mA |
Ángulo de visión | 180º |
Algunos modelos toleran los 5V.
Conexión
Vamos a conectar la pantalla Nokia 5110 a Arduino UNO siguiendo la gráfica. También puede guiarte de la tabla que esta abajo.
Nokia 5110 | Arduino |
RST | 3 |
CE | 4 |
DC | 5 |
DIN | 6 |
CLK | 7 |
VCC | 3.3V |
BL (luces) | 3.3V |
GND | GND |
Programación
Programar pixel por pixel no es imposible, pero si puede llevar bastante tiempo. Lo bueno es que han surgido diferentes librerías para esta pantalla. Nosotros utilizaremos la librerías desarrollada por Adafruit.
Podemos instalar la librería desde nuestro gestor de librerías en el editor de Arduino.
Al momento de instalarla verás un recuadro pidiendo permiso para instalar una segunda librería que también es necesaria.
La librería de Adafruit trae un código de ejemplo en el que expone las funciones disponibles como mostrar textos, números e incluso gráficos estáticos y en movimiento. En este tutorial vamos a utilizar las funciones referentes a textos y números.
Exploremos las funciones y ejemplos antes de entrar a las prácticas.
Imprimir texto y números
Vamos a mostrar texto en nuestra pantalla. Para este ejemplo imprimiremos el orden de cada fila a la vez que usamos las distintas funciones de la librería.
Este es el código completo:
/*
* Ejemplo para imprimir datos en una pantalla Nokia 5110
* Henry Mera
* https://todomaker.com
*/
//Incluir librerías
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
// Conexión SPI:
// pin 7 - Serial clock out (SCLK)
// pin 6 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 4 - LCD chip select (CS)
// pin 3 - LCD reset (RST)
//Crear objeto "display" y asignar los pines
//que se usarán para la comunicación con la pantalla
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
int fila3 = 3;
void setup() {
Serial.begin(115200); //Iniciar Serial
display.begin(); //Iniciar la pantalla
display.setContrast(0); //Contraste de la pantalla
display.clearDisplay(); //Limpiar el contenido que esté en la pantalla
display.setCursor(0, 0); //Emepezar desde el inicio de los segmentos
display.setTextSize(1); //Ajustar tamaños de texto
//Imprimir en pantalla
display.println("Fila 0");
display.setTextColor(WHITE, BLACK); //Cambiar color
display.println("Fila 1"); //Imprimir texto
display.setTextColor(BLACK, WHITE);
display.print("Fila ");
display.println(2); //Imprimir número
display.print("Fila "); display.println(fila3); //Imprimir una variable
display.println("Fila 4");
display.println("Fila 5");
display.display();
}
void loop() {
}
Así funciona el código. Primero añadimos las librerías que usaremos. En esta caso es la de SPI y las otras dos de Adafruit necesarias para usar la pantalla.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
Creamos un objeto llamado “display” para darle las instrucciones a nuestra pantalla. Añadiremos los pines que usaremos para SPI como un parámetro al crear el objeto.
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
Estas instrucciones iniciarán la pantalla, ajustarán el contraste y limpiaremos la pantalla para que esté lista al imprimir nuevos datos.
display.begin();
display.setContrast(0);
display.clearDisplay();
Con esa instrucción indicamos desde que sector de la pantalla se empezarán a imprimir el texto. Se maneja como una coordenada.
display.setCursor(0, 0);
El tamaño de un caracter en escala “1” es de 5×7 píxeles. Manteniendo esta relación al poner el texto en tamaño “2” los caracteres serían del tamaño de 10×14 píxeles.
display.setTextSize(1);
Para mostrar información en la pantalla usaremos el nombre que le asignamos como objeto seguido del comando print y println para hacerlo con un salto de línea al final, de esta forma lo siguiente que imprimas se hará en una línea debajo.
Imprimir cadena de caracteres usando las comillas.
display.println("Fila 0");
Imprimir un valor númerico.
display.print("Fila ");
display.println(2);
Podemos imprimir el valor de una variable somo llamándola por el nombre.
display.print("Fila "); display.println(fila3);
Con esta función podemos invertir los colores. Se agrega como parámetros el color del texto y después el color del fondo. Por defecto tenemos las letras negras y el fondo blanco.
display.setTextColor(WHITE, BLACK);
Imprimir datos de entrada
También podemos usar la pantalla Nokia 5110 para mostrar datos que se hayan ingresado por el monitor serial.
Crearemos una variable en la que guardaremos una cadena de texto, en esta caso la usaremos para guardar un nombre. Mostraremos el nombre en la pantalla después de escribirlo en nuestro monitor serial.
/*
* Ejemplo para imprimir datos de entrada el monitor serial
* en una pantalla Nokia 5110
* Henry Mera
* https://todoMaker.com
*/
//Incluir librerías
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
//Crear objeto "display" y asignar los pines
//que se usarán para la comunicación con la pantalla
Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);
//Variable a la que llegarán el valor
String nombre;
void setup() {
Serial.begin(115200); //Iniciar Serial
display.begin(); //Iniciar la pantalla
display.setContrast(0); //Contraste de la pantalla
display.clearDisplay(); //Limpiar el contenido que esté en la pantalla
display.setCursor(0, 0); //Emepzar desde el inicio de los segmentos
display.setTextSize(1); //Ajustar tamaños de texto
display.println("Escribir nombre");
display.display();
//Entrada de datos
while (Serial.available() == 0);
nombre = Serial.readString();
//Imprimir en pantalla
display.println("Tu nombre es: ");
display.println(nombre);
display.display();
}
void loop() {
}
Con esto haremos que el programa esté atento cuando haya un valor recibido por el monitor serial. Cuando se haya detectado escribirá se valor recibido en la variable nombre.
while (Serial.available() == 0);
nombre = Serial.readString();
Imprimiremos la variable del nombre acompañada de un texto.
display.println("Tu nombre es: ");
display.println(nombre);
display.display();
Conclusiones
La pantalla Nokia 5110 es utilizada en la actualidad por su precio accesible y fácil uso gracias las librerías creadas por la comunidad. Es una forma rápida para mostrar los datos de un programa al exterior.
Te invitamos a tomar el curso de Introducción al ESP32: Introducción al ESP32 | TodoMaker’s School