MaxGramser/homeassistant_espscreen

Beautiful, incredibly easy touch screens for Home Assistant on cheap ESP32 panels, 2.8 to 10.1 inch (CYD, Guition, Waveshare): drag-and-drop editor, no YAML, no flashing, no MQTT.

Python

300

250 commits

updated Sep 22, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

A Cheap and Easy Control Screen for Home Assistant

https://github.com/MaxGramser/homeassistant_espscreen

0

Sep 22, 2026

README

Home Assistant ESP Screens

Thank you! I work on this project with a lot of love, and every bit of support helps. I truly love the Home Assistant community.

Buy me a coffee

The Guition 4-inch screen on a table: the second page with scenes and scripts, the robot vacuum and a table lamp with a brightness slider The vacuum card on the Guition: docked and charging, start cleaning and dock, the cleaning mode, suction and water

A touch screen for every room that you lay out yourself, and manage from Home Assistant. Incredibly easy to set up and to use.

Why. Your phone is in the other room and a tablet on the wall is expensive. A small ESP32 touch panel costs a fraction of that, sits on a table or in a wall box, and is always at hand for the lights, the heating or the vacuum.

What. Firmware for affordable panels, five of them today, from the 2.8-inch CYD to the 10.1-inch Guition, with tiles over up to eight pages, as many per page as the glass holds: lights, climate, blinds and curtains, the vacuum, media, the weather, history graphs, clocks and timers, and on every screen but the CYD your cameras. A tile can take the whole page, one big switch you push without looking, and a tile can go to another page. An automation can put an alert on every screen when someone rings the bell, and a screen with room for pictures shows who is there with the doorbell camera's picture. A tap can run any action Home Assistant has for a tile, and Dark mode suits a screen beside the bed.

How. ESP Screen Manager is an app inside Home Assistant. It flashes a new screen over USB, updates it over Wi-Fi and sends it your tiles. Changing a screen is pick, drag and Save & send: no reflash, no YAML to write, no blueprint, MQTT or token. Brightness, night hours and Dark mode can also be changed on the screen or by an automation, and your own YAML for one screen survives every update.

Install it · Full reference · What's new

In real life

A Guition in the living room, 37 seconds in one take: tapping tiles, swiping through the pages, opening cards and a history graph, while the lamp behind it goes from purple to orange.

https://github.com/user-attachments/assets/f9f6a933-d388-4c8b-9c9a-011dfa37617b

The Guition on a wooden sideboard beside a glowing purple lamp: the living room page with the airco, an analog clock with the date, two scenes and a dimmer at 36 percent The same screen showing a temperature history over 24 hours, with its highest and lowest point marked and the 1 hour, 24 hours and 1 week keys The light card of the purple lamp: the colour slider at 304 degrees, the brightness slider at 20 percent and the effects key at the top right

Real photos, not renders: the 4-inch Guition next to the lamp it controls.

Five screens supported, 2.8 to 10.1 inch

One home, five panels. A screen is built for the glass it runs on: it measures its own canvas at boot and gives a page the cells that board has, six tiles on the 2.8-inch CYD and twenty on the 10.1-inch Guition, while a tile stays about the same size in millimetres. The same tiles, the same cards, the same editor; the bigger the glass, the more of your home fits on one page.

The five supported screens side by side on one scale, each showing a page of the same home: the small 2.8-inch CYD, the square 4-inch Guition, the wide 4.3-inch Waveshare, the 7-inch Waveshare and the large 10.1-inch Guition

To scale, each with the page it fills: the same home on the 2.8-inch CYD, the 4-inch Guition, the 4.3-inch and 7-inch Waveshare, and the 10.1-inch Guition. Rendered from the firmware's own code, one board at a time.

The kitchen page on the 2.8-inch CYD: the weather with five days, a pasta timer, the coffee machine, the kitchen lamp and the power usage The living room page on the 4-inch Guition: an analog clock with the date, a temperature graph, the weather, the table lamp and Sam at home The hallway page on the 4.3-inch Waveshare: a clock, a wide temperature graph, the weather, Sam, the heating with minus and plus, and the table lamp

The bedroom page on the 7-inch Waveshare: sixteen cells with a clock, a wide temperature graph, the weather, the heating, the ceiling light and Sonos with sliders, the energy graph, the robot and a good-night script The study page on the 10.1-inch Guition: twenty cells with a clock, graphs, the weather, the heating, the ceiling light, a timer, Sonos, the curtains, the power usage, the robot, the coffee machine and a good-night script

Two of the same screens built standing up, to scale: the 10.1-inch Guition as a kitchen wall panel with twenty tiles over four columns, and the 7-inch Waveshare by the front door with fourteen tiles in two columns

