A handheld mini television — an ESP32-S3 plays MJPEG video clips off a microSD card onto a
2.4″ parallel TFT, with resistive-touch controls (channels, play/pause, a volume/EQ screen) and clean I2S
sound through a MAX98357A amp. Below is the full build wiring (MAX98357A replaces the old PAM8302A + RC
filter); tap a row to tick it off and pick the colour of the wire you actually used from the middle dropdown.
ESP32-S3
N16R8
⇄
MAX98357A
I2S Class-D amp
Pins verified0 / 0
Tap a row to toggle · pick each wire's colour in the middle · colours saved on the server
Data bus · 8 lines
D0GPIO 4
D1GPIO 5
D2GPIO 6
D3GPIO 7
D4GPIO 8
D5GPIO 9
D6GPIO 10
D7GPIO 15
Control · 5 lines
RS / DCGPIO 1
CSGPIO 2
WRGPIO 42
RDGPIO 41
RSTGPIO 40
Power · both required
5V5V
3V33V3
Power input · external USB-C socket (optional)
USB-C + 5V VBUS5V
USB-C −GND
Use this instead of the onboard USB to power the build: + → 5V pin, − → GND (feeds the onboard regulator just like the USB port).
⚠️ 5V only — never the 3V3 pin (that bypasses the regulator and damages the 3.3V parts & display). Check polarity before powering.
Don't run external power AND the onboard USB at the same time — the 5V/VBUS pin is shared and can back-feed.
A bare USB-C breakout needs the CC pull-downs (5.1k to GND on CC1/CC2) or a USB-C charger won't switch on its 5V.
Ground · the priority
GNDGND
Use 3+ short ground wires — connect every GND the shield has to a GND on the S3,
shortest leads you've got, ideally one running alongside the data bundle.
microSD · shield's onboard slot · labels SS / DO / DI / SCK
SCKGPIO 12
SS = CSGPIO 14
DI = MOSIGPIO 11
DO = MISOGPIO 13
⚠️ DO and DI are named from the CARD's side, so they cross over:DO → MISO (GPIO 13), DI → MOSI (GPIO 11). Just these 4 signal wires; power + ground come from the shield.
Audio · MAX98357A I2S amp · no PAM, no filter
DIN dataGPIO 38
BCLK bit clkGPIO 16
LRC word selGPIO 17
VIN5V
GNDGND
Speaker ± bothMAX out
Clean digital audio: just the 3 I2S wires (DIN/BCLK/LRC) + power + ground, speaker
straight onto the amp's two output pads. Remove the PAM8302A, the 1.6k resistor and the
100nF cap — none are used now. SD/MODE and GAIN can be left as-is (default = (L+R)÷2, 9 dB).
The firmware build for this is mini_tv_av_max98357 (standard I2S).
Firmware · mini_tv_av_max98357.ino
The full Arduino sketch — MJPEG video player + resistive touch + per-channel audio through the
MAX98357A. Board: ESP32S3 Dev Module · PSRAM OPI PSRAM · Flash 16MB ·
USB CDC On Boot. Libraries: LovyanGFX · JPEGDEC · ESP8266Audio · SD · Preferences.