Pizarras E-Paper con Waveshare
Índice
Waveshare E-Paper Displays: La Guía Definitiva para Usuarios de ESPHome
Waveshare es una empresa especializada en el diseño y fabricación de componentes electrónicos, como placas de desarrollo, pantallas y sensores, utilizados en áreas como el Internet de las Cosas (IoT), la robótica y la educación. Si alguna vez has visto hermosas pantallas de tinta electrónica (e-paper) de gran tamaño utilizadas con ESPHome y Home Assistant, es muy probable que fueran fabricadas por Waveshare.
A diferencia de los paneles LED o LCD, las pantallas de tinta electrónica suelen tener solo unos pocos colores o vienen únicamente en blanco y negro. Esto se debe a que su tecnología subyacente, principalmente las pantallas electroforéticas (EPD), se basa en el movimiento físico de partículas de pigmento cargadas para formar una imagen. En otras palabras, es como si pequeñas partículas de polvo de colores se movieran físicamente para crear lo que ves, en lugar de que las luces se enciendan o apaguen. Este movimiento físico es mucho más difícil de realizar con muchos colores diferentes de manera rápida y vibrante.

En este artículo, compartiré mi experiencia con las pantallas E-Paper de Waveshare y ESPHome. Mi objetivo es aclarar la confusión sobre qué modelos son compatibles con ESPHome, qué características y colores están soportados y, tal vez, darte algunas ideas para casos de uso.
Compatibilidad entre Waveshare y ESPHome
Waveshare produce una amplia gama de pantallas de tinta electrónica, lo que puede resultar abrumador al considerar la compatibilidad con Home Assistant y ESPHome. Esto se complica aún más por las variaciones de los mismos paneles, haciendo que el proceso de averiguar todo sea aún más difícil.
Para remediar esto en cierta medida, he investigado a fondo en los foros y grupos de discusión para identificar qué modelos están oficialmente soportados, parcialmente soportados y no soportados. Además, dado que Waveshare ofrece una placa controladora ESP32 para E-Paper muy conveniente, he señalado qué paneles son directamente compatibles con ella sin necesidad de controladores adicionales o placas de interconexión.
Cuando elijas una pantalla de tinta electrónica, tu primera decisión será la capacidad de color. Más colores generalmente significan tiempos de refresco más lentos. Algunas pantallas ofrecen refresco parcial para mitigar esto, pero es una característica que no siempre funciona de manera confiable y aumenta el tiempo de refresco completo de la pantalla.
La siguiente decisión será el tamaño de la pantalla. Para pantallas pequeñas de tinta electrónica que actúen como paneles de estado de un solo dispositivo en tu hogar inteligente, una pantalla de 1.5-3″ será suficiente. Sin embargo, si planeas mostrar tableros de control completos con múltiples sensores de datos, deberías considerar pantallas que van de 4 a 13.3″.
Finalmente, tendrás que tener en cuenta el precio de las pantallas E-Paper de Waveshare. Dado que las pantallas de tinta electrónica son bastante costosas, los gastos pueden acumularse rápidamente, especialmente si estás implementando varias unidades grandes con sus placas controladoras asociadas. Naturalmente, esto es algo muy individual y va más allá del alcance de esta guía.
Placas Controladoras ESP32 y ESP8266 de Waveshare
Todas las pantallas E-Paper de Waveshare, con la excepción del modelo de 7.3″ con 7 colores, son compatibles con la Placa Controladora ESP32 de Waveshare. Aunque algunos modelos también funcionan con la versión ESP8266, recomiendo encarecidamente obtener la versión ESP32, ya que es similar en precio pero tiene un rendimiento superior.

