Livro de Receitas ESPHome: XIAO ePaper Driver Boards (EE0x)
Esta página é o livro de receitas ESPHome da placa driver EE0x — aplicável a EE02 / EE03 / EE04 / EE05. Como todas as quatro placas compartilham a mesma base XIAO ESP32-S3 e a mesma interface ePaper conectada por SPI, o fluxo de trabalho é idêntico; a única coisa que muda entre elas é o modelo de tela que você seleciona no bloco YAML display:.
Exemplo prático: EE04 com a tela mono de 7,5" 800×480. Substitua o seu próprio par placa + tela na linha display.model e o restante da configuração se aplica como está.
O boilerplate compartilhado — escolher um caminho de gravação, o esqueleto YAML genérico, conectar ao Home Assistant — está em Trabalhar com ESPHome. Dê uma olhada nisso primeiro se você é novo em ESPHome no ePaper da Seeed.
O que é ESPHome?
ESPHome é um framework de firmware de código aberto que simplifica o processo de criação de firmware personalizado para microcontroladores populares habilitados para WiFi. Com o ESPHome, você pode:
- Criar dispositivos de casa inteligente personalizados usando arquivos de configuração YAML simples
- Integrar-se perfeitamente com o Home Assistant para uma experiência de casa inteligente unificada
- Controlar e monitorar seus dispositivos por meio de múltiplas interfaces (web, API, MQTT)
- Automatizar sua casa com automações poderosas no próprio dispositivo
- Atualizar seus dispositivos sem fio com atualizações “Over The Air” (OTA) sem acesso físico
Primeiros Passos
Visão geral do hardware
| Placa de Display XIAO ePaper (ESP32-S3) - EE04 | Home Assistant Green |
|---|---|
![]() | ![]() |
Home Assistant Green é a maneira mais fácil e com maior foco em privacidade de automatizar sua casa. Ele oferece uma configuração sem esforço e permite que você controle todos os dispositivos inteligentes com apenas um sistema, onde todos os dados são armazenados localmente por padrão. Esta placa se beneficia do próspero ecossistema do Home Assistant e será aprimorada todos os meses pelo código aberto.
Também escrevemos como instalar o Home Assistant para alguns produtos da Seeed Studio, consulte-os.
- Primeiros Passos com Home Assistant no ODYSSEY-X86
- Primeiros Passos com Home Assistant no LinkStar H68K/reRouter CM4
Se você não estiver usando um produto Seeed Studio, também pode verificar e aprender como instalar o Home Assistant para outros produtos no site oficial do Home Assistant.
Etapa 1. Instalar ESPHome
Vá para Settings -> Add-ons -> ADD-ON STORE

Digite o termo de pesquisa ESPHome.

Clique em INSTALL e START.

Se você não conseguir encontrar o ESPHome na loja de complementos, certifique-se de estar usando uma instalação do Home Assistant que ofereça suporte a complementos (como Home Assistant OS ou instalações supervisionadas). Para outros tipos de instalação (como Home Assistant Container), talvez seja necessário executar o ESPHome Device Builder de forma independente usando Docker. Consulte a documentação oficial do ESPHome para mais detalhes.
Etapa 2. Adicionar um novo dispositivo
Vá para ESPHome e clique em NEW DEVICE.

Dê à Placa de Display XIAO ePaper (ESP32-S3) - EE04 um nome que você goste e selecione ESP32-S3 para o tipo de chip, depois clique em SKIP.


Depois de criar um novo dispositivo, clique em EDIT.

