Integrar CrowPanel E-paper 2.13″ en HA

Integrar CrowPanel E-paper 2.13″ en HA

Hoy vamos a integrar CrowPanel E-paper 2.13″ en HA, una pantalla de tinta electrónica de pequeñas dimensiones.

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:

*Algún precio puede haber cambiado desde la ultima revision

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:

  1. Conecta la pantalla a tu ordenador a través del puerto USB-C.
  2. 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”).
  3. 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.
  4. Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
  5. 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!!");
  1. 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.
  2. Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
  3. Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
  4. Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7. De nuevo, pulsa en “Install”.
  5. 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.
  6. 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);