Usar estas placas controladoras hace que la instalación sea prácticamente plug-and-play: solo conecta el cable plano de la pantalla a la placa y estará lista para flashear. Cualquier pantalla que elijas usar con las placas controladoras oficiales siempre tendrá la siguiente configuración de pines:
| PIN | ESP32 | ESP8266 | Descripción |
|---|---|---|---|
| VCC | 3V3 | VCC | Entrada de alimentación (3.3V) |
| GND | GND | GND | Tierra |
| DIN | GPIO14 (P14) | GPIO13 (D7) | SPI MOSI, entrada de datos |
| SCK | GPIO13 (P13) | GPIO14 (D5) | SPI CLK, señal de reloj |
| CS | GPIO15 (P15) | GPIO15 (D8) | Selección de chip, activa baja |
| DC | GPIO27 (P27) | GPIO4 (D2) | Datos/Comando, bajo para comandos, alto para datos |
| RST | GPIO26 (P26) | GPIO2 (D4) | Reinicio, activo bajo |
| BUSY | GPIO25 (P25) | GPIO5 (D1) | Estado de ocupación (ocupado) |
Lo siguiente que necesitas determinar es la configuración correcta de la resistencia de la placa. Ambos modelos tienen un pequeño interruptor que debes cambiar a la posición correcta según el modelo de tu pantalla E-Paper. En ambas placas, esto puede ser A o B, que corresponden a las siguientes pantallas E-Paper de Waveshare:
| Modo | ESP32 | ESP8266 |
|---|---|---|
| A – Modo | 1.54″ E-Paper 1.54″ E-Paper (B) 2.9″ E-Paper 2.9″ E-Paper (B) 4.2″ E-Paper 4.2″ E-Paper (B) 13.3″ E-Paper (K) | 1.54″ E-Paper 2.9″ E-Paper |
| B – Modo | 2.7″ E-Paper 2.7″ E-Paper (B) 5.83″ E-Paper 7.5″ E-Paper 7.5″ E-Paper (B) | 1.54″ E-Paper (B) 2.7″ E-Paper 2.7″ E-Paper (B) 2.9″ E-Paper (B) 4.2″ E-Paper 4.2″ E-Paper (B) 7.5″ E-Paper 7.5″ E-Paper (B) |
Empezando con Waveshare y ESPHome
Para comenzar con Waveshare y ESPHome, simplemente conecta el cable plano de la pantalla E-Paper a la placa controladora ESP. En mi ejemplo, estoy utilizando la Placa Controladora ESP32 E-Paper de Waveshare y una Pantalla E-Paper Tri-color de 7.5″ de Waveshare. Además, estoy utilizando el Componente de Pantalla por defecto de ESPHome para este modelo, ya que descubrí que LVGL causa más problemas de los que resuelve y su desarrollo no está aún allí.

La placa ESP32 se inicializa como cualquier otra placa ESP en ESPHome, con la configuración básica siendo la misma. La funcionalidad principal implica definir el componente waveshare_epaper y la conexión spi antes de que se pueda renderizar algo en la pantalla. Por ejemplo:
yaml
esphome:
name: waveshare
friendly_name: waveshare
…..
spi:
clk_pin: GPIO13
mosi_pin: GPIO14
display:
- platform: waveshare_epaper
id: waveshare
model: 7.50in-bV3-bwr #Versión 3 de la pantalla E-Paper de 7.5″ (B), soporta renderizado B/W/R.
cs_pin:
number: GPIO15
ignore_strapping_warning: True
dc_pin: GPIO27
busy_pin:
number: GPIO25
inverted: true
reset_pin: GPIO26
lambda: |-
En esta placa, GPIO15 es un pin de arranque. Estos pines son leídos por el chip durante un reinicio para configurar su funcionamiento inicial, como habilitar el modo de arranque (flasheo) o establecer el voltaje de operación. Al agregar ignore_strapping_warning: true, le estoy diciendo a ESPHome que ignore la advertencia.
Además, el pin Busy en los modelos 7.30in-f, 7.50inV2 y V3 de Waveshare debe estar invertido para evitar daños permanentes en la pantalla. ¡No olvides establecer este parámetro, de lo contrario podrías experimentar problemas y causar daños en la pantalla!
Definiendo Colores
El siguiente paso es definir colores en la configuración de ESPHome. Estos deben tener un ID único, que será llamado en la función lambda para renderizar componentes en la pantalla. Puedes definirlos en HEX o RGB. Para mi pantalla tri-color en particular:
yaml
color:
- id: color_black
red: 100%
green: 100%
blue: 100%
white: 100% - id: color_red
red: 100%
green: 0%
blue: 0%
white: 0%
Notarás que el color de fondo, que es blanco, no está definido. Esto se debe a que no es necesario definirlo y usarlo, ya que la pantalla llena todo con blanco cuando no se establece un color en la lambda.
Agregando Fuentes
El siguiente paso es agregar algunas fuentes que ESPHome pueda usar para renderizar texto y datos de sensores en la pantalla. ESPHome tiene un Componente de Renderizado de Fuentes muy capaz y versátil, que permite usar múltiples fuentes de una variedad de fuentes. Incluso puedes cargarlas y alojarlas localmente. Por ejemplo:
yaml
font:
- file:
type: gfonts
family: Source Code Pro
weight: 700
id: font_roboto
size: 26 - file: "gfonts://Roboto"
id: roboto_20
size: 20
Agregando Íconos
Si estás buscando crear un tablero de control rico con íconos de diseño de material, la forma más simple es agregar y definir cada ícono manualmente como una imagen. Necesitas definir el tipo, que puede ser binario, escala de grises, rgb o rgb565 y establecer un tamaño de ícono. La desventaja de este enfoque es que no puedes cambiar el color y el tamaño en la lambda, lo que significa que necesitarías agregar el mismo ícono varias veces si pretendes usarlo en un color o dimensión diferentes. Por ejemplo:
yaml
image:
- file: mdi:alert-outline
type: binary
id: alert
resize: 80×80
…..