Etapa 3. Instalar o firmware
Este é um exemplo básico e mostrará "Hello World!" no display.
O principal objetivo é mostrar a você diferentes maneiras de instalar firmware no dispositivo.
Você pode usar este exemplo copiando o código abaixo e colando-o após a linha de código captive_portal no seu arquivo YAML.
- Como a rotina a seguir requer fontes antes de baixar o firmware, clique neste link para concluir a configuração.
ssid:,password:Aqui você precisa adicionar o nome e a senha da rede.- As Quadruple Color 2.13 e Quadruple Color 2.9 usam bibliotecas externas, portanto os nomes de
boardusados no ESPHome são diferentes.
A seguir estão os tipos de tela com conector de 24 pinos:
- 1.54 Inch Monochrome Color
- 2.13 Inch Monochrome Color
- 2.13 Inch Quadruple Color
- 2.9 Inch Monochrome Color
- 2.9 Inch Quadruple Color
- 4.2 Inch Monochrome Color
- 5.83 Inc Monochrome Color
- 7.5 Inch Monochrome Color
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
# define font to display words
font:
- file: "gfonts://Inter@700"
id: myFont
size: 24
captive_portal:
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 1.54inv2
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.print(0, 0, id(myFont), "Hello World!");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
# define font to display words
font:
- file: "gfonts://Inter@700"
id: myFont
size: 24
captive_portal:
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.13inv2 #More models you can refer to here: https://esphome.io/components/display/waveshare_epaper/
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.print(0, 0, id(myFont), "Hello World!");
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
font:
- file: "gfonts://Inter@700"
id: font1
size: 24
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey0213f51
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
const auto BLACK = Color(0, 0, 0, 0);
const auto RED = Color(255, 0, 0, 0);
const auto YELLOW = Color(255, 255, 0, 0);
const auto WHITE = Color(255, 255, 255, 0);
it.fill(YELLOW);
it.print(0, 0, id(font1), BLACK, "Hello World in BLACK!");
it.print(0, 30, id(font1), RED, "Hello World in RED!");
it.print(0, 60, id(font1), YELLOW, "Hello World in YELLOW!");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
# define font to display words
font:
- file: "gfonts://Inter@700"
id: myFont
size: 24
captive_portal:
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.90inv2
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.print(0, 0, id(myFont), "Hello World!");
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
# external_components:
# - source:
# type: local
# path: components_epaper
# components : [waveshare_epaper]
font:
- file: "gfonts://Inter@700"
id: font1
size: 24
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey029f51h
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
const auto BLACK = Color(0, 0, 0, 0);
const auto RED = Color(255, 0, 0, 0);
const auto YELLOW = Color(255, 255, 0, 0);
const auto WHITE = Color(255, 255, 255, 0);
it.print(0, 0, id(font1), BLACK, "Hello World in BLACK!");
it.print(0, 30, id(font1), RED, "Hello World in RED!");
it.print(0, 60, id(font1), YELLOW, "Hello World in YELLOW!");
ESP_LOGD("epaper", "reflash......");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
# define font to display words
font:
- file: "gfonts://Inter@700"
id: myFont
size: 24
captive_portal:
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey042t81
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.print(0, 0, id(myFont), "Hello World!");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
# define font to display words
font:
- file: "gfonts://Inter@700"
id: myFont
size: 24
captive_portal:
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey0583t81
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.print(0, 0, id(myFont), "Hello World!");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
# define font to display words
font:
- file: "gfonts://Inter@700"
id: myFont
size: 24
captive_portal:
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 7.50inv2
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.print(0, 0, id(myFont), "Hello World!");
Os seguintes são tipos de tela com conector de 50 pinos:
- 7.3 Inch spectra™ 6
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
font:
- file: "gfonts://Inter@700"
id: font1
size: 24
captive_portal:
external_components:
- source:
type: git
url: https://github.com/esphome/esphome/
ref: 2025.10.5
components: [ epaper_spi, display ]
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: epaper_spi
id: my_display
model: 7.3in-Spectra-E6
cs_pin: GPIO44
dc_pin:
number: GPIO10
inverted: false
busy_pin:
number: GPIO4
inverted: true
reset_pin: GPIO38
rotation: 0
update_interval: 30s
lambda: |-
const auto BLACK = Color(0, 0, 0, 0);
const auto RED = Color(255, 0, 0, 0);
const auto BLUE = Color(0, 0, 255, 0);
const auto GREEN = Color(0, 255, 0, 0);
const auto YELLOW = Color(255, 255, 0, 0);
const auto WHITE = Color(255, 255, 255, 0);
it.fill(WHITE);
it.print(0, 0, id(font1), BLACK, "Hello World in BLACK!");
it.print(0, 30, id(font1), RED, "Hello World in RED!");
it.print(0, 60, id(font1), YELLOW, "Hello World in YELLOW!");
it.print(0, 90, id(font1), GREEN, "Hello World in GREEN!");
it.print(0, 120, id(font1), BLUE, "Hello World in BLUE!");
Clique em INSTALL para instalar o código no dispositivo e você verá a seguinte imagem.

