Wand-Dashboard für 20 €: Home Assistant Touch-Panel mit dem Cheap Yellow Display (ESPHome-Guide 2026)

20. September 2026

Ein Touch-Panel an der Wand, das Licht schaltet, die Temperatur zeigt und dein Home Assistant steuert – für 15–22 €. Klingt nach Bastel-Wochenende? Ist es nicht: Das Cheap Yellow Display (CYD) ist ein fertiges Board mit ESP32, 2,8-Zoll-Touchscreen und USB-Anschluss. Kein Löten, kein Verkabeln. Du flashst einmal ESPHome drauf, kopierst meine Konfiguration, trägst deine Entitäten ein – fertig.

In diesem Guide bauen wir Schritt für Schritt ein Wand-Dashboard mit Uhr, Temperatur, zwei Lichtschaltern und „Alles aus“, das sich nachts automatisch dimmt. Die Konfiguration ist auf dem aktuellen ESPHome getestet (2026.6) – inklusive der Stolperfallen, die seit ESPHome 2026.4 viele Anleitungen im Netz kaputt gemacht haben.

Was du brauchst

  • ESP32-2432S028R „Cheap Yellow Display“ – 2,8″, 320×240, resistiver Touch. Bei Amazon ca. 20–22 € (schnell da), bei AliExpress ab ca. 12 € (2–3 Wochen). Achte beim Kauf auf genau diese Bezeichnung.
  • USB-Netzteil 5 V / 1 A + Micro-USB-Kabel (bei der neuen Revision auch USB-C). Ein altes Handy-Netzteil reicht.
  • Home Assistant mit dem ESPHome Device Builder (Add-on) – oder ESPHome auf einem anderen Rechner.
  • Einen Rechner mit Chrome oder Edge zum ersten Flashen per USB.
  • Optional: ein 3D-gedrucktes Gehäuse (Tisch, Wand oder Unterputz – dazu unten mehr).
Das Board für diesen Guide

Das ESP32-2432S028R – ESP32, 2,8″-Touchscreen, Lichtsensor, RGB-LED und microSD auf einer Platine. Genau das Board, für das die Konfiguration unten geschrieben ist. Achte auf die Modellnummer; die 3,5″-Variante hat andere Pins.

* Affiliate-Link · Preis kann abweichen
Welche Version? Es gibt zwei Revisionen: die klassische mit einem Micro-USB-Port und eine neuere mit zwei Ports (Micro-USB + USB-C). Beide funktionieren mit diesem Guide. Bei manchen Zwei-Port-Boards sitzt ein anderer Display-Controller (ST7789 statt ILI9341) – falls dein Bild nach dem Flashen verzerrt ist, steht die Lösung unten bei „Fehlerbehebung“.

Schritt 1: ESPHome vorbereiten

  1. In Home Assistant: Einstellungen → Add-ons → Add-on Store → „ESPHome Device Builder“ installieren und starten (Haken bei „In der Seitenleiste anzeigen“).
  2. ESPHome öffnen → „+ New Device“ → Name wanddisplay → Gerätetyp ESP32 → Anlegen. Ein Basisgerät wird erstellt.
  3. Falls noch nicht vorhanden: In ESPHome oben rechts über das Menü „Secrets“ öffnen und deine WLAN-Daten eintragen:
wifi_ssid: "DeinWLAN"
wifi_password: "DeinPasswort"

Schritt 2: Die Konfiguration

Öffne das neue Gerät in ESPHome mit „Edit“, lösche den gesamten Inhalt und füge diese Konfiguration ein. Anpassen musst du nur den Block substitutions ganz oben – deine Entitäten und Beschriftungen. Alles andere kann bleiben.

substitutions:
  name: wanddisplay
  friendly_name: Wand-Dashboard
  # ---- Hier deine Entitäten eintragen ----
  licht_1: light.wohnzimmer
  licht_1_name: "Wohnzimmer"
  licht_2: light.kueche
  licht_2_name: "Küche"
  temp_sensor: sensor.wohnzimmer_temperatur
  alles_aus: script.alles_aus

esphome:
  name: ${name}
  friendly_name: ${friendly_name}

esp32:
  board: esp32dev
  framework:
    type: arduino

logger:

api:

ota:
  - platform: esphome

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  ap:
    ssid: "${friendly_name} Setup"

captive_portal:

time:
  - platform: homeassistant
    id: ha_time
    on_time_sync:
      - script.execute: update_time

# ---- Zwei SPI-Busse: Display und Touch ----
spi:
  - id: lcd
    clk_pin: GPIO14
    mosi_pin: GPIO13
  - id: touch_bus
    clk_pin: GPIO25
    mosi_pin: GPIO32
    miso_pin: GPIO39

