CrowPanel: Una solución completa para tus proyectos con ePaper

¿Necesitas realizar un proyecto con pantallas de papel electrónico? Los CrowPanel de Elecrow, basados en la tecnología EPD, son la herramienta que necesitas: una solución completa y lista para usar. En este artículo descubrirás los modelos disponibles, sus características principales y cómo puedes integrarlos fácilmente en tus ideas con un ejemplo práctico.

Introducción

Las pantallas de papel electrónico (EPD, por sus siglas en inglés: Electronic Paper Display) o de tinta electrónica se han consolidado como una excelente opción en diversas aplicaciones debido a sus notables ventajas, como su legibilidad en entornos altamente iluminados (incluso a plena luz del día) y su bajo consumo.

Estas cualidades las convierten en la elección ideal para aplicaciones como:

  • Etiquetas electrónicas.
  • Carteles de señalización en exteriores.
  • Paneles informativos en sistemas de automatización.
  • Lectores de libros electrónicos.

Sin embargo, si quieres desarrollar una aplicación con este tipo de pantallas encontrarás que puede resultar algo complicado. El proceso no se limita simplemente a seleccionar una pantalla con el tamaño y la resolución adecuados. Además, es necesario elegir una placa controladora o adaptadora compatible que permita conectar la pantalla y controlarla desde nuestra CPU, placa base o microcontrolador.

Afortunadamente, Elecrow ofrece una solución integral que simplifica este proceso: la serie de paneles CrowPanel. Estas unidades completas combinan la pantalla, su controlador y una potente CPU ESP32-S3 en un único dispositivo. Además, los paneles incluyen dos botones y un interruptor rotatorio para facilitar la interacción del usuario, un conector para batería, un puerto UART, un conector GPIO que permite integrar los pines del ESP32-S3 con circuitos externos, y una ranura para tarjetas SD, ideal para almacenar información gráfica u otros datos. Una buena cantidad de memoria, tanto Flash como RAM y la capacidad del ESP32 de comunicarse a través de Bluetooth y Wifi, facilita el desarrollo de aplicaciones IoT que requieran de algún tipo de conectividad.

Gracias a esta combinación de características y funcionalidades, los paneles CrowPanel se presentan entonces como una excelente solución para que desarrolles tus propias aplicaciones con pantallas de papel electrónico sin mayores complicaciones.

Fig. 1. Un panel de 5.79″
Fig. 2. Vista posterior del panel de 5.79″

Modelos

Actualmente Elecrow comercializa 6 modelos diferentes de estos paneles entre los que puedes elegir según tus necesidades. Todos tienen dos colores (blanco y negro) y distintos tamaños y resoluciones:

Fig. 3. Distintos modelos de CrowPanel (imágenes ilustrativas)

Características

Todos los paneles tienen características similares, con algunas pequeñas variaciones. Todos cuentan con una CPU ESP32-S3, dos botones y un interruptor rotario, conector de bateria, 8 MB de Flash y de RAM y el conector USB-C de alimentación y programación.

Según el modelo en particular, algunas otras especificaciones pueden variar, como puedes ver en la siguiente tabla:

Tamaño1.54″2.13″2.9″3.7″4.2″5.79″
CPUESP32-S3ESP32-S3ESP32-S3-WROOM-1-N8R8ESP32-S3-WROOM-1-N8R8ESP32-S3-WROOM-1-N8R8ESP32-S3-WROOM-1-N8R8
Flash8MB8MB8MB8MB8MB8MB
PSRAM8MB8MB8MB8MB8MB8MB
DriverSSD1680SSD1680ZSSD1680ZUC8253SSD1683SSD1683
Resolución125*125122*250128×296240*416400*300272*792
Refresco parcialSiSiSiSiSiSi
ConectoresUART, BATUART, BAT, GPIOUART, BAT, GPIO, SDUART, BAT, GPIO, SDUART, BAT, GPIO, SDUART, BAT, GPIO, SD

Programación

Gracias al ESP32-S3 integrado, los paneles CrowPanel pueden programarse utilizando cualquier lenguaje o entorno compatible con este microcontrolador. Esto ofrece una gran flexibilidad para elegir la plataforma que mejor se adapte a tus necesidades.

Entre las opciones más populares se encuentran Arduino, ESP-IDF, MicroPython, CircuitPython, e incluso Rust si decides desarrollar tus propios drivers para controlar las pantallas. Sin embargo, si prefieres evitar este trabajo y utilizar librerías “listas para usar” que ahorren tiempo y esfuerzo, las posibilidades se reducen.

Elecrow ha desarrollado librerías específicas para Arduino que permiten controlar todas las funciones de sus paneles de forma sencilla. Aunque los paneles utilizan distintos chips controladores, estas librerías abstraen los detalles técnicos y proporcionan un conjunto uniforme de funciones para todos los modelos. Esto simplifica enormemente el proceso, eliminando la necesidad de crear drivers personalizados y ofreciendo una solución rápida y eficiente.