- Install through browser
- Install through host
- Install through Wi-Fi
Se o seu Host do Home Assistant (Raspberry PI/Green/Yellow etc.) estiver longe de você, recomendamos usar este método. Você pode instalar com o computador que tiver em mãos.
Primeiro, você precisa clicar em Manual download para baixar o firmware compilado.

Abra este site onde faremos o upload do firmware para o painel ePaper.

Volte para o ESPHome para baixar o firmware.

Selecione Factory format.

Use USB cable to connect the ePaper panel to your computer and click CONNECT.

Selecione usbmodemxxx (no Windows é COMxxx) e clique em connect.

Clique em INSTALL e selecione o firmware que você acabou de baixar.

Aguarde um momento e você verá “Hello world!” no display ~

Se o seu Home Assistant Host (Raspberry PI/Green/Yellow etc.) estiver por perto, recomendamos usar este método, pois é mais simples.
Antes de instalar o código no dispositivo, você precisa usar um cabo USB para conectar este dispositivo ao seu Raspberry Pi ou HA Green(Yellow) etc. que está executando o Home Assistant.
Clique nas opções seguindo a imagem para instalar o código no dispositivo.


Aguarde um momento e você verá o retorno como na imagem a seguir. Isso significa que o código está sendo executado com sucesso.

Esta é a maneira mais simples, mas com a premissa de que, ao instalar o programa pela primeira vez, você deve primeiro enviar o programa para o ePaper Panel usando o método à esquerda. Depois disso, você pode enviá-lo via Wi-Fi. Além disso, certifique-se de que sua configuração YAML inclua seções ota e api devidamente configuradas com chaves de criptografia válidas para que este método funcione.
Dessa forma, você não precisa conectar o painel ePaper a nada, apenas certifique-se de que ele esteja online.
Clique na opção e então o firmware será instalado automaticamente no painel ePaper.