# ---- Hintergrundbeleuchtung + RGB-LED ----
output:
  - platform: ledc
    pin: GPIO21
    id: backlight_pwm
  - platform: ledc
    pin: GPIO4
    id: led_red
    inverted: true
  - platform: ledc
    pin: GPIO16
    id: led_green
    inverted: true
  - platform: ledc
    pin: GPIO17
    id: led_blue
    inverted: true

light:
  - platform: monochromatic
    output: backlight_pwm
    id: backlight
    name: "Display-Helligkeit"
    restore_mode: ALWAYS_ON
  - platform: rgb
    name: "Status-LED"
    id: status_led
    red: led_red
    green: led_green
    blue: led_blue
    restore_mode: ALWAYS_OFF

# ---- Sensoren ----
sensor:
  # Lichtsensor auf der Platine: dimmt das Display nachts
  - platform: adc
    pin: GPIO34
    id: ldr
    name: "Umgebungslicht"
    attenuation: 12db
    update_interval: 10s
    filters:
      - sliding_window_moving_average:
          window_size: 3
          send_every: 1
    on_value:
      then:
        - light.turn_on:
            id: backlight
            brightness: !lambda |-
              // Schwelle an dein Board anpassen: Im Log (Sensor "Umgebungslicht")
              // den Wert bei Dunkelheit und bei Licht notieren. Je nach Revision
              // steigt ODER faellt die Spannung bei Dunkelheit - dann "<" statt ">".
              return x > 2.6 ? 0.25 : 1.0;
  # Temperatur aus Home Assistant
  - platform: homeassistant
    id: temp
    entity_id: ${temp_sensor}
    on_value:
      then:
        - lvgl.label.update:
            id: lbl_temp
            text: !lambda 'return str_sprintf("%.1f °C", x);'

# ---- Lichtzustand aus Home Assistant spiegeln ----
binary_sensor:
  - platform: homeassistant
    id: licht_1_state
    entity_id: ${licht_1}
    on_state:
      then:
        - lvgl.widget.update:
            id: btn_licht_1
            state:
              checked: !lambda 'return x;'
  - platform: homeassistant
    id: licht_2_state
    entity_id: ${licht_2}
    on_state:
      then:
        - lvgl.widget.update:
            id: btn_licht_2
            state:
              checked: !lambda 'return x;'

script:
  - id: update_time
    then:
      - lvgl.label.update:
          id: lbl_time
          text: !lambda |-
            auto t = id(ha_time).now();
            if (!t.is_valid()) return std::string("--:--");
            return t.strftime("%H:%M");

interval:
  - interval: 30s
    then:
      - script.execute: update_time

# ---- Touch ----
touchscreen:
  platform: xpt2046
  id: ts_touch
  spi_id: touch_bus
  cs_pin: 33
  interrupt_pin: 36
  update_interval: 50ms
  threshold: 400
  calibration:
    x_min: 280
    x_max: 3860
    y_min: 340
    y_max: 3860
  transform:
    swap_xy: false
    mirror_x: true
    mirror_y: false

# ---- Display (ESPHome 2026.4+: mipi_spi, Drehung macht LVGL) ----
display:
  - platform: mipi_spi
    id: my_display
    spi_id: lcd
    model: ILI9341
    cs_pin: 15
    dc_pin: 2
    invert_colors: false
    update_interval: never
    auto_clear_enabled: false
    dimensions:
      width: 240
      height: 320

# ---- Oberfläche ----
lvgl:
  displays:
    - my_display
  touchscreens:
    - touchscreen_id: ts_touch
  rotation: 90
  theme:
    label:
      text_color: 0xE6EDF3
    button:
      bg_color: 0x12171F
      border_color: 0x242E3A
      border_width: 1
      radius: 14
      text_color: 0xE6EDF3
      checked:
        bg_color: 0x22D3EE
        text_color: 0x05141A
  pages:
    - id: main
      bg_color: 0x0A0E14
      widgets:
        - label:
            id: lbl_time
            align: TOP_LEFT
            x: 14
            y: 12
            text_font: montserrat_28
            text: "--:--"
        - label:
            id: lbl_temp
            align: TOP_RIGHT
            x: -14
            y: 16
            text_font: montserrat_20
            text_color: 0x22D3EE
            text: "-- °C"
        - button:
            id: btn_licht_1
            align: BOTTOM_LEFT
            x: 14
            y: -64
            width: 140
            height: 64
            checkable: true
            widgets:
              - label:
                  align: CENTER
                  text: "${licht_1_name}"
            on_click:
              - homeassistant.action:
                  action: light.toggle
                  data:
                    entity_id: ${licht_1}
        - button:
            id: btn_licht_2
            align: BOTTOM_RIGHT
            x: -14
            y: -64
            width: 140
            height: 64
            checkable: true
            widgets:
              - label:
                  align: CENTER
                  text: "${licht_2_name}"
            on_click:
              - homeassistant.action:
                  action: light.toggle
                  data:
                    entity_id: ${licht_2}
        - button:
            align: BOTTOM_MID
            y: -8
            width: 292
            height: 44
            widgets:
              - label:
                  align: CENTER
                  text: "Alles aus"
            on_click:
              - homeassistant.action:
                  action: script.turn_on
                  data:
                    entity_id: ${alles_aus}