Si buscas una alternativa más generalizada, también puedes optar por GxEPD2, una librería ampliamente utilizada que permite estandarizar el código, especialmente si trabajas con pantallas de diferentes fabricantes en distintos proyectos. Sin embargo, una desventaja de GxEPD2 es que podría no estar tan optimizada para un modelo específico como las librerías desarrolladas por Elecrow. Cabe destacar que GxEPD2 también está diseñada para funcionar en el entorno Arduino.

En otros lenguajes de programación, la situación es más compleja. Aunque existen algunos drivers, su compatibilidad depende del controlador de la pantalla y no suelen estar diseñados específicamente para estos paneles, lo que podría complicar la implementación si no tienes experiencia previa en este tipo de desarrollos.

Por estas razones, Arduino se posiciona como la opción más sencilla y versátil para trabajar con los paneles CrowPanel. A continuación, utilizaré este entorno para mostrarte un ejemplo práctico de aplicación.

Ejemplo de aplicación

En este sencillo ejemplo, veremos cómo cargar una imagen en un panel. Este proceso, conocido como refresco total, actualiza todos los píxeles de la pantalla. Además de aprender este concepto básico, exploraremos las librerías que Elecrow pone a nuestra disposición y cómo utilizar algunas de sus funciones principales.

Este ejemplo también nos permitirá analizar el procedimiento para preparar y convertir imágenes, un paso esencial y recurrente al trabajar con este tipo de pantallas, para que puedan ser mostradas correctamente en el panel.

Como tal vez sea la primera vez que programas un ESP32 en Arduino, también te explicaré como configurar el IDE y dejarlo listo para escribir tu código.

Diseño de la imagen

Para el ejemplo voy a usar el panel mas grande, el CrowPanel de 5,79 pulgadas, así que la imagen a mostrar debe tener un tamaño de 272 pixeles de alto por 792 de ancho (siempre deben ser números múltiplos de 8) y desde luego debe ser monocromo (1 bit por pixel).

Para crearla o diseñarla puedes usar cualquier programa de diseño, hasta el Paint que está incluido en Windows. La que yo usaré es la siguiente:

Fi. 4. Imagen usada para el ejemplo

Preparación de la imagen

Antes de poder mostrar una imagen en el ePaper, es necesario convertir esa imagen a un formato compatible que podamos integrar en nuestro código.

Esto se puede hacer empleando el programa image2lcd, que toma la imagen y la convierte a un archivo de cabecera (un archivo “.h”) con la información de la imagen en la forma de un array de bytes (unsigned char).

Instalación de image2lcd

El programa image2lcd puede ser descargado desde este enlace.

Al hacer click en el enlace, se descargará un archivo comprimido en formato “7z”. Debes descomprimirlo, correr el archivo ejecutable y seguir los pasos de la instalación. Este programa es exclusivo para Windows y no cuenta con versiones para otros sistemas operativos.

Una vez instalado, ejecutalo y verás una pantalla como la siguiente:

Fig. 5. El programa Img2Lcd

Abajo a la derecha hay una solapa que dice “Register”. Es importante que registres el programa sino te agregará un texto a las imagenes que quieras convertir. Toca la solapa “Register” e introduce el siguiente código: 0000-0000-0000-0000-6A3B

Conversión de la imagen

Una vez instalado y registrado el programa puedes proceder a convertir el formato de la imagen.

Haz click en el ícono Open y carga la imagen a transformar. Ajusta las configuraciones de la izquierda para que queden como se ven a continuación:

Fig. 6. Conversión de la imagen

Una vez ajustada la configuración, no te olvides de pulsar el botón con forma de flecha al lado del 272. Con esto la imagen quedará convertida.

Ahora pulsa el ícono correspondiente a Save (a la derecha de Open) y guarda los datos con cualquier nombre (por ejemplo “CrowPanelExample.h”). Te quedará algo así:

Fig. 7. Archivo de cabecera (.h)

Configuración del Arduino IDE

Ahora revisaremos algunas configuraciones del Arduino IDE para poder continuar con el código de nuestro ejemplo.

La versión del IDE que usé para este ejemplo es la 2.3.4.

Si ya estás usando el ESP32 puedes saltarte este paso e ir directamente a la configuracion de la placa. Si no es así, deberás primero configurar el IDE para el ESP32.

Para ello, selecciona en el menú ArchivoPreferencias (o pulsa CTRL + ,). Se mostrará la siguiente ventana. Pulsa donde está marcado en la imagen.

Fig. 8. Preferencias del Arduino IDE

En la siguiente ventana copia y pega la siguiente línea:

https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json

Fig. 9. Configurando el gestor de placas del IDE

Dale click al botón ACEPTAR y en la barra de herramientas de la izquierda del IDE selecciona el Gestor de Placas. En el cuadro de búsquedas escribe ESP32. Te aparecerán los paquetes disponibles para placas ESP32. Busca el que dice esp32 de Espressif y pulsa INSTALAR

Fig. 10. Gestor de placas

Luego de unos minutos de descarga e instalación, el IDE estará listo para programar el ESP32.

Configuracion de la placa

La última parte es ajustar la configuración del panel dentro del IDE.

Para ello selecciona Herramientas Placaesp32 y en la lista que se muestra busca el modelo ESP32S3 Dev Module.

Selecciona ahora la opción HerramientasPartition scheme y en la lista busca Huge App (3 MB No OTA /1MB SPIFFS)

Luego selecciona Herramientas PSRAM y elige entre las opciones OPI PSRAM

Finalmente, elige el puerto COM en Herramientas Puerto

Listo! Ya tienes el Arduino IDE completamente configurado para trabajar con el CrowPanel. 👍

Código

Ahora si, teniendo preparado el archivo de cabecera con la información de la imagen que queremos mostrar y el IDE correctamente configurado, puedes cargar el código en el panel.

Librerías

Vamos a usar varias librerías provistas por Elecrow que cumplen distintas funciones, desde controlar la comunicación con la pantalla ePaper hasta dibujar imágenes o elementos gráficos sobre ella.

Si bien los nombres de las funciones definidas en estas librerías coinciden entre los distintos paneles, como éstos usan distintos controladores, las librerías son específicas para cada panel.

Lo anterior es sumamente importante: No puedes usar las librerías que emplearemos en este ejemplo para el panel de 5.79″ en un programa para el panel de 3.7″. Cada panel tiene sus librerías. Al final te explicaré como ubicar la librería correspondiente a cada uno.

En el caso específico del panel de 5.79″, las librerías son las siguientes:

  • EPD: Es la librería principal que incluye funciones que muestran imágenes, textos o elementos geométricos.
  • EPD_Init: Se hace cargo de la inicialización y configuración del ePaper. Es la que “habla” con el hardware.
  • EPD_Font: Contiene definiciones de fuentes o tipos de letras.
  • spi: Funciones para comunicarse con el ePaper usando el bus SPI.

Funcionamiento

Analicemos ahora el funcionamiento del código de ejemplo.

El primer #include carga la librería EPD.h. A su vez, esta librería invocará a las otras, así que es la única que debemos agregar. El segundo #include carga en memoria el archivo de imagen que generamos antes con el programa Img2Lcd, para que lo podamos utilizar.

#include "EPD.h"             // Funciones para controlar el panel
#include "Example579.h"      // Imagen a cargar en el panel

A continuación se define un array que servirá como un buffer para almacenar la imagen. El array se dimensiona para una imagen de 800 x 272 pixeles, algo mas que el tamaño real debido a ajustes internos de la librería.

uint8_t ImageBW[27200];      // Array para almacenar la informacion de color de la imagen (800x272)

Una vez hecho esto comienza la función setup de Arduino donde en realidad ocurre toda la acción. Lo primero será realizar una serie de configuraciones iniciales de hardware necesarias para dejar el panel en una condición conocida.

El pin 7 está conectado al circuito que controla la alimentación del ePaper, así que lo primero que se hace es configurarlo como salida y llevarlo a la condición HIGH, para encender la pantalla.

A continuación, EPD_GPIOInit configura otros pines del ePaper, incluídos los de la interfaz SPI.

EPD_Init configura registros internos del ePaper y EPD_Display_Clear lo limpia, accediendo también a los registros internos.

Finalmente EPD_Update refresca la pantalla. Siempre luego de hacer operaciones que modifiquen el contenido de la pantalla se debe llamar a EPD_Update para que el resultado de estas operaciones sea visible.

