ESP32Display is a low-power, always-visible office dashboard built with an ESP32-WROOM-32, a Waveshare 4.2-inch 400×300 e-paper display, ESPHome, and Home Assistant sensors.
It was mostly inspired by the excellent e-paper display projects shared in the Home Assistant community:
Home Assistant Community — E-paper display thread
- Display: Waveshare 4.2-inch raw e-paper panel, 400×300 resolution
- Controller: ESP32-WROOM-32 Lua development board
- Firmware: ESPHome with custom display rendering in YAML/C++ lambdas
- Data source: Home Assistant sensors, binary sensors, weather entities, and template sensors
- Use case: Office weather, environment, motion/door/window, power, uptime, and network status display
- Case: 3D printed enclosure based on Thingiverse model 4772071
The layout is rendered directly in ESPHome using the Waveshare e-paper display component, Google Sans fonts, and Material Design Icons.
Depending on the YAML version and the Home Assistant entities available in your setup, the dashboard can show:
- Current time, full date, and Turkish day name
- Sunrise and sunset times
- Moon phase icon
- Current weather condition icon
- Outside temperature, forecast low/high, precipitation, wind speed, and pressure
- 3-day forecast with day names, icons, temperature, wind, and precipitation values
- Office, kitchen, and outside temperature/humidity values
- Motion, door, and window sensor states with last-change times
- Air freshener and printer/toner percentage values
- Power consumption
- ESP32 uptime
- Download speed and Wi-Fi signal indicator
- Optional mouse battery and door-lock information in the newer YAML version
Home Assistant sensors/templates
│
▼
ESPHome homeassistant sensors/text_sensors
│
▼
ESP32-WROOM-32
│ SPI + control pins
▼
Waveshare 4.2" e-paper display
The configuration.yaml file contains Home Assistant template sensors for date formatting, forecast values, sunrise/sunset, last-change times, and uptime formatting. The ESPHome YAML files consume those entities through homeassistant sensors and draw the screen using custom display lambda code.
- Waveshare 4.2-inch, 400×300 raw e-paper display
- Waveshare Universal e-Paper Raw Panel Driver HAT
- ESP32-WROOM-32 Lua development board
- 3D printed case
Thingiverse model
- Home Assistant
- ESPHome
- Waveshare e-paper display support in ESPHome
- Home Assistant template sensors for date, forecast, uptime, and last-change information
- Custom fonts and Material Design Icons included in this repository
.
├── README.md
├── configuration.yaml
├── esp32display.yaml
├── esp32displaynewversion28112024.yaml
├── fonts/
│ ├── Google_Sans_Bold.ttf
│ ├── Google_Sans_Medium.ttf
│ └── materialdesignicons-webfont.ttf
├── images/
│ ├── IMG_0275.JPG
│ ├── IMG_0276.JPG
│ ├── IMG_0280.JPG
│ ├── IMG_0304.JPG
│ ├── IMG_0305.JPG
│ ├── IMG_0309.JPG
│ ├── IMG_0310.JPG
│ ├── IMG_0314.JPG
│ ├── IMG_0316.JPG
│ └── IMG_0317.JPG
└── secrets.yaml
esp32display.yaml— original ESPHome configuration for the ESP32 e-paper dashboard.esp32displaynewversion28112024.yaml— newer ESPHome configuration version dated 28.11.2024, with updated entities, newer OTA syntax, and additional mouse/lock information.configuration.yaml— Home Assistant template sensors used by the display, including date, forecast, sunrise/sunset, motion times, and uptime formatting.fonts/— Google Sans and Material Design Icons font files used by the display layout.images/— build photos and size-comparison photos.secrets.yaml— example secret placeholders for Wi-Fi and ESPHome passwords.
The ESPHome configuration defines the e-paper SPI and control pins through substitutions:
substitutions:
devicename: ESP32Display
gpio_spi_clk_pin: GPIO25
gpio_spi_mosi_pin: GPIO26
gpio_cs_pin: GPIO32
gpio_busy_pin: GPIO13
gpio_reset_pin: GPIO14
gpio_dc_pin: GPIO27The SPI bus is configured as:
spi:
clk_pin: $gpio_spi_clk_pin
mosi_pin: $gpio_spi_mosi_pin
id: epaper_displayAnd the Waveshare display component uses:
display:
- platform: waveshare_epaper
id: epaper
cs_pin: $gpio_cs_pin
busy_pin: $gpio_busy_pin
reset_pin: $gpio_reset_pin
dc_pin: $gpio_dc_pin
model: 4.20inThe original YAML refreshes every 60s; the newer YAML refreshes every 30s.
Most values shown on the display come from Home Assistant entities. The ESPHome YAML files pull those values using homeassistant sensors and text sensors.
Examples include:
- Weather entities and forecast template sensors
- Temperature and humidity sensors
- Motion, door, and window binary sensors
- Printer/toner and air freshener percentage sensors
- Speedtest/download sensor
- Power consumption sensor
- Sun, moon, date/time, and uptime template sensors
- Optional mouse battery and smart-lock entities in the newer YAML version
The included configuration.yaml contains template sensors such as:
sensor.turkishdaynamesensor.fulldatesensor.day_1_*,sensor.day_2_*,sensor.day_3_*sensor.sun_rising_templatesensor.sun_setting_template- Last-change time sensors for motion, doors, and windows
sensor.esp32display_uptime_template
Before using this project in another Home Assistant setup, review and update the entity IDs in the YAML files.
You will likely need to customize:
- Wi-Fi secrets
- ESPHome OTA password
- Fallback hotspot password
- Timezone
- Weather entity
- Temperature/humidity sensor entity IDs
- Motion, door, and window entity IDs
- Printer, air freshener, power, speedtest, mouse, lock, and other optional sensor entity IDs
- Display labels if you want to use different room names or another language
- Font paths if your ESPHome directory layout is different
The display code uses fonts from this repository:
fonts/Google_Sans_Bold.ttf
fonts/Google_Sans_Medium.ttf
fonts/materialdesignicons-webfont.ttf
Make sure these files are available in your ESPHome project directory when compiling/flashing.
There are two ESPHome YAML files in this repository:
esp32display.yaml— earlier/original configuration using the original weather/entity references and60supdate interval.esp32displaynewversion28112024.yaml— newer version dated 28.11.2024, with updated entity references, newer ESPHome OTA platform syntax,30supdate interval, and additional mouse/door-lock display fields.
- Inspired by the Home Assistant community e-paper display projects:
https://community.home-assistant.io/t/e-paper-display/ - 3D printed case model:
https://www.thingiverse.com/thing:4772071 - Built with ESPHome, Home Assistant, ESP32, and Waveshare e-paper hardware.
This is a personal DIY project shared as a reference for similar Home Assistant e-paper dashboards. The configuration is specific to the original office setup, so entity IDs, secrets, sensors, fonts, and layout details will need to be adjusted for your own installation.