Was passiert hier? Zwei SPI-Busse (Display und Touch sind getrennt verdrahtet), die Hintergrundbeleuchtung hängt an GPIO21 und wird über den Lichtsensor (GPIO34) automatisch gedimmt (Schwelle einmal ans eigene Board anpassen, siehe Fehlerbehebung), die RGB-LED ist als Licht in Home Assistant verfügbar (für Statusanzeigen). Die Oberfläche macht LVGL: Uhr oben links, Temperatur oben rechts, zwei Lichtbuttons, die ihren Zustand live aus Home Assistant spiegeln, und ein Sammelbutton. Alle Tastendrücke rufen direkt Home-Assistant-Aktionen auf – ohne eine einzige Automation.

Schritt 3: Flashen

  1. CYD per USB an den Rechner anschließen, an dem du ESPHome im Browser (Chrome/Edge) geöffnet hast. Windows-Nutzer: Falls kein COM-Port auftaucht, den CH340-Treiber installieren.
  2. In ESPHome beim Gerät auf „Install“„Plug into this computer“ → den seriellen Port auswählen. ESPHome kompiliert (beim ersten Mal 3–8 Minuten) und flasht.
  3. Danach startet das Board neu, verbindet sich mit deinem WLAN und Home Assistant meldet unter Einstellungen → Geräte & Dienste ein neues ESPHome-Gerät zum Hinzufügen. Alle weiteren Updates laufen ab jetzt drahtlos (OTA).

Schritt 4: Aktionen erlauben (wichtig!)

Standardmäßig darf ein ESPHome-Gerät in Home Assistant nichts schalten. Ohne diesen Haken reagieren die Buttons nicht:

  1. Einstellungen → Geräte & Dienste → ESPHome
  2. Bei „Wand-Dashboard“ auf „Konfigurieren“
  3. Haken bei „Dem Gerät erlauben, Home-Assistant-Aktionen auszuführen“ setzen

Schritt 5: Anpassen

Alles Wichtige steht im substitutions-Block. Willst du mehr, sind das die typischen Erweiterungen:

  • Andere Gerätetypen: Statt light.toggle geht jede Aktion – switch.toggle für Steckdosen, cover.toggle für Rollläden, scene.turn_on für Szenen. Beim Zustand-Spiegeln dann den passenden binary_sensor bzw. die Entität anpassen.
  • Mehr Buttons: Einen button-Block kopieren, id, Position (align/x/y) und Entität ändern. Bei mehr als vier Buttons lohnt eine zweite Seite (pages) mit Wischgeste – das zeige ich in einem Folge-Guide.
  • Icons statt Text: LVGL kann Material-Design-Icons als Schrift einbinden (materialdesignicons-webfont.ttf in den ESPHome-Ordner legen und als font mit den gewünschten Glyphen laden). Für den Start reicht Text.
  • Display nachts ganz aus: Im on_value des Lichtsensors brightness: 0.0 statt 0.25 – Touch weckt es dann nicht automatisch; dafür einen on_touch im touchscreen-Block mit light.turn_on ergänzen.

Gehäuse & Montage

Nackt sieht das Board nach Bastelkeller aus. Auf MakerWorld gibt es ein hervorragendes CC0-Gehäuse (also frei nutzbar) genau für dieses Board – mit Tischständer, Wandhalter, Unter-Tisch-Halter und Unterputz-Rahmen für die 68er-Dose, jeweils mit Schwenkgelenk und versteckter Kabelführung: Home Assistant Desk Mount CYD (akuehlewind). Druckzeit ca. 3,5 h mit dem „Optimized“-Profil.

Vorsicht beim Stromanschluss: Wer das Board im Gehäuse über die kleinen JST-Stecker versorgt (statt per USB), muss den Stecker mit VIN/5V nehmen. Auf der Platine gibt es baugleiche Stecker mit 3,3 V – 5 V dort zerstören das Board. Im Zweifel: USB nutzen.

