Build a Wall-Mounted Dashboard with the ESP32 Cheap Yellow Display (CYD)
The "Cheap Yellow Display (CYD)" is an ESP32-based touchscreen board that's become a favorite in the maker community for a simple reason: for around $10–15, you get an ESP32-WROOM microcontroller, a 2.8" capacitive or resistive touchscreen, an SD card slot, and USB power/programming, all pre-assembled on one board. This guide covers getting one running and building a genuinely useful wall-mounted dashboard on it.
What Exactly Is a CYD
"CYD" isn't one specific product — it's a community nickname for a family of similar low-cost ESP32 dev boards (most commonly sold under names like "ESP32-2432S028" and variants) that bundle a display, touch controller, and ESP32 module together. The name comes from the board's distinctive yellow PCB in the most common variant, though colors vary by seller.
Because these boards come from various manufacturers with subtle hardware differences (some use resistive touch, some capacitive; SD card wiring and backlight control pins vary between revisions), the single most important first step is identifying exactly which variant you have before trying to flash example code — using the wrong pin definitions is the most common source of "nothing works" frustration with these boards.
Identifying Your Board
- Look for a model number printed on the PCB itself, often near the USB port or ESP32 module
- Check the display driver chip if visible (commonly ILI9341 for the screen, XPT2046 for resistive touch or CST820/GT911 for capacitive)
- Community-maintained resources (search "CYD" plus your board's printed model number) typically have confirmed pin mappings for each known variant — this is worth five minutes of research before writing any code
Development Environment Setup
Two common paths, both viable:
EnvironmentGood For Arduino IDE + TFT_eSPI librarySimpler getting-started path, huge community example base, good if you're already comfortable with Arduino-style code PlatformIO (VS Code extension)Better for larger projects, dependency management, and multi-file codebases — worth the slightly steeper initial setup if you're planning something beyond a simple demoWhichever you choose, the TFT_eSPI library is the standard choice for driving the display, and needs a User_Setup.h configuration matching your specific board's pin assignments — this is the step most tied to correctly identifying your exact board variant from the step above.
First Test: Getting the Display Working
- Install the TFT_eSPI library through your environment's library manager
- Configure User_Setup.h with your board's confirmed pin definitions (many community repos provide a ready-made config file for common CYD variants — using one of these saves significant trial and error)
- Flash a basic test sketch that fills the screen with a color and draws some text
- If the display stays blank, double-check backlight control — some CYD variants need the backlight pin explicitly driven high in code rather than being always-on
Building the Dashboard
The genuinely useful application for a CYD is a wall-mounted status display — pulling live data over WiFi and showing it on a screen that just sits there, always on, always current. A practical dashboard structure:
#include <WiFi.h> #include <HTTPClient.h> #include <TFT_eSPI.h> #include <ArduinoJson.h> TFT_eSPI tft = TFT_eSPI(); void setup() { tft.init(); tft.setRotation(1); tft.fillScreen(TFT_BLACK); WiFi.begin("your-ssid", "your-password"); while (WiFi.status() != WL_CONNECTED) { delay(500); } } void fetchAndDisplay() { HTTPClient http; http.begin("http://your-home-server/api/status"); int code = http.GET(); if (code == 200) { String payload = http.getString(); JsonDocument doc; deserializeJson(doc, payload); tft.fillScreen(TFT_BLACK); tft.setTextSize(3); tft.setCursor(10, 10); tft.println(doc["temperature"].as<String>() + "F"); // ...draw additional fields as needed } http.end(); } void loop() { fetchAndDisplay(); delay(60000); // refresh once per minute }This polls an endpoint on your own network and renders the response — swap the URL and JSON fields for whatever data source you're pulling from. A Home Assistant REST API endpoint, a Raspberry Pi print-farm status page, or a simple custom script serving JSON on your local network all work identically from the CYD's perspective.
Practical Dashboard Ideas
Dashboard TypeData Source 3D print farm monitorOctoPrint/Klipper API — print progress, time remaining, bed/nozzle temps Home Assistant status panelHA REST API — temperature, security status, any exposed sensor Weather + forecast displayA public weather API, or your own Pi weather station's local data Network/server healthA small status endpoint on your home server reporting uptime, disk space, etc.Using the Touchscreen
Beyond passive display, the touch layer lets you build actual controls, not just readouts — a button to trigger a Home Assistant scene, acknowledge an alert, or cycle between multiple dashboard views. Touch handling with TFT_eSPI plus the appropriate touch controller library (XPT2046 or the capacitive equivalent for your board) gives you basic coordinate readouts you can map to on-screen button regions:
uint16_t x, y; if (tft.getTouch(&x, &y)) { if (x > 50 && x < 150 && y > 200 && y < 260) { // touched the defined button region — trigger an action } }Mounting
Since the board is small and lightweight, a simple 3D printed wall mount or stand is usually all that's needed — design one with cable routing for the USB power cord and, if your enclosure covers the back, clearance for the ESP32's antenna area to avoid degrading WiFi signal.
Common Issues
SymptomLikely Cause Blank screen after flashingWrong pin definitions in User_Setup.h for your specific board variant, or backlight not enabled Touch not registering, or registers in wrong locationTouch controller type mismatch (resistive vs capacitive) or uncalibrated touch mapping — verify which touch tech your specific board uses WiFi connects but HTTP requests failUsually a URL/endpoint issue rather than WiFi — confirm the target server is reachable from another device on the same network first Board won't flash / not detectedSome CYD variants need the boot button held during upload, similar to other ESP32 dev boards — check if yours requires thisOnce you've got the display rendering and a data source feeding it, a CYD dashboard is one of the fastest ways to turn "data that lives in an app on your phone" into "information visible at a glance on your wall," which is a genuinely nice quality-of-life upgrade for very little cost.
Related Guides
- Build a Wall-Mounted Maker Dashboard: Aggregating Your Print Farm, Security, and Home Server on One CYD Panel
- ESPHome and Home Assistant Beginner Guide: Build Your First WiFi Sensor
- MQTT and Node-RED on Raspberry Pi: Visual Automation for ESP32 Sensor Networks
- Building a Standalone ESP32 Web Control Panel: AsyncWebServer, LittleFS, and Captive Portal Setup
- Build a Wall-Mounted Smart Clock and Weather Display (ESP32 + RTC)
- Build a Standalone ESP32 WiFi Security Testing Tool with Marauder
- DIY Home Security System: Combining Raspberry Pi, ESP32 Sensors, and Flipper Zero
- Build a Battery-Powered ESP32 Smart Mailbox Notifier