> ## Content Index
> Fetch the complete content index at: https://blog.wildwanderer-vr.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# I turned the Cheap Yellow Display into a tiny desk command centre
- URL: https://blog.wildwanderer-vr.com/i-turned-the-cheap-yellow-display-into-a-tiny-desk-command-centre/
- Published: 2026-09-01T23:56:53.000Z
- Updated: 2026-09-01T23:56:53.000Z
- Description: A cheap no-PSRAM ESP32 screen now tracks aircraft, watches a 3D printer, checks the weather and network, and securely updates itself from GitHub.
- Author: Wild Wanderer
- Tags: ESP32, Open Source, DIY, Technology, 3D Printing

There is something irresistible about a gadget whose community name is literally the **Cheap Yellow Display**.

The CYD is a small ESP32 board with a 2.8-inch touchscreen bolted to the front. It is inexpensive, cheerful, slightly awkward, and sold under enough different names to make online shopping feel like detective work. Mine arrived as a promising red-framed rectangle with 320 by 240 pixels, 4 MB of flash, a microSD slot and absolutely no PSRAM.

So naturally, I decided it should know the weather, track aircraft, watch my 3D printer, check the health of my network, show a calendar and update its own firmware over the internet.

It does all of that now.

![The CYD Desk Dashboard home screen on the physical ESP32 touchscreen](https://blog.wildwanderer-vr.com/content/images/2026/08/home-screen-1.jpg)

Six large tiles keep the useful bits one tap away.

The result is the [CYD Desk Dashboard](https://github.com/M1XZG/cyd-desk-dashboard?ref=blog.wildwanderer-vr.com), an open-source touchscreen information panel that runs directly on the ESP32-2432S028\. It doesn’t need Home Assistant, a Raspberry Pi, a browser in kiosk mode or a companion process quietly consuming another machine. Give it Wi-Fi and a microSD card, and the little board gets on with the job.

## Six tiles, rather more going on underneath

The home screen is deliberately simple. Weather, Flights, Bambuddy, Systems, Calendar and Settings each get a large finger-friendly tile. You can hide the ones you don’t use, change the brightness, rotate the display and replace the icons or startup artwork from the SD card.

Weather starts with Open-Meteo, then falls back to MET Norway if the first service is rate-limited. It adds sunrise, sunset and moon information, with configurable units and a proper day-or-night icon. I wanted a useful glance at the day, not a tiny web page squeezed into a plastic frame.

![Live weather conditions, sunrise, sunset and moon information on the CYD](https://blog.wildwanderer-vr.com/content/images/2026/08/weather-screen.jpg)

Weather includes current conditions, the daily range and astronomy.

The Flights screen is where the project became a little unreasonable, in the best way. The ESP32 asks airplanes.live or adsb.lol for nearby traffic, plots a north-up radar screen and colours aircraft by altitude or vertical movement. Tap a plane and it opens a detail page with its callsign, registration, type, route, height, speed, heading, distance and whether it is climbing or descending.

![Nearby aircraft plotted on the CYD Desk Dashboard radar screen](https://blog.wildwanderer-vr.com/content/images/2026/08/flights-screen-1.jpg)

The Flights page plots nearby traffic without a local ADS-B receiver.

It also looks up a photograph of the aircraft. If Airport-Data.com has a match for the ICAO hex code, the thumbnail appears inside the detail screen with the photographer and source credited underneath. No match is fine; the flight data still works and the display says plainly that no aircraft photo was found. Temporary photo failures get one automatic retry rather than giving up at the first dropped connection.

![Aircraft details and a matching photograph displayed on the CYD](https://blog.wildwanderer-vr.com/content/images/2026/08/aircraft-screen-1.jpg)

Tap a radar target for flight details and an on-demand aircraft photograph.

Bambuddy support turns another tile into a read-only monitor for a Bambu Lab printer. It shows the active job, progress, remaining time, layer count, temperatures and printer Wi-Fi signal. The Systems page watches the dashboard itself, internet access and up to four HTTP or TCP services on the local network. Calendar is generated locally, so it doesn’t need access to anybody’s cloud account.

This is the sort of desk gadget I like: useful at a glance, silent, and not waiting for me to install an app.

## Setup without recompiling everything

The first boot creates a password-protected setup network. Connect to it, enter the destination Wi-Fi details, choose a portal password and set the timezone. After that, an authenticated browser portal handles the settings that would be miserable to type on a 2.8-inch resistive touchscreen.

The portal also has an SD-card file manager and validated startup-image upload. Configuration writes are staged and backed up before replacement, credential fields are write-only, and a successful save returns to the main page instead of leaving the browser stranded on a handler URL.

Then there are firmware updates. From version 1.1.0 onward, the dashboard can check GitHub for a stable release and install it from either the physical Settings screen or the browser portal. The current release is [v1.1.4](https://github.com/M1XZG/cyd-desk-dashboard/releases/tag/v1.1.4?ref=blog.wildwanderer-vr.com).

![The CYD firmware screen showing version 1.1.3 installed and marked current](https://blog.wildwanderer-vr.com/content/images/2026/08/firmware-screen.jpg)

This photograph shows the update screen on v1.1.3; the article links to the newer v1.1.4 release.

Press **Check for updates**, compare the installed and latest versions, and confirm. If you are already current, the same screen can reinstall that release. Configuration, touch calibration and SD-card files stay where they are.

That sounds ordinary until you remember this is a tiny no-PSRAM ESP32 trying to negotiate modern TLS, render a graphical interface and avoid falling over from heap fragmentation at the same time.

## All right, show me the nerdy bits

The original CYD is wonderfully constrained hardware. There is no spare pool of PSRAM to throw at a large JSON document or an extravagant display buffer. The firmware has to be disciplined.

LVGL draws the interface, but pages are created when needed instead of all living in memory together. Its allocator is limited to 32 KB, and the display uses one synchronous buffer only five rows high. Network responses have fixed limits. Large flight feeds are streamed through the SD card and parsed one aircraft at a time, rather than being loaded wholesale into RAM.

The two ESP32 cores have distinct jobs. The main loop owns LVGL, touch events, navigation and the browser portal. A worker pinned to core 0 serializes Weather, Flights, aircraft photographs, Bambuddy and Systems requests. OTA has its own worker, but both network workers share a mutex because two simultaneous TLS sessions would be a fairly effective way to turn the dashboard into a reboot demonstration.

Even navigation needed care. An LVGL touch callback cannot safely destroy the screen tree that is currently dispatching that callback, so page changes are deferred until the event has finished. SD operations use a separate mutex to stop a portal upload colliding with cached flight data or an icon read.

The result is less glamorous than buying a larger board and more satisfying: the interface remains responsive because the firmware respects what the hardware can actually do.

## OTA, but with receipts

I did not want the update button to mean download some bytes and hope.

The dashboard first opens a certificate-validated connection to the GitHub Releases API. GitHub supplies the stable version tag, the exact firmware URL, its byte count and a SHA-256 digest. The ESP32 then streams the binary into the inactive OTA partition while calculating its own digest. It activates that partition only when both the final size and SHA-256 match the authenticated metadata.

On the next boot, the new firmware marks itself valid after the display, storage, configuration and background services have started. If it crashes or restarts before reaching that point, the rollback-enabled bootloader can return to the previous image.

There was an especially sneaky failure along the way. Arduino’s update library needs a 4 KB flash buffer, but on this framework version it can fail to allocate that buffer without setting a useful error. Calling it after the TLS handshake had already fragmented the heap produced the deeply informative message `Could not prepare OTA: No Error`. Moving the allocation before the handshake fixed the real problem.

That one line of error text cost rather more than one line of debugging.

## A small security compromise, kept in a small box

The public aircraft thumbnails exposed another limit. Airport-Data’s certificate chain requires a P-384 operation that repeatedly ran out of contiguous heap on this board. The photo-only connection therefore uses encrypted but certificate-unverified TLS.

I kept that exception narrow. It sends no credentials, accepts only exact Airport-Data URL prefixes, limits the JPEG to 100 KB and checks the file markers before display. The authenticated firmware-update path does not use this exception. It is documented in the repository because pretending a compromise doesn’t exist is not a security strategy.

## Build one, break it, improve it

The project is MIT-licensed and lives on [GitHub](https://github.com/M1XZG/cyd-desk-dashboard?ref=blog.wildwanderer-vr.com). The repository includes the PlatformIO source, SD-card examples, wiring and hardware notes, screenshots, configuration reference, troubleshooting, architecture notes and the full [OTA release process](https://github.com/M1XZG/cyd-desk-dashboard/blob/main/docs/OTA-UPDATES.md?ref=blog.wildwanderer-vr.com). Tagged releases include the ordinary firmware binary, complete USB-flash images, checksums, an SPDX software bill of materials and GitHub build attestations.

You can flash it as it stands, hide the bits you don’t need, swap the artwork, or use it as a starting point for something stranger. The CYD community has already turned these boards into clocks, radios, controllers and tiny status panels. Mine now tells me whether I need a coat, what is flying overhead, whether the printer is behaving and whether the rest of the network is still alive.

That is a lot of responsibility for something called the Cheap Yellow Display.