Für die Wandmontage neben einem Lichtschalter ist der Unterputz-Rahmen die eleganteste Lösung; das USB-Netzteil verschwindet dann in einer tiefen Dose (Elektronikdose, ≥ 40 mm). 230 V bleibt Sache des Elektrikers.

Stromversorgung

Ein einfaches 5-V-USB-Netzteil reicht – das Display zieht unter 1 W. Für den Unterputz-Einbau nimmst du ein möglichst flaches Netzteil, das in die tiefe Dose passt, oder ein 5-V-Hutschienen-/Einbau-Netzteil vom Elektriker.

* Affiliate-Link · Preis kann abweichen

Fehlerbehebung

  • Weißer Bildschirm, aber Gerät ist online: Du nutzt eine alte Anleitung mit platform: ili9xxx auf ESPHome 2026.4 oder neuer – dieser Treiber wurde durch mipi_spi ersetzt. Meine Konfiguration oben ist bereits richtig. Umgekehrt: Auf ESPHome vor 2026.4 gibt es mipi_spi noch nicht – dann platform: ili9xxx, color_palette: 8BIT und beim lcd-SPI zusätzlich miso_pin: GPIO12, sowie rotation: 90 aus dem lvgl-Block entfernen und stattdessen im display ein transform: swap_xy: true mit dimensions: 320×240 setzen. Oder einfach ESPHome aktualisieren.
  • Verzerrte Farben, Streifen, Pixelsalat: Anderer Display-Controller. Im display-Block model: ST7789V (oder ILI9342) probieren – mehr als das eine Wort ändert sich nicht.
  • Touch trifft daneben oder ist gespiegelt: Im touchscreen-Block mirror_x/mirror_y/swap_xy variieren. Wenn es nur um wenige Millimeter geht, die calibration-Werte anpassen: Die Rohwerte siehst du im ESPHome-Log, wenn du die Ecken antippst.
  • Bild steht auf dem Kopf: rotation: 90 im lvgl-Block auf 270 ändern (USB-Buchse dann auf der anderen Seite).
  • Buttons tun nichts: Schritt 4 vergessen – „Home-Assistant-Aktionen erlauben“.
  • Uhr zeigt „–:–„: Zeit kommt aus Home Assistant; kurz nach dem Start dauert der Abgleich ein paar Sekunden. Bleibt es leer, ist die API-Verbindung nicht da (Gerät in HA hinzugefügt?).
  • Kein COM-Port beim Flashen: CH340-Treiber (Windows) oder ein anderes USB-Kabel – viele Ladekabel haben keine Datenleitungen.
  • Display dimmt am Tag oder bleibt nachts hell: Der Lichtsensor ist je nach Board-Revision unterschiedlich beschaltet. Hand über den Sensor (kleines Bauteil neben dem Display) und im ESPHome-Log den Wert von Umgebungslicht vergleichen: Liegt der Wert bei Dunkelheit höher, passt x > 2.6 – liegt er niedriger, drehe den Vergleich auf x < 0.8 (Zahl aus dem Log). Die Schwelle in die Mitte zwischen beide Messwerte legen.

Häufige Fragen

Geht das auch mit dem 3,5″-Modell (ESP32-3248S035)? Ja, aber mit anderen Pins und anderem Controller (ST7796). Die Struktur bleibt gleich, die Werte nicht – das wird ein eigener Guide.

Kapazitiver Touch? Das Standard-CYD hat resistiven Touch (drücken statt streicheln). Die „C“-Varianten mit kapazitivem Touch brauchen einen anderen Touch-Block (gt911 über I²C).

Kann das Display Kameras oder Grafiken zeigen? Bilder und Icons ja (LVGL image-Widget), Video-Streams nein – dafür ist der ESP32 zu schwach.

Wie viel Strom zieht das? Etwa 0,6 W bei voller Helligkeit, gedimmt unter 0,4 W – rund 1,50 € im Jahr.

Fazit

Für rund 20 € und eine halbe Stunde bekommst du ein Touch-Panel, das genau das tut, was du brauchst – ohne App, ohne Cloud, ohne Abo. Die Konfiguration oben ist die Basis; von hier aus wächst das Ding mit dir: mehr Buttons, Icons, zweite Seite, Rollläden, Szenen. Und mit dem Unterputz-Rahmen sieht es aus, als hätte es der Elektriker eingebaut.

Wer noch ganz am Anfang steht: Mein Home-Assistant-Starter-Guide bringt dich bis zur ersten Automation. Und wenn du dein ganzes Haus planen willst, hilft der neue Smart-Home-Planer – Raum für Raum mit Geräteliste und Preisen.

Das könnte dich auch interessieren