Noções básicas para desenhar no ESPHome
Desenhando gráficos simples
Este exemplo de código YAML configura a interface SPI e a XIAO ePaper Display Board(ESP32-S3) - EE04 para um projeto ESPHome. A seção lambda contém comandos de desenho que renderizam formas simples na tela:
- Dois retângulos (um na posição (10, 10) com tamanho 100x50, e outro em (150, 10) com tamanho 50x50)
- Um círculo em (250, 35) com raio de 25
- Dois retângulos preenchidos (em (10, 80) e (150, 80))
- Um círculo preenchido em (250, 105) com raio de 25
Você pode usar este exemplo copiando o código abaixo e colando-o após a linha de código captive_portal no seu arquivo YAML.
- 1.54 Polegada Monocromático
- 2.13 Polegadas Quatro Cores
- 2.13 Polegadas Monocromático
- 2.9 Polegadas Quatro Cores
- 2.9 Polegadas Monocromático
- 4.2 Inch Monochrome Color
- 5.83 Inch Monochrome Color
- 7.5 Inch Monochrome Color
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 1.54inv2
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.rectangle(10, 10, 100, 50);
it.rectangle(150, 10, 50, 50);
it.circle(250, 35, 25);
it.filled_rectangle(10, 80, 100, 50);
it.filled_rectangle(150, 80, 50, 50);
it.filled_circle(250, 105, 25);
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
font:
- file: "gfonts://Inter@700"
id: font1
size: 24
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey0213f51
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
const auto BLACK = Color(0, 0, 0, 0);
const auto RED = Color(255, 0, 0, 0);
const auto YELLOW = Color(255, 255, 0, 0);
const auto WHITE = Color(255, 255, 255, 0);
it.rectangle(10, 10, 100, 50,YELLOW);
it.rectangle(150, 10, 50, 50,YELLOW);
it.circle(250, 35, 25,YELLOW);
it.filled_rectangle(10, 80, 100, 50,YELLOW);
it.filled_rectangle(150, 80, 50, 50,YELLOW);
it.filled_circle(250, 105, 25,YELLOW);
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.13inv2 #More models you can refer to here: https://esphome.io/components/display/waveshare_epaper/
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.rectangle(10, 10, 100, 50);
it.rectangle(150, 10, 50, 50);
it.circle(250, 35, 25);
it.filled_rectangle(10, 80, 100, 50);
it.filled_rectangle(150, 80, 50, 50);
it.filled_circle(250, 105, 25);
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey029f51h
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
const auto BLACK = Color(0, 0, 0, 0);
const auto RED = Color(255, 0, 0, 0);
const auto YELLOW = Color(255, 255, 0, 0);
const auto WHITE = Color(255, 255, 255, 0);
it.rectangle(10, 10, 100, 50,YELLOW);
it.rectangle(150, 10, 50, 50,YELLOW);
it.circle(250, 35, 25,YELLOW);
it.filled_rectangle(10, 80, 100, 50,YELLOW);
it.filled_rectangle(150, 80, 50, 50,YELLOW);
it.filled_circle(250, 105, 25,YELLOW);
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.90inv2
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.rectangle(10, 10, 100, 50);
it.rectangle(150, 10, 50, 50);
it.circle(250, 35, 25);
it.filled_rectangle(10, 80, 100, 50);
it.filled_rectangle(150, 80, 50, 50);
it.filled_circle(250, 105, 25);
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey042t81
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.rectangle(10, 10, 100, 50);
it.rectangle(150, 10, 50, 50);
it.circle(250, 35, 25);
it.filled_rectangle(10, 80, 100, 50);
it.filled_rectangle(150, 80, 50, 50);
it.filled_circle(250, 105, 25);
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey0583t81
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.rectangle(10, 10, 100, 50);
it.rectangle(150, 10, 50, 50);
it.circle(250, 35, 25);
it.filled_rectangle(10, 80, 100, 50);
it.filled_rectangle(150, 80, 50, 50);
it.filled_circle(250, 105, 25);
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 7.50inv2
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 0
update_interval: 300s
lambda: |-
it.rectangle(10, 10, 100, 50);
it.rectangle(150, 10, 50, 50);
it.circle(250, 35, 25);
it.filled_rectangle(10, 80, 100, 50);
it.filled_rectangle(150, 80, 50, 50);
it.filled_circle(250, 105, 25);
- 7.3 Inch spectra™ 6
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
external_components:
- source:
type: git
url: https://github.com/esphome/esphome/
ref: 2025.10.5
components: [ epaper_spi, display ]
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: epaper_spi
id: my_display
model: 7.3in-Spectra-E6
cs_pin: GPIO44
dc_pin:
number: GPIO10
inverted: false
busy_pin:
number: GPIO4
inverted: true
reset_pin: GPIO38
rotation: 0
update_interval: 30s
lambda: |-
const auto BLACK = Color(0, 0, 0, 0);
const auto RED = Color(255, 0, 0, 0);
const auto BLUE = Color(0, 0, 255, 0);
const auto GREEN = Color(0, 255, 0, 0);
const auto YELLOW = Color(255, 255, 0, 0);
const auto WHITE = Color(255, 255, 255, 0);
it.rectangle(10, 10, 100, 50,BLACK);
it.rectangle(150, 10, 50, 50,RED);
it.circle(250, 35, 25,BLUE);
it.filled_rectangle(10, 80, 100, 50,GREEN);
it.filled_rectangle(150, 80, 50, 50,YELLOW);
it.filled_circle(250, 105, 25,WHITE);
Quando você vir o feedback como na imagem a seguir, isso significa que o código está sendo executado com sucesso.