void setup() {
  
  pinMode(7, OUTPUT);        
  digitalWrite(7, HIGH);     // Activa la alimentacion del panel

  EPD_GPIOInit();            // Iniciliza pines de control e interfaz     

  EPD_Init();                 // Inicializa la pantalla
  
  EPD_Display_Clear();        // Limpia la pantalla a nivel de hardware

  EPD_Update();               // Refresca para que se vea

Llegado a este punto, la pantalla está correctamente configurada y limpia. En lo que sigue se realiza la carga de la imagen de ejemplo.

Lo primero es llamar a Paint_NewImage, que prepara el buffer de imagen con la configuración de la pantalla (tamaño), especificando un ángulo de rotación, color de fondo y la imagen que se va a cargar. Rotation está definida por omisión con un valor de 180 grados para que la imagen se vea correctamente con los botones y la rueda giratoria a la derecha (si lo quieres al revés debes pasar como valor 0).

A continuación se transfieren los datos de la imagen al buffer, usando EPD_ShowPicture. Aquí se deben especificar las coordenadas donde se empezará a mostrar la imagen, su tamaño en pixeles, el nombre de la imagen y el color de fondo. Como esta imagen cubrirá toda la pantalla empieza en 0,0 y su tamaño coincide con el del panel. El nombre gImage_Example579 está en la definición dentro del archivo de cabecera Example579.h

Luego de lo anterior se transfiere el contenido del buffer al ePaper con EPD_Display y recién se verá en el panel luego de que funcione EPD_Update.

Para finalizar se pone al panel en el modo de bajo consumo con EPD_DeepSleep.

  //Inicializa un buffer para la imagen
  //Pasa la definicion de imagen, tamaño, rotacion y color de fondo
  Paint_NewImage(ImageBW, EPD_W, EPD_H, Rotation, WHITE);  
 
  EPD_ShowPicture(0, 0, 792, 272, gImage_Example579, WHITE);  //Pasa la imagen al buffer
  EPD_Display(ImageBW);       // Transfiere la imagen del buffer a la pantalla

  EPD_Update();               // Refresca para actualizar

  EPD_DeepSleep();           // Activar modo de bajo consumo
}

Aquí te dejo el código completo.

#include "EPD.h"             // Funciones para controlar el panel
#include "Example579.h"      // Imagen a cargar en el panel

uint8_t ImageBW[27200];      // Array para almacenar la informacion de color de la imagen (800x272)

void setup() {
  
  pinMode(7, OUTPUT);        
  digitalWrite(7, HIGH);     // Activa la alimentacion del panel

  EPD_GPIOInit();            // Iniciliza pines de control e interfaz     

  EPD_Init();                 // Inicializa la pantalla
  
  EPD_Display_Clear();        // Limpia la pantalla a nivel de hardware

  EPD_Update();               // Refresca para que se vea

  //Inicializa un buffer para la imagen
  //Pasa la definicion de imagen, tamaño, rotacion y color de fondo
  Paint_NewImage(ImageBW, EPD_W, EPD_H, Rotation, WHITE);  
 
  EPD_ShowPicture(0, 0, 792, 272, gImage_Example579, WHITE);  //Pasa la imagen al buffer
  EPD_Display(ImageBW);       // Transfiere la imagen del buffer a la pantalla

  EPD_Update();               // Refresca para actualizar

  EPD_DeepSleep();           // Activar modo de bajo consumo
}

void loop() {
  //No hace nada
}

Así se vé el panel con la imagen de ejemplo cargada:

Fig. 11. El panel mostrando la imagen de ejemplo

Este ejemplo es muy simple, pero sirve para explicar el funcionamiento básico del panel y el uso de sus librerías para que luego puedas aplicarlo en tus propios proyectos.

Repositorios

Las librerías específicas de cada panel, así como los ejemplos originales están en el repositorio de Elecrow, que puedes encontrar aquí.

Este ejemplo, junto a las librerías utilizadas para el panel de 5.79″ están también en mi repositorio que encontrarás en esta otra dirección.

Finalmente, aquí está el repositorio que contiene todos los ejemplos, tutoriales y herramientas que voy preparando en relación con estos paneles.

Paneles EPD CrowPanel – CrowPanel EPD panels

  • arduino
  • display
  • epaper
  • epaper-displays
  • epd
  • gxepd2
  • Last Update 01-08-2025
  • Subscribers 1
  • Forks 0

Conclusiones

Los paneles CrowPanel EPD reúnen un conjunto de características que los hacen ideales para desarrollar rápidamente y sin mayores complicaciones distintos proyectos que requieran el uso de una pantalla de papel electrónico.

Su potente CPU ESP32-S3 con una buena cantidad de memoria, los botones de interface con el usuario, el conector de UART y GPIO, la posibilidad de alimentarlo desde una batería y la ranura para tarjeta SD los convierten en una solución versátil y autónoma para una amplia gama de aplicaciones.

Además, su capacidad de conectividad Wi-Fi y Bluetooth integrada permite desarrollar proyectos IoT con facilidad, mientras que la ranura para tarjetas SD facilita el almacenamiento de datos o gráficos. Todo esto, combinado con su bajo consumo energético, hace que los CrowPanel EPD sean ideales para proyectos portátiles, señalización inteligente, paneles informativos y mucho más.

En este artículo hice una introducción a estos paneles para que tengas un vistazo general de sus capacidades y cómo puedes emplearlos para resolver una aplicación particular. En futuras entregas veremos proyectos mas complejos y analizaremos mas en profundidad sus capacidades.

Hasta la próxima!

Más info

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Habilitar notificaciones OK No, gracias