Hoy vamos a integrar CrowPanel E-paper 2.13″ en HA, una pantalla de tinta electrónica de pequeñas dimensiones.
Índice
Otra pantalla de tinta electrónica
No es ningún secreto que me gustan mucho las pantallas de tinta electrónica. Además de las ventajas que tienen en cuanto a su bajo consumo energético, su estética imitando el papel impreso creo que le da un toque especial a tus proyectos.
Sin embargo no hay mucha información sobre cómo integrarlas en Home Assistant y ESPHome, a excepción de unos pocos modelos. Hace poco conseguimos integrar la CrowPanel ESP32 4.2” E-paper «engañando» un poco a ESPHome, así que he vuelto a probar suerte con un modelo más pequeño.
Esta vez hemos conseguido integrar la CrowPanel ESP32 2.13″ E-Paper de Elecrow, una pantalla de 2,13 pulgadas (122×250 pixels). Se trata de una pantalla con todos los componentes presoldados sobre una placa ESP32-S3 (por lo que es perfecta para usarla con proyectos como Bermuda). Además incorpora un puerto para conectarle una batería y controles físicos.

Como pasaba con el modelo anterior, a día de hoy, no tiene soporte oficial con ESPHome. La técnica para integrar CrowPanel E-paper 2.13″ en HA ha sido la misma que ya utilizamos, estudiar el diagrama de componentes del dispositivo y utilizar el componente de Waveshare E-Paper Display.
Requisitos previos
Para integrar CrowPanel E-paper 2.13″ en HA previamente necesitas:
- Una pantalla CrowPanel ESP32 2.13” E-paper.
- Un cable USB-C para alimentar la placa de DATOS (con un cable de carga no vas a poder instalar el software).
- Haber instalado ESPHome en Home Assistant.
Configuración de ESPHome
Ahora tenemos que ‘flashear’ la pantala con ESPHome y la configuración correspondiente, que vamos a extraer directamente de la documentación sobre el componente Waveshare E-Paper Display. Para ello sigue estos pasos:
- Conecta la pantalla a tu ordenador a través del puerto USB-C.
- En Home Assistant, accede al complemento de ESPHome desde el menú lateral y pulsa en “New device”. Pulsa en “Continue” y dale un nombre (por ejemplo, “ePaperDisplay”).
- Pulsa en “Next” y a continuación selecciona la opción “ESP32-S3” como tipo de dispositivo. Verás que en el fondo se ha creado un nuevo dispositivo.
- Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
- Añade las siguientes líneas al final del código.
font:
- file: "gfonts://Space Grotesk"
id: font1
size: 20
output:
- platform: gpio
pin: 7
id: pin_7
inverted: false
spi:
clk_pin: GPIO12
mosi_pin: GPIO11
switch:
- platform: output
name: "Pin 7 High"
output: pin_7
restore_mode: ALWAYS_ON
display:
- platform: waveshare_epaper
cs_pin: GPIO14
dc_pin: GPIO13
busy_pin: GPIO9
reset_pin: GPIO10
model: 2.13in-ttgo-b74
rotation: 90
full_update_every: 1
reset_duration: 10ms
update_interval: 60s
lambda: |-
it.fill(Color::BLACK);
it.print(5, 5, id(font1), "Hola Aguacateros!!");
- Cuando hayas terminado de editar el código pulsa en “Save” e “Install”. Selecciona la opción “Manual download” y espera a que el código se compile.
- Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
- Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
- Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7. De nuevo, pulsa en “Install”.
- Vuelve a Home Assistant y ve a Configuración > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”. De lo contrario pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’. Como siempre, te recomiendo que asignes una IP fija en tu router para evitar fallos en el futuro si esta cambia.
- Tras esperar unos segundos deberías ver el siguiente mensaje en pantalla. A partir de aquí, los resultados dependen de tu creatividad!

Código del Triforce
Si acabas de integrar CrowPanel E-paper 2.13″ en HA, necesitas un poco de inspiración y, como a mi, te gustan los dispositivos «retro», aquí te dejo un ejemplo. Se trata de un soporte y un simple panel que he creado, inspirado en la Triforce de la saga Zelda, para mostrar algunos sensores de mi panel.

A continuación te dejo el código completo para que lo adaptes como quieras, así como el enlace al soporte que he diseñado.
substitutions:
# Device customization
# Personalización del dispositivo
name: epaperdisplay213
friendly_name: ePaperDisplay213
# Entities / Entidades
sensor_temperature: sensor.openweathermap_temperature
sensor_home_temperature: sensor.home_temperatura
sensor_home_humidity: sensor.home_humedad
# Other settings / Otros ajustes
allowed_characters: " ¿?¡!#%'()+,-./:°0123456789ABCDEFGHIJKLMNOPQRSTUVWYZabcdefghijklmnopqrstuvwxyzáéíóú"
################################################################################################################
esphome:
name: ${name}
friendly_name: ${friendly_name}
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "3rwfe23w3U+Ga1zf1hhkYwNP391idscxds44rc="
ota:
- platform: esphome
password: "easdasdsade50f0651f459b456rfd354907"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Crowpanel-Epaper-213"
password: "zasdJV5P678"
captive_portal:
font:
- file: "gfonts://Kanit"
id: font_data
size: 17
image:
- file: mdi:weather-partly-cloudy
id: icon_temperature
resize: 25x25
type: BINARY
transparency: chroma_key
- file: mdi:home-thermometer
id: icon_home_temperature
resize: 25x25
type: BINARY
transparency: chroma_key
- file: mdi:water-percent
id: icon_humidity
resize: 25x25
type: BINARY
transparency: chroma_key
- file: https://aguacatec.es/wp-content/uploads/2025/07/zelda.jpg
id: zelda
resize: 150x150
type: binary
output:
- platform: gpio
pin: 7
id: pin_7
inverted: false
sensor:
- platform: homeassistant
id: sensor_temperature
entity_id: ${sensor_temperature}
internal: true
- platform: homeassistant
id: sensor_home_temperature
entity_id: ${sensor_home_temperature}
internal: true
- platform: homeassistant
id: sensor_home_humidity
entity_id: ${sensor_home_humidity}
internal: true
spi:
clk_pin: GPIO12
mosi_pin: GPIO11
switch:
- platform: output
name: "Pin 7 High"
output: pin_7
restore_mode: ALWAYS_ON
time:
- platform: homeassistant
id: esptime
display:
- platform: waveshare_epaper
cs_pin: GPIO14
dc_pin: GPIO13
busy_pin: GPIO9
reset_pin: GPIO10
model: 2.13in-ttgo-b74
rotation: 90
full_update_every: 1
reset_duration: 10ms
update_interval: 60s
lambda: |-
it.image(5, 5, id(zelda));
it.strftime(245, 5, id(font_data), TextAlign::TOP_RIGHT, "%d/%m/%y", id(esptime).now());
it.image(170, 40, id(icon_temperature));
it.printf(205, 42, id(font_data), "%.0f°C", id(sensor_temperature).state);
it.image(170, 65, id(icon_home_temperature));
it.printf(205, 67, id(font_data), "%.0f°C", id(sensor_home_temperature).state);
it.image(170, 90, id(icon_humidity));
it.printf(205, 92, id(font_data), "%.0f%%", id(sensor_home_humidity).state);

