This is one of my latest projects. I wanted a way to control all of my HA devices without needing to go to the web interface. I stumbled on HASP (HomeAssistantSwitchPanel). This is the main project that most of the people use. In my case, i use the hasp-lvgl. This is a fork of the original HASP project but is standing fully on it's own. It does has some nice extra features in it. The biggest reason i went for LVGL is the abbility to use much cheaper displays. Also you have more options to decide what kind of screen you want to use.
On page 1 i can control the led lighting in my room and i can see the temperature and humidity.
On page 2 i can control the main lights in my room.
On page 3 i can see the weather statistics of my living room.
Page 4 is to enable or disable the darkmode theme.
You also have a Page 0, this page you need to have for navigation buttons.
For the hardware i'm using an ESP32 TTGO T7 board to drive a TFT Screen. First i used a Wemos D1 mini but that didn't worked that smooth. When pressing a button, the color change was rather slow. When switched to the ESP32 it was smootyh as butter. Because i'm made a desk version, i wanted to have a battery in it so i could place it everywhere in the house to control my lights etc. It's a regular 18650 LI-ion battery with a simple charger board attached to it. The case i designed myself and is available on Thingiverse.
Here a little preview of the case with the screen installed and a look on the inside.
For the software part you have 2 things you need to have. First you need to have a MQTT server where the esp can talk to. Second you need a config file (.JSONL) to code what needs to be on the screen/pages. All the automations you can do with the yaml automations from HomeAssistant or you can use NodeRed like i did.
I do warn you, the NodeRed flow is very big in a short period of time ;-). I can tell you how everything works but there is a guide that explains it much better then me.
I also made a little LoveLace card that displays the current battery percentage and displays if the device is connected to the MQTT server or not:
The battery sensor is not part of the original hasp-lvgl project. I added the reading myself in the sourcecode and build the right version for my board. I also made an auto discovery function so it auto detects the battery sensor in Home Assistant.
Feel free to use my case and/or config file for your build.
Oh and don't forget to show it also, i'm very curious how you would do it.