The "Cheap Yellow Display" -- an ESP32 dev board with a 2.8" TFT touchscreen soldered
directly onto it, no wiring required -- has become a bit of a phenomenon in the hobbyist ESP32
world. Mine are the ESP32-2432S028R model (2.8" resistive touch, ILI9341 driver,
XPT2046 touch controller), the two-USB-port variant (micro-USB and USB-C), bought as a two-pack.
At a few dollars each, with a screen, an onboard speaker amplifier, an SD card slot, and a real
ESP32-WROOM-32 underneath, it's absurdly inexpensive for what it is -- and because it's so cheap
and so common, there's a large community around it: ready-made pinout references, several
competing display/touch library forks patched specifically for its wiring, and a growing pile of
projects built for it out of the box. Two of those projects are on my two boards now.
Everything below is other people's work I'm trying out. My own CYD project lives at Weather & Sensors Station instead (just the one so far).
Fr4nkFletcher/ESP32-Marauder-Cheap-Yellow-Display on GitHub -- a CYD port of justcallmekoko's ESP32 Marauder, a WiFi/Bluetooth diagnostic and penetration-testing toolkit (AP/station scanning, packet sniffing, deauth detection, and similar RF tools) with a touchscreen menu system built for exactly this display.
Flashing this one was the easy path: the repo ships prebuilt binaries for every CYD variant
under bins/, so there was no need to install Arduino IDE or compile anything.
Three files, written with esptool at the offsets the project's README specifies:
esp32_marauder.ino.bootloader.bin at 0x1000esp32_marauder.ino.partitions.bin at 0x8000esp32_marauder_v1_4_2_20250413_cyd2usb_nogps.bin (the latest build for the
2-USB-port CYD, no GPS module attached) at 0x10000One local snag: Debian/Ubuntu's packaged esptool (apt install esptool)
ships without the "stub flasher" binaries it normally uses for fast, verified writes -- a
Debian-packaging trim, not an upstream bug -- so a plain write_flash failed with a
missing-file error. Adding --no-stub falls back to the slower ROM bootloader
protocol and flashed cleanly.
e2002/yoradio on GitHub -- a full internet radio built on the ESP32-audioI2S decoder library, with station browsing and playback controls on the TFT, a web UI for managing the station list, and (unused here) MQTT/Home Assistant integration. Chosen specifically because it supports the ESP32's internal DAC as an audio output, not just an external I2S DAC/amp board -- the CYD's speaker header is wired straight to GPIO26 through an onboard SC8002B amplifier chip, with no external DAC to speak of, and most other CYD radio projects assume one is present.
This one needed an actual Arduino build rather than a prebuilt binary, plus two changes specific to this board:
myoptions.h, yoRadio's supported override file --
never edit its options.h directly): DSP_MODEL DSP_ILI9341 and
DSP_HSPI true with TFT_CS/TFT_DC set to the CYD's actual
display pins (14/13/12/15/2, not yoRadio's VSPI-pin defaults), BRIGHTNESS_PIN 21
for the backlight, and I2S_INTERNAL true to enable internal-DAC output.src/core/player.cpp): yoRadio's internal-DAC
mode defaults to driving both ESP32 DAC pins (GPIO25 and GPIO26) as a stereo pair, but
GPIO25 is already the CYD's touch-controller clock line. Changed the audio channel from
I2S_DAC_CHANNEL_BOTH_EN to I2S_DAC_CHANNEL_LEFT_EN, which restricts
output to GPIO26 only -- the library automatically mixes stereo streams down to mono in this
mode, which is exactly right for one physical speaker.Touch is disabled (TS_MODEL TS_MODEL_UNDEFINED) for now: yoRadio's touchscreen
driver assumes the touch controller shares the display's SPI bus, but the CYD wires its XPT2046
touch chip to a separate bit-banged bus entirely. The radio is controlled from its web UI
instead, reachable once it's on the WiFi network.
Also required a one-time, machine-wide change: yoRadio's documentation calls for replacing
Adafruit_GFX_Library's bundled font file (glcdfont.c) with its own,
which adds the extended character set its localization needs. That's a shared Arduino library
directory, so it affects any other sketch on this machine using Adafruit_GFX's default font, not
just yoRadio -- the original was backed up alongside it.
Build details: compiled with arduino-cli against the plain ESP32 Dev
Module board definition, with the partition scheme bumped from the 4MB default (1.2MB
app space) to No OTA (2MB APP/2MB SPIFFS) -- the compiled sketch runs about
1.5MB, past the default scheme's app partition. Firmware and the SPIFFS filesystem image (the
web UI's HTML/CSS/JS, built with mkspiffs) were flashed as two separate
esptool writes, at 0x10000 and 0x210000 respectively.
First boot starts a yoRadioAP WiFi access point for initial setup --
connect and browse to 192.168.4.1 to hand it real WiFi credentials, then manage
stations from its web UI afterward.
Not yet built -- notes so far.
harbaum/galagino on GitHub -- an ESP32
arcade emulator (Z80 software emulation) for Galaga, Pac-Man, Donkey Kong, Frogger, Digdug, and
1942, with native support for the CYD listed in its README: uncomment
CHEAP_YELLOW_DISPLAY_CONF in galagino/config.h and it targets the
board's display and onboard SC8002B speaker directly, no separate TFT wiring needed like the
original breadboard build.
Two things to sort out before flashing:
Start mapped to the onboard BOOT button; haven't
sourced a nunchuck yet.Also worth a compile-time check rather than assuming it still holds: the README flags I2S/DAC audio as broken on ESP32 Arduino board package 2.0.10 and newer, recommending 2.0.9 -- this repo hasn't been touched since 2023, while the Internet Radio build above used core 3.3.11 without incident, just not through this same audio path. The README itself also points to several actively-maintained forks (GalaginoPlus, Galagino3, and others) with more games and broader display support, worth a look if this original stalls.