Devido a limitações de espaço, não vamos detalhar muito os métodos de desenho e os princípios de outros padrões; se necessário, recomenda-se que o leitor leia ESPHome nesta parte dos exemplos detalhados.
Desenhando fontes TrueType
Este exemplo demonstra como exibir ícones personalizados na sua XIAO ePaper Display Board(ESP32-S3) - EE04 usando fontes TrueType. Os Material Design Icons fornecem uma ampla variedade de símbolos escaláveis perfeitos para telas de ePaper.
Instalando as ferramentas necessárias
Passo 1. Primeiro, precisamos instalar o add-on Studio Code Server para gerenciar arquivos. Navegue até a loja de Add-ons do Home Assistant, procure por Studio Code Server e clique nele.

Passo 2. Clique em INSTALL e aguarde a conclusão da instalação. Depois de instalado, clique em START para iniciar o editor.

Configurando fontes de ícones
Passo 3. Crie uma nova pasta chamada fonts no diretório de configuração do seu ESPHome. Esta pasta armazenará os arquivos de fonte TrueType necessários para exibir ícones.

Passo 4. Baixe o arquivo de fonte Material Design Icons clicando no botão abaixo e extraia o conteúdo.
Passo 5. Envie o arquivo de fonte baixado (materialdesignicons-webfont.ttf) para a pasta fonts que você criou anteriormente.

Configurando o ESPHome para ícones
Passo 6. Adicione o seguinte código ao arquivo de configuração do ESPHome após a seção captive_portal. Este código define dois tamanhos de fonte para ícones e configura o display para mostrar ícones de clima.
- 1.54 Inch Monochrome Color
- 2.13 Inch Quadruple Color
- 2.13 Inch Monochrome Color
- 2.9 Inch Quadruple Color
- 2.9 Inch Monochrome Color
- 4.2 Inch Monochrome Color
- 5.83 Inch Monochrome Color
- 7.5 Inch Monochrome Color
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 1.54inv2
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey0213f51
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.13inv2 #More models you can refer to here: https://esphome.io/components/display/waveshare_epaper/
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
# external_components:
# - source:
# type: local
# path: components_epaper
# components : [waveshare_epaper]
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey029f51h
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.90inv2
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey042t81
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey0583t81
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 7.50inv2
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
- 7.3 Inch spectra™ 6
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
external_components:
- source:
type: git
url: https://github.com/esphome/esphome/
ref: 2025.10.5
components: [ epaper_spi, display ]
# define font to display words
font:
- file: 'fonts/materialdesignicons-webfont.ttf' # Path to the font file
id: font_mdi_large
size: 200 # Large icon size
glyphs: &mdi-weather-glyphs
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- file: 'fonts/materialdesignicons-webfont.ttf'
id: font_mdi_medium # Medium icon size
size: 40
glyphs: *mdi-weather-glyphs
# define SPI interface
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: epaper_spi
id: my_display
model: 7.3in-Spectra-E6
cs_pin: GPIO44
dc_pin:
number: GPIO10
inverted: false
busy_pin:
number: GPIO4
inverted: true
reset_pin: GPIO38
rotation: 0
update_interval: 30s
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0595");
it.printf(400, 200, id(font_mdi_large), TextAlign::CENTER, "\U000F0592");
-
A seção
glyphsdefine quais ícones serão carregados do arquivo de fonte. Carregar apenas os ícones necessários economiza memória no seu dispositivo. -
O programa pode levar de 2 a 3 minutos desde a conclusão da gravação até a exibição final.
Etapa 7. Salve sua configuração e envie-a para sua XIAO ePaper Display Board(ESP32-S3) - EE04. Quando você vir um retorno como na imagem a seguir, isso significa que o código está sendo executado com sucesso.