The same home standing up. Which way a screen hangs is chosen when it is built, and every board that is not square hangs either way, with a grid of its own: the 10.1-inch Guition 4 × 5 instead of 5 × 4, the 7-inch Waveshare 2 × 7 instead of 4 × 4. Which board is which, and what to look for when you buy one: Which screen.

On the screen

Guition 4-inch screen: an analog clock with the date, a temperature graph, the weather forecast, a lamp and presence Double-width tiles with direct control: the heating setpoint, a dimmer and the Sonos volume An energy graph, the robot vacuum, a coffee machine, a fan and a good-night script with pastel backgrounds

A full-page tile: one big amber light switch that fills the screen, so you push anywhere without looking Navigation tiles: Heating, Blinds and Weather each open their own page, next to a person and a lamp A full-page heating tile: the room temperature big in the middle, the mode keys at the bottom

Weather card: current weather, the coming hours and the coming days with chance of rain Climate card: the target temperature between big minus and plus keys, the mode keys, and fan and swing choices Light control: color, color temperature and brightness

Vacuum card: docked and charging, start and dock, the cleaning mode vacuum, vac and mop or mop, suction and water Cover card for a venetian blind: its battery, the position slider with the blind hanging from the top, the tilt slider over slats, and open, stop and close A finger on the history graph: the top of the card shows the average of that hour and its time, the graph stays as it is

The effects page of a WLED lamp: the effect, colour palette, preset and playlist rows with what they are set to, and the speed and intensity sliders The effect picker: a drum with every effect Home Assistant lists, TV Simulator in the middle, and the check key at the top right that sends it The same effects page on the CYD: four rows and the two sliders in 320 by 240 pixels

The media card on the Guition: the album cover, the title, artist and album, a progress bar with the elapsed and total time, previous, pause and next keys and the volume slider A media player over the whole page: the cover at the left, the track, the bar and the keys beside it, the volume row along the bottom The media card in dark mode: the same cover and keys on a black page

Tap a tile to switch it, hold it for the full card. Keys and sliders right on the tile, pastel colors, a clock, the weather and history you can read with a finger. A lamp with modes (a WLED) gets an effects page with a drum picker, named and filled from what Home Assistant lists for it. The media card shows what plays with its album cover, fetched by ESP Screens like a camera picture, and a media tile can show that cover in the icon's place (how). Rendered from the firmware's own LVGL code with a demo home.

Cameras as tiles on the Guition: the front door camera, the garden camera live, the doorbell's last ring, next to the door, the porch light and the garage door A camera tile tapped: the front door camera full screen, with the round back key and the camera's name at the top The same camera in an alert: its picture across the top of the card, with the card's rounded corners