Personalizando com ícones diferentes
A biblioteca Material Design Icons contém milhares de ícones que você pode usar em seus projetos. Veja como encontrar e usar ícones diferentes:
Etapa 1. Visite o site do Material Design Icons clicando no botão abaixo.
Etapa 2. Procure um ícone que você queira usar em seu projeto. Você pode navegar por categoria ou usar a função de busca.

Etapa 3. Quando encontrar um ícone de que goste, clique nele para ver os detalhes. Procure o valor Unicode, que estará no formato F0595.
Etapa 4. Adicione o valor Unicode à sua configuração ESPHome:
- Adicionando-o à lista
glyphsna sua configuração de fonte - Atualizando o código de exibição para usar o novo ícone
Por exemplo, para usar um novo ícone com Unicode F0123:
glyphs:
- "\U000F0595" # weather-cloudy icon
- "\U000F0592" # weather-hail icon
- "\U000F0123" # your new icon
E no lambda de exibição:
lambda: |-
it.printf(100, 200, id(font_mdi_medium), TextAlign::CENTER, "\U000F0123");
Etapa 5. Salve sua configuração atualizada e envie-a para o seu dispositivo para ver o novo ícone.
Para painéis de clima, considere usar ícones como F0590 (ensolarado), F0591 (parcialmente nublado), F0593 (chuvoso) e F059E (ventoso).
Combinando esses ícones com os dados de clima do Home Assistant que configuramos anteriormente, você pode criar um visor de clima dinâmico que mostra as condições atuais usando ícones apropriados.
Exibindo imagens personalizadas
Este exemplo demonstra como exibir imagens personalizadas na sua XIAO ePaper Display Board(ESP32-S3) - EE04. Você pode usar esse recurso para mostrar logotipos, ícones ou quaisquer gráficos que melhorem a experiência do seu painel.
Preparação
Etapa 1. Certifique-se de que o add-on Studio Code Server esteja instalado no Home Assistant. Se você ainda não o instalou, siga as instruções do exemplo anterior.
Etapa 2. Crie uma nova pasta chamada image no diretório de configuração do ESPHome. Essa pasta armazenará os arquivos de imagem que você deseja exibir.
config/
└── esphome/
├── your_device.yaml
└── image/ <- Create this folder
Adicionando imagens
Etapa 3. Baixe uma imagem de exemplo para testar a funcionalidade. Você pode usar o ícone de WiFi fornecido abaixo ou usar sua própria imagem.
Etapa 4. Envie a imagem baixada para a pasta image que você criou anteriormente usando o gerenciador de arquivos do Studio Code Server.

Para melhores resultados em telas ePaper, use imagens de alto contraste com áreas claramente em preto e branco. Os formatos JPG e PNG são ambos suportados.
Configurando o ESPHome para exibição de imagens
Etapa 5. Adicione o seguinte código ao seu arquivo de configuração ESPHome após a seção captive_portal. Esse código define o recurso de imagem e configura a tela para exibi-lo.
- 1.54 Inch Monochrome Color
- 2.13 Inch Monochrome Color
- 2.13 Inch Quadruple Color
- 2.9 Inch Quadruple Color
- 2.9 Inch Monochrome Color
- 4.2 Inch Monochrome Color
- 5.83 Inch Monochrome Color
- 7.5 Inch Monochrome Color
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 1.54inv2
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.13inv2 #More models you can refer to here: https://esphome.io/components/display/waveshare_epaper/
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
captive_portal:
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey0213f51
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
libraries:
- SPI
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "eg2Jyse0gE146lJ2mVaqAnwteb4U2GJ7d1sZc2BOOsc="
ota:
- platform: esphome
password: "e2f184b95aac832509885f676abf5b73"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ESPHome_Epaper"
password: "123456789"
external_components:
- source: github://xcjk-tofuture/esphome@dev
components: [ waveshare_epaper ]
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: my_display
model: gdey029f51h
cs_pin: GPIO44
dc_pin: GPIO10
busy_pin: GPIO4
reset_pin: GPIO38
rotation: 90
update_interval: 30s
full_update_every: 1
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 2.90inv2
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey042t81
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: gdey0583t81
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: waveshare_epaper
id: epaper_display
model: 7.50inv2
cs_pin: GPIO44
dc_pin: GPIO10
reset_pin:
number: GPIO38
inverted: false
busy_pin:
number: GPIO4
inverted: true
update_interval: 300s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
- 7.3 Inch spectra™ 6
esphome:
name: ee04
friendly_name: EE04
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "b0AIbJ+kbeMayi1PgSGXtiD1yQCapUBF4A/7v7btys0="
ota:
- platform: esphome
password: "5d7cca6f4b3f38aba559ab0d6aaf5926"
wifi:
ssid:
password:
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Ee04 Fallback Hotspot"
password: "zxPMBtCEWonm"
captive_portal:
external_components:
- source:
type: git
url: https://github.com/esphome/esphome/
ref: 2025.10.5
components: [ epaper_spi, display ]
image:
- file: /config/esphome/image/wifi.jpg # Path to your image file (JPG or PNG)
id: myImage
type: BINARY # Binary mode works best for e-paper
resize: 800x480 # Resize to match display resolution
invert_alpha: true # Invert colors if needed
spi:
clk_pin: GPIO7
mosi_pin: GPIO9
display:
- platform: epaper_spi
id: my_display
model: 7.3in-Spectra-E6
cs_pin: GPIO44
dc_pin:
number: GPIO10
inverted: false
busy_pin:
number: GPIO4
inverted: true
reset_pin: GPIO38
rotation: 0
update_interval: 30s
lambda: |-
it.image(0, 0, id(myImage)); # Display image at position (0,0)
Etapa 6. Salve sua configuração e faça o upload para sua XIAO ePaper Display Board(ESP32-S3) - EE04. Quando a atualização for concluída, o display de ePaper exibirá a imagem.

Técnicas Avançadas de Imagem
Você pode aprimorar a exibição de imagens com estas técnicas adicionais:
Posicionando imagens
Para posicionar sua imagem em coordenadas específicas na tela:
lambda: |-
// Display image at position (100,50)
it.image(100, 50, id(myImage));
Combinando imagens com texto
Você pode exibir imagens e texto na mesma tela:
lambda: |-
// Display image
it.image(0, 0, id(myImage));
// Add text below or beside the image
it.printf(400, 400, id(myFont), TextAlign::CENTER, "WiFi Connected");
Usando múltiplas imagens
Para exibir múltiplas imagens na mesma tela, defina cada imagem na sua configuração:
image:
- file: /config/esphome/image/wifi.jpg
id: wifiImage
type: BINARY
resize: 200x200
- file: /config/esphome/image/temperature.png
id: tempImage
type: BINARY
resize: 200x200
# In the display lambda:
lambda: |-
it.image(50, 50, id(wifiImage));
it.image(300, 50, id(tempImage));
Lembre-se de que os displays de ePaper têm taxas de atualização limitadas. A configuração update_interval: 300s significa que seu display será atualizado apenas a cada 5 minutos. Ajuste esse valor de acordo com suas necessidades, mas esteja ciente de que atualizações frequentes podem reduzir a vida útil dos displays de ePaper.
Ao combinar imagens com texto e outros elementos de exibição abordados em exemplos anteriores, você pode criar dashboards ricos e informativos na sua XIAO ePaper Display Board(ESP32-S3) - EE04.
Referência e Recursos
Suporte Técnico e Discussão de Produtos
Obrigado por escolher nossos produtos! Estamos aqui para fornecer diferentes tipos de suporte para garantir que sua experiência com nossos produtos seja a mais tranquila possível. Oferecemos vários canais de comunicação para atender a diferentes preferências e necessidades.