Cameras are tiles too, not only part of an alert: any camera or snapshot in Home Assistant (a doorbell's last ring, for example) goes on a screen like any other tile. Tap it for the picture full screen, refreshed every four seconds, or let the tile itself show a small live picture in the icon's place (Display → Live picture, every 15 or 30 s); an alert can carry the same picture. Every screen but the CYD, which has no memory for pictures (how it works).

CYD 2.8-inch screen: the weather forecast, a kitchen timer, the coffee machine, a lamp and power usage as a large value Second CYD page: Sonos volume, presence, a scene and an energy graph The weather card on the CYD: current weather, the coming hours and the coming days

The CYD with heating mode keys, playback keys for the radio and a ceiling fan's speed slider The vacuum card on the CYD: state, battery and charging, clean and dock, the cleaning mode, suction and water The history card on the CYD: power over 24 hours with its highest and lowest moment, an axis in watts and clock times

The media card on the CYD: the player's icon where the cover would be, the title, artist and album, the bar with its times, the keys and the volume slider A media player over the whole CYD page: the icon at the left, the track and the keys beside it, the volume row along the bottom The media card on the CYD in dark mode

The same cards on the 2.8-inch CYD, 320 × 240. The CYD has no memory for pictures: its media card shows the player's icon in the cover's place.

Dark mode on the Guition: the same home page with a black page, graphite cards and soft white text, the clock, the temperature graph, the weather, a lamp and presence Dark mode with direct control: the heating setpoint, the dimmer's slider and the Sonos volume keep their colours Dark mode with pastel backgrounds: the coffee machine and the good-night script keep their colour, deeper

Dark mode, for a screen beside the bed: the same pages, darker. It is a switch on the screen, in ESP Screens and in Home Assistant, so an automation can turn it on at bedtime.

The settings page on the Guition, Screen: back to page 1 by itself and after how long, also on standby and swiping between pages, with the page buttons and the rotation on its second page The settings page on the Guition, Brightness: the brightness with minus and plus, Dark mode off, Auto standby on, standby after 10 minutes and the standby brightness The same Brightness page right after turning Dark mode on: a black page with graphite rows and soft white text

Settings on the screen itself: hold the top bar. The same brightness, Dark mode, standby, night hours, clock and rotation as in ESP Screens, and every one of them is an entity in Home Assistant.

Managed from Home Assistant

ESP Screens in Home Assistant: your screens in the sidebar, the pages of the living room screen side by side with their top bar, and the entity library on the right

ESP Screens, a page in Home Assistant: your screens on the left, the pages of the chosen screen in the middle with the values Home Assistant reports right now, the library on the right.

Choosing tiles: the pages of the screen side by side, next to the library with its search and filters Tile settings of the curtains in the drawer: double-width with open, stop and close on the tile, what a tap does, and the pastel background

Search your home, drop a tile on the preview, tap it for its name, width, control and color, and for what a tap does: open its card, switch it, or run any action Home Assistant has for it, such as the curtains to 50 %. Save, and the screen has it. ⌘K searches screens, entities and actions; Identify blinks a screen so you know which one it is.

Add to the top bar, in the drawer: the time, an analog clock, the date, suggestions from your own home and any entity Settings in ESP Screens: New screen and Firmware & USB, the firmware updates, the Alerts cheatsheet, and the Claude skill

A top bar built from your own home, firmware updates over Wi-Fi (every night if you like), and a skill so Claude can rearrange your screens.

The Screen settings tab in ESP Screens: Brightness with Dark mode and standby, Night with its hours and brightness, and Screen with back to page 1, swiping, the page buttons and the rotation

Screen settings apply at once, and a change made on the screen or by an automation shows up here too.

Override YAML for the living room screen: a small file of its own, loaded after the shared package, here with the example that changes the display controller

Other hardware, such as a different display controller? Every screen has an Override YAML of its own, checked by ESPHome before a build and kept through every update.

In your language

A Guition in German: Dienstag 15 Sept. beside the analog clock, Teilweise bewölkt with the days Di Mi Do Fr Sa, the table lamp at 75 % The same screen in French: mardi 15 sept., Éclaircies with the days ma me je ve sa, and Sam is Maison The same screen in Polish: wtorek 15 wrz, częściowe zachmurzenie with the days wt śr cz pt sb, and Sam is w domu

The same home in German, French and Polish. The screens follow your Home Assistant: its language, its words for a light or a robot, and how your country writes a date, a time and a number — 75 % in German and French, 75% in Polish and English.

The screens, the editor and its messages speak English (US and UK), Nederlands, Deutsch, Français, Italiano, Español, Português and Polski. Nothing to set up: ESP Screens takes the language of your Home Assistant.

Language and region in ESP Screens: the screen language set to Home Assistant's language, the time format and the number format, each following the language

Settings → Language & region, when you want something else than Home Assistant's own.

  • The editor follows the language of your Home Assistant profile, so two people in one house each read their own.
  • A screen carries one language, built into its firmware: change it and press Update on the screen (or let the nightly round do it). The clock (24 hours or 12 with AM/PM) and the number format change straight away, on every screen at once.
  • Words from Home Assistant stay Home Assistant's: what a door, an airco or a robot says on a tile and in its card is the word its own dashboard shows, in your language.

Most languages still need someone who speaks them to read the texts through, and a new language is one file. Translating ESP Screens walks through both; a language without a file falls back to English while it keeps your country's clock and numbers.

Alerts

An alert on the Guition with the front door camera's picture across the top: someone is at the door, with a Coming button The front door camera full screen on the Guition, with the round back key and the camera's name at the top

Someone at the door? One event in an automation wakes every screen and shows it. Add the doorbell camera and a Guition shows who is there; tap the picture, or a camera tile, for the camera full screen, refreshed every few seconds. Camera images.

An alert on the Guition: someone is at the door, with a Coming button The Alerts cheatsheet in ESP Screens: the action name of every screen, ready to copy

Any alert, on one screen or all of them, in a pastel color of your choice. How alerts work. An automation can also put a page in front, such as the page with the full-page player when the music starts: Open a page from an automation.

Installing from Home Assistant

Which screen

ScreenResolutionDisplay / touch
CYD ESP32-2432S028320 × 240, 2 × 3 tilesILI9341 / resistive XPT2046
Guition ESP32-S3-4848S040, 4 inch480 × 480, 2 × 3 tilesST7701S RGB / capacitive GT911
Waveshare ESP32-S3-Touch-LCD-4.3800 × 480, 3 × 3 tilesST7262 RGB / capacitive GT911 (backlight always on: no standby, no night)
Waveshare ESP32-S3-Touch-LCD-7 (experimental)800 × 480, 4 × 4 tilesRGB / capacitive GT911; backlight always on, hardware acceptance pending (details)
Guition JC8012P4A1, 10.1 inch1280 × 800, 5 × 4 tilesMIPI-DSI JD9365 / capacitive GSL3680, ESP32-P4 (new)

Use these exact board variants: similar-looking product names can have different controllers or connectors. Wallbox relays are not controlled. ESP Screens builds with its own ESPHome 2026.9.0. The firmware also builds in your own ESPHome Device Builder with ESPHome 2026.6.2 or newer; the 10.1-inch Guition asks for 2026.8.0 or newer, because its touch panel is newer than that.

The 10.1-inch Guition is new in this release and has not yet been through our own acceptance test: its hardware was worked out and flashed on a real panel, and the screens' own software is the same on every board, but the two have not stood on one desk together. Tell us how it goes. It needs a panel with pre-v3 silicon (the boot log says chip revision: v1.3 or another below v3.0), which is what these panels have shipped with so far; rev3 silicon needs a firmware of its own.

Do I need ESPHome?

You don't need to install the separate ESPHome Device Builder app. ESP Screen Manager already includes the ESPHome CLI and can build firmware itself, install it via USB or give you the file to put on the screen from your own computer, and later update it wirelessly over OTA.

You do need to pair the flashed screen via the ESPHome integration in HA. That pairing lives under Settings → Devices & services, not in the App store. Add the discovered device there. If it doesn't appear automatically, choose Add integration → ESPHome and enter the screen's IP address. If asked for a key, use the api.encryption.key from your own device YAML, and grant the device permission to perform Home Assistant actions.

ComponentNeeded?What for?
ESP Screen Manager appYes, for this installation routeInstalling firmware, managing tiles, and sending current data to the screen
ESPHome Device Builder appNo, optionalAlternative editor and firmware installer; the same CLI is already in ESP Screens
ESPHome integration in HAYes, pair every screenThe connection between Home Assistant and the physical screen

So a fresh installation without ESPHome Device Builder also works. If there's no ESPHome secrets.yaml yet, our wizard asks for Wi-Fi once and stores it locally. Existing Wi-Fi secrets are reused. API and OTA keys are generated per new screen and stay in that device's own profile.

Step by step

For Home Assistant Container (Docker) without the App store, follow ESP Screens with Docker.

For Home Assistant OS with Apps/Add-ons on aarch64 or amd64:

  1. Open the App store and add this repository: https://github.com/MaxGramser/homeassistant_espscreen.
  2. Install ESP Screen Manager, start the app, and open ESP Screens. ESPHome Device Builder is optional: the ESPHome CLI is already in this app.
  3. Connect the screen with a USB data cable to the Home Assistant machine and choose New screen in the sidebar: CYD or Guition, a name, the USB port, and Install. If Wi-Fi is missing from the ESPHome secrets.yaml, the window asks for it once and ESP Screens only adds the missing lines. The profile with unique API and OTA keys goes into the ESPHome folder; the build and flash run in the same window (a first build takes a few minutes on a Raspberry Pi). Each screen gets its own profile. Is Home Assistant on a server or in a virtual machine, out of reach of the screen? Choose Download under Install via: ESP Screens builds the firmware, and you put it on the screen from your own computer with ESPHome Web in Chrome or Edge. After that, updates go over Wi-Fi as usual.
  4. CYD: go through the calibration on the screen. Guition: uses GT911 without resistive calibration. Then pair the discovered ESPHome device in Settings → Devices & services using the API key the window shows after installation (copy button). Grant the device permission to perform Home Assistant actions.
  5. Select the screen in ESP Screens, choose your tiles, and click Save & send. Then test the physical controls.

New screen in ESP Screens: choose the board, give it a name, pick the USB port and install Choosing tiles: the pages of the screen side by side, next to the library with its search and filters

New screen (step 3) and choosing your tiles (step 5).

New firmware goes on over Wi-Fi with the Update button of a screen in ESP Screens, or by itself every night if you turn that on under Settings; Firmware & USB → Wi-Fi / OTA in the sidebar installs it by hand. For an existing screen, always use the existing profile; creating a new installation profile generates new keys.

The complete installation guide walks through every step in more detail.

More

Credits and license

The very first version started from Adrian Kuehlewind's ESPHome-touch-display-mount. Little of that code is left, but his repository has 3D-printable desk, under-desk, wall and flush mounts for the CYD.

The front door in the camera pictures is a photo by Virginia Marinova on Unsplash.

ESP Screens is MIT licensed, see LICENSE.

cyd
esp32
esp32-2432s028r
esp32-p4
esp32-s3
esphome
guition
hass-addon
home-assistant
home-automation
iot
lvgl
smart-home
touchscreen
waveshare

Contributors

MaxGramser

250 commits

MaxGramser/homeassistant_espscreen

Beautiful, incredibly easy touch screens for Home Assistant on cheap ESP32 panels, 2.8 to 10.1 inch (CYD, Guition, Waveshare): drag-and-drop editor, no YAML, no flashing, no MQTT.

Python

300

250 commits

updated Sep 22, 2026

See the code

See what people are saying (1)

SourceMessageScoreDate

A Cheap and Easy Control Screen for Home Assistant

https://github.com/MaxGramser/homeassistant_espscreen

0

Sep 22, 2026

README

Home Assistant ESP Screens

Thank you! I work on this project with a lot of love, and every bit of support helps. I truly love the Home Assistant community.

Buy me a coffee

The Guition 4-inch screen on a table: the second page with scenes and scripts, the robot vacuum and a table lamp with a brightness slider The vacuum card on the Guition: docked and charging, start cleaning and dock, the cleaning mode, suction and water

A touch screen for every room that you lay out yourself, and manage from Home Assistant. Incredibly easy to set up and to use.

Why. Your phone is in the other room and a tablet on the wall is expensive. A small ESP32 touch panel costs a fraction of that, sits on a table or in a wall box, and is always at hand for the lights, the heating or the vacuum.

What. Firmware for affordable panels, five of them today, from the 2.8-inch CYD to the 10.1-inch Guition, with tiles over up to eight pages, as many per page as the glass holds: lights, climate, blinds and curtains, the vacuum, media, the weather, history graphs, clocks and timers, and on every screen but the CYD your cameras. A tile can take the whole page, one big switch you push without looking, and a tile can go to another page. An automation can put an alert on every screen when someone rings the bell, and a screen with room for pictures shows who is there with the doorbell camera's picture. A tap can run any action Home Assistant has for a tile, and Dark mode suits a screen beside the bed.

How. ESP Screen Manager is an app inside Home Assistant. It flashes a new screen over USB, updates it over Wi-Fi and sends it your tiles. Changing a screen is pick, drag and Save & send: no reflash, no YAML to write, no blueprint, MQTT or token. Brightness, night hours and Dark mode can also be changed on the screen or by an automation, and your own YAML for one screen survives every update.

Install it · Full reference · What's new

In real life

A Guition in the living room, 37 seconds in one take: tapping tiles, swiping through the pages, opening cards and a history graph, while the lamp behind it goes from purple to orange.

https://github.com/user-attachments/assets/f9f6a933-d388-4c8b-9c9a-011dfa37617b

The Guition on a wooden sideboard beside a glowing purple lamp: the living room page with the airco, an analog clock with the date, two scenes and a dimmer at 36 percent The same screen showing a temperature history over 24 hours, with its highest and lowest point marked and the 1 hour, 24 hours and 1 week keys The light card of the purple lamp: the colour slider at 304 degrees, the brightness slider at 20 percent and the effects key at the top right

Real photos, not renders: the 4-inch Guition next to the lamp it controls.

Five screens supported, 2.8 to 10.1 inch

One home, five panels. A screen is built for the glass it runs on: it measures its own canvas at boot and gives a page the cells that board has, six tiles on the 2.8-inch CYD and twenty on the 10.1-inch Guition, while a tile stays about the same size in millimetres. The same tiles, the same cards, the same editor; the bigger the glass, the more of your home fits on one page.

The five supported screens side by side on one scale, each showing a page of the same home: the small 2.8-inch CYD, the square 4-inch Guition, the wide 4.3-inch Waveshare, the 7-inch Waveshare and the large 10.1-inch Guition

To scale, each with the page it fills: the same home on the 2.8-inch CYD, the 4-inch Guition, the 4.3-inch and 7-inch Waveshare, and the 10.1-inch Guition. Rendered from the firmware's own code, one board at a time.

The kitchen page on the 2.8-inch CYD: the weather with five days, a pasta timer, the coffee machine, the kitchen lamp and the power usage The living room page on the 4-inch Guition: an analog clock with the date, a temperature graph, the weather, the table lamp and Sam at home The hallway page on the 4.3-inch Waveshare: a clock, a wide temperature graph, the weather, Sam, the heating with minus and plus, and the table lamp

The bedroom page on the 7-inch Waveshare: sixteen cells with a clock, a wide temperature graph, the weather, the heating, the ceiling light and Sonos with sliders, the energy graph, the robot and a good-night script The study page on the 10.1-inch Guition: twenty cells with a clock, graphs, the weather, the heating, the ceiling light, a timer, Sonos, the curtains, the power usage, the robot, the coffee machine and a good-night script

Two of the same screens built standing up, to scale: the 10.1-inch Guition as a kitchen wall panel with twenty tiles over four columns, and the 7-inch Waveshare by the front door with fourteen tiles in two columns

The same home standing up. Which way a screen hangs is chosen when it is built, and every board that is not square hangs either way, with a grid of its own: the 10.1-inch Guition 4 × 5 instead of 5 × 4, the 7-inch Waveshare 2 × 7 instead of 4 × 4. Which board is which, and what to look for when you buy one: Which screen.

On the screen

Guition 4-inch screen: an analog clock with the date, a temperature graph, the weather forecast, a lamp and presence Double-width tiles with direct control: the heating setpoint, a dimmer and the Sonos volume An energy graph, the robot vacuum, a coffee machine, a fan and a good-night script with pastel backgrounds

A full-page tile: one big amber light switch that fills the screen, so you push anywhere without looking Navigation tiles: Heating, Blinds and Weather each open their own page, next to a person and a lamp A full-page heating tile: the room temperature big in the middle, the mode keys at the bottom

Weather card: current weather, the coming hours and the coming days with chance of rain Climate card: the target temperature between big minus and plus keys, the mode keys, and fan and swing choices Light control: color, color temperature and brightness

Vacuum card: docked and charging, start and dock, the cleaning mode vacuum, vac and mop or mop, suction and water Cover card for a venetian blind: its battery, the position slider with the blind hanging from the top, the tilt slider over slats, and open, stop and close A finger on the history graph: the top of the card shows the average of that hour and its time, the graph stays as it is

The effects page of a WLED lamp: the effect, colour palette, preset and playlist rows with what they are set to, and the speed and intensity sliders The effect picker: a drum with every effect Home Assistant lists, TV Simulator in the middle, and the check key at the top right that sends it The same effects page on the CYD: four rows and the two sliders in 320 by 240 pixels

The media card on the Guition: the album cover, the title, artist and album, a progress bar with the elapsed and total time, previous, pause and next keys and the volume slider A media player over the whole page: the cover at the left, the track, the bar and the keys beside it, the volume row along the bottom The media card in dark mode: the same cover and keys on a black page

Tap a tile to switch it, hold it for the full card. Keys and sliders right on the tile, pastel colors, a clock, the weather and history you can read with a finger. A lamp with modes (a WLED) gets an effects page with a drum picker, named and filled from what Home Assistant lists for it. The media card shows what plays with its album cover, fetched by ESP Screens like a camera picture, and a media tile can show that cover in the icon's place (how). Rendered from the firmware's own LVGL code with a demo home.

Cameras as tiles on the Guition: the front door camera, the garden camera live, the doorbell's last ring, next to the door, the porch light and the garage door A camera tile tapped: the front door camera full screen, with the round back key and the camera's name at the top The same camera in an alert: its picture across the top of the card, with the card's rounded corners

Cameras are tiles too, not only part of an alert: any camera or snapshot in Home Assistant (a doorbell's last ring, for example) goes on a screen like any other tile. Tap it for the picture full screen, refreshed every four seconds, or let the tile itself show a small live picture in the icon's place (Display → Live picture, every 15 or 30 s); an alert can carry the same picture. Every screen but the CYD, which has no memory for pictures (how it works).

CYD 2.8-inch screen: the weather forecast, a kitchen timer, the coffee machine, a lamp and power usage as a large value Second CYD page: Sonos volume, presence, a scene and an energy graph The weather card on the CYD: current weather, the coming hours and the coming days

The CYD with heating mode keys, playback keys for the radio and a ceiling fan's speed slider The vacuum card on the CYD: state, battery and charging, clean and dock, the cleaning mode, suction and water The history card on the CYD: power over 24 hours with its highest and lowest moment, an axis in watts and clock times

The media card on the CYD: the player's icon where the cover would be, the title, artist and album, the bar with its times, the keys and the volume slider A media player over the whole CYD page: the icon at the left, the track and the keys beside it, the volume row along the bottom The media card on the CYD in dark mode

The same cards on the 2.8-inch CYD, 320 × 240. The CYD has no memory for pictures: its media card shows the player's icon in the cover's place.

Dark mode on the Guition: the same home page with a black page, graphite cards and soft white text, the clock, the temperature graph, the weather, a lamp and presence Dark mode with direct control: the heating setpoint, the dimmer's slider and the Sonos volume keep their colours Dark mode with pastel backgrounds: the coffee machine and the good-night script keep their colour, deeper

Dark mode, for a screen beside the bed: the same pages, darker. It is a switch on the screen, in ESP Screens and in Home Assistant, so an automation can turn it on at bedtime.

The settings page on the Guition, Screen: back to page 1 by itself and after how long, also on standby and swiping between pages, with the page buttons and the rotation on its second page The settings page on the Guition, Brightness: the brightness with minus and plus, Dark mode off, Auto standby on, standby after 10 minutes and the standby brightness The same Brightness page right after turning Dark mode on: a black page with graphite rows and soft white text

Settings on the screen itself: hold the top bar. The same brightness, Dark mode, standby, night hours, clock and rotation as in ESP Screens, and every one of them is an entity in Home Assistant.

Managed from Home Assistant

ESP Screens in Home Assistant: your screens in the sidebar, the pages of the living room screen side by side with their top bar, and the entity library on the right

ESP Screens, a page in Home Assistant: your screens on the left, the pages of the chosen screen in the middle with the values Home Assistant reports right now, the library on the right.

Choosing tiles: the pages of the screen side by side, next to the library with its search and filters Tile settings of the curtains in the drawer: double-width with open, stop and close on the tile, what a tap does, and the pastel background

Search your home, drop a tile on the preview, tap it for its name, width, control and color, and for what a tap does: open its card, switch it, or run any action Home Assistant has for it, such as the curtains to 50 %. Save, and the screen has it. ⌘K searches screens, entities and actions; Identify blinks a screen so you know which one it is.

Add to the top bar, in the drawer: the time, an analog clock, the date, suggestions from your own home and any entity Settings in ESP Screens: New screen and Firmware & USB, the firmware updates, the Alerts cheatsheet, and the Claude skill

A top bar built from your own home, firmware updates over Wi-Fi (every night if you like), and a skill so Claude can rearrange your screens.

The Screen settings tab in ESP Screens: Brightness with Dark mode and standby, Night with its hours and brightness, and Screen with back to page 1, swiping, the page buttons and the rotation

Screen settings apply at once, and a change made on the screen or by an automation shows up here too.

Override YAML for the living room screen: a small file of its own, loaded after the shared package, here with the example that changes the display controller

Other hardware, such as a different display controller? Every screen has an Override YAML of its own, checked by ESPHome before a build and kept through every update.

In your language

A Guition in German: Dienstag 15 Sept. beside the analog clock, Teilweise bewölkt with the days Di Mi Do Fr Sa, the table lamp at 75 % The same screen in French: mardi 15 sept., Éclaircies with the days ma me je ve sa, and Sam is Maison The same screen in Polish: wtorek 15 wrz, częściowe zachmurzenie with the days wt śr cz pt sb, and Sam is w domu

The same home in German, French and Polish. The screens follow your Home Assistant: its language, its words for a light or a robot, and how your country writes a date, a time and a number — 75 % in German and French, 75% in Polish and English.

The screens, the editor and its messages speak English (US and UK), Nederlands, Deutsch, Français, Italiano, Español, Português and Polski. Nothing to set up: ESP Screens takes the language of your Home Assistant.

Language and region in ESP Screens: the screen language set to Home Assistant's language, the time format and the number format, each following the language

Settings → Language & region, when you want something else than Home Assistant's own.

  • The editor follows the language of your Home Assistant profile, so two people in one house each read their own.
  • A screen carries one language, built into its firmware: change it and press Update on the screen (or let the nightly round do it). The clock (24 hours or 12 with AM/PM) and the number format change straight away, on every screen at once.
  • Words from Home Assistant stay Home Assistant's: what a door, an airco or a robot says on a tile and in its card is the word its own dashboard shows, in your language.

Most languages still need someone who speaks them to read the texts through, and a new language is one file. Translating ESP Screens walks through both; a language without a file falls back to English while it keeps your country's clock and numbers.

Alerts

An alert on the Guition with the front door camera's picture across the top: someone is at the door, with a Coming button The front door camera full screen on the Guition, with the round back key and the camera's name at the top

Someone at the door? One event in an automation wakes every screen and shows it. Add the doorbell camera and a Guition shows who is there; tap the picture, or a camera tile, for the camera full screen, refreshed every few seconds. Camera images.

An alert on the Guition: someone is at the door, with a Coming button The Alerts cheatsheet in ESP Screens: the action name of every screen, ready to copy

Any alert, on one screen or all of them, in a pastel color of your choice. How alerts work. An automation can also put a page in front, such as the page with the full-page player when the music starts: Open a page from an automation.

Installing from Home Assistant

Which screen

ScreenResolutionDisplay / touch
CYD ESP32-2432S028320 × 240, 2 × 3 tilesILI9341 / resistive XPT2046
Guition ESP32-S3-4848S040, 4 inch480 × 480, 2 × 3 tilesST7701S RGB / capacitive GT911
Waveshare ESP32-S3-Touch-LCD-4.3800 × 480, 3 × 3 tilesST7262 RGB / capacitive GT911 (backlight always on: no standby, no night)
Waveshare ESP32-S3-Touch-LCD-7 (experimental)800 × 480, 4 × 4 tilesRGB / capacitive GT911; backlight always on, hardware acceptance pending (details)
Guition JC8012P4A1, 10.1 inch1280 × 800, 5 × 4 tilesMIPI-DSI JD9365 / capacitive GSL3680, ESP32-P4 (new)

Use these exact board variants: similar-looking product names can have different controllers or connectors. Wallbox relays are not controlled. ESP Screens builds with its own ESPHome 2026.9.0. The firmware also builds in your own ESPHome Device Builder with ESPHome 2026.6.2 or newer; the 10.1-inch Guition asks for 2026.8.0 or newer, because its touch panel is newer than that.

The 10.1-inch Guition is new in this release and has not yet been through our own acceptance test: its hardware was worked out and flashed on a real panel, and the screens' own software is the same on every board, but the two have not stood on one desk together. Tell us how it goes. It needs a panel with pre-v3 silicon (the boot log says chip revision: v1.3 or another below v3.0), which is what these panels have shipped with so far; rev3 silicon needs a firmware of its own.

Do I need ESPHome?

You don't need to install the separate ESPHome Device Builder app. ESP Screen Manager already includes the ESPHome CLI and can build firmware itself, install it via USB or give you the file to put on the screen from your own computer, and later update it wirelessly over OTA.

You do need to pair the flashed screen via the ESPHome integration in HA. That pairing lives under Settings → Devices & services, not in the App store. Add the discovered device there. If it doesn't appear automatically, choose Add integration → ESPHome and enter the screen's IP address. If asked for a key, use the api.encryption.key from your own device YAML, and grant the device permission to perform Home Assistant actions.

ComponentNeeded?What for?
ESP Screen Manager appYes, for this installation routeInstalling firmware, managing tiles, and sending current data to the screen
ESPHome Device Builder appNo, optionalAlternative editor and firmware installer; the same CLI is already in ESP Screens
ESPHome integration in HAYes, pair every screenThe connection between Home Assistant and the physical screen

So a fresh installation without ESPHome Device Builder also works. If there's no ESPHome secrets.yaml yet, our wizard asks for Wi-Fi once and stores it locally. Existing Wi-Fi secrets are reused. API and OTA keys are generated per new screen and stay in that device's own profile.

Step by step

For Home Assistant Container (Docker) without the App store, follow ESP Screens with Docker.

For Home Assistant OS with Apps/Add-ons on aarch64 or amd64:

  1. Open the App store and add this repository: https://github.com/MaxGramser/homeassistant_espscreen.
  2. Install ESP Screen Manager, start the app, and open ESP Screens. ESPHome Device Builder is optional: the ESPHome CLI is already in this app.
  3. Connect the screen with a USB data cable to the Home Assistant machine and choose New screen in the sidebar: CYD or Guition, a name, the USB port, and Install. If Wi-Fi is missing from the ESPHome secrets.yaml, the window asks for it once and ESP Screens only adds the missing lines. The profile with unique API and OTA keys goes into the ESPHome folder; the build and flash run in the same window (a first build takes a few minutes on a Raspberry Pi). Each screen gets its own profile. Is Home Assistant on a server or in a virtual machine, out of reach of the screen? Choose Download under Install via: ESP Screens builds the firmware, and you put it on the screen from your own computer with ESPHome Web in Chrome or Edge. After that, updates go over Wi-Fi as usual.
  4. CYD: go through the calibration on the screen. Guition: uses GT911 without resistive calibration. Then pair the discovered ESPHome device in Settings → Devices & services using the API key the window shows after installation (copy button). Grant the device permission to perform Home Assistant actions.
  5. Select the screen in ESP Screens, choose your tiles, and click Save & send. Then test the physical controls.

New screen in ESP Screens: choose the board, give it a name, pick the USB port and install Choosing tiles: the pages of the screen side by side, next to the library with its search and filters

New screen (step 3) and choosing your tiles (step 5).

New firmware goes on over Wi-Fi with the Update button of a screen in ESP Screens, or by itself every night if you turn that on under Settings; Firmware & USB → Wi-Fi / OTA in the sidebar installs it by hand. For an existing screen, always use the existing profile; creating a new installation profile generates new keys.

The complete installation guide walks through every step in more detail.

More

Credits and license

The very first version started from Adrian Kuehlewind's ESPHome-touch-display-mount. Little of that code is left, but his repository has 3D-printable desk, under-desk, wall and flush mounts for the CYD.

The front door in the camera pictures is a photo by Virginia Marinova on Unsplash.

ESP Screens is MIT licensed, see LICENSE.

cyd
esp32
esp32-2432s028r
esp32-p4
esp32-s3
esphome
guition
hass-addon
home-assistant
home-automation
iot
lvgl
smart-home
touchscreen
waveshare

Contributors

MaxGramser

250 commits

Languages

Python

48.8%

C++

32.6%

TypeScript

9.0%

Vue

6.8%

CSS

1.9%