Skip to main content

Breadboard Prototyping Guide

Step-by-step guide to assemble the ESP32 Emu Turbo prototype on a breadboard.

Required Tools​

  • Breadboard (830 points, or 2x smaller ones)
  • Jumper wires (M-M, M-F, F-F assorted)
  • Multimeter
  • USB-C cable
  • Soldering iron (for speaker wires and module headers)

Step-by-Step Wiring​

Step 1: Power Rail​

Connect the IP5306 USB-C module to provide 5V power, then regulate down to 3.3V with a buck module. On breadboard an MP1584 mini module is the easiest stand-in for the SY8089AAAC used on the PCB — set its trimmer to 3.3V with NO load connected before wiring it to anything.

Breadboard power: IP5306 module OUT+/OUT- to the 5V and GND rails, battery and USB-C on its inputs, buck module VIN/GND/VOUT to the 5V, GND and 3.3V rails

Capacitors are mandatory

The buck needs an input cap (22µF ceramic), an output cap (22µF ceramic) and its inductor close together — the input loop is the high di/dt path. Use ceramic, not tantalum: the ESR window that made a tantalum mandatory belonged to the old LDO, and a reversed tantalum is what destroyed prototype #1 (incident).

Step 2: ESP32-S3 DevKit​

Place the ESP32-S3 N16R8 DevKitC-1 on the breadboard.

DevKit power: VIN to the 5V rail or USB directly to USB-C, GND to the GND rail

Add decoupling capacitors:

  • 100nF ceramic cap between 3V3 and GND (close to the module)

Step 3: Display Connection (8080 Parallel)​

Connect the ILI9488 3.95" display panel with 8-bit 8080 parallel interface (via 40-pin FPC). FPC pin numbers from the ILI9488 panel datasheet:

FPC PinSignalWire toESP32-S3 GPIO
6VDDI3.3V rail—
7VDDA3.3V rail—
5, 16, 37GNDGND rail—
17DB0jumperGPIO4
18DB1jumperGPIO5
19DB2jumperGPIO6
20DB3jumperGPIO7
21DB4jumperGPIO8
22DB5jumperGPIO9
23DB6jumperGPIO10
24DB7jumperGPIO11
9CSjumperGPIO12
15RESETjumperGPIO13
10DC/RSjumperGPIO14
11WRjumperGPIO46
12RD3.3V rail— (tied HIGH, no read-back)
33LED-A (BL)3.3V rail via a series resistor on the breadboard (the PCB feeds it from +5V through R27, 20 Ω)— (always-on backlight)
34-36LED-KGND rail—
38IM03.3V rail— (HIGH for 8-bit 8080)
39IM13.3V rail— (HIGH for 8-bit 8080)
40IM2GND rail— (LOW for 8-bit 8080)
Color-coding

Use colored wires for the 8 data lines (e.g., rainbow order) to make debugging easier. Use a different color for control lines.

Step 4: SD Card Module​

Connect the SD card SPI module:

SD Module PinWire toESP32-S3 GPIO
VCC3.3V rail—
GNDGND rail—
MOSIjumperGPIO44
MISOjumperGPIO43
CLKjumperGPIO38
CSjumperGPIO39

Step 5: Audio​

There is no external I2S DAC. The ESP32-S3 drives the amplifier directly with PDM sigma-delta on a single pin — the PAM8403's analog input plus the DC-blocking cap reconstruct the waveform, so GPIO15/16 stay unused.

ConnectionFromTo
PDM data (I2S_DOUT)GPIO170.47 µF cap (C22) → PAM8403 INL/INR (pins 7 & 10)
Input bias20 kΩ from each inputPAM8403 VREF (pin 8), not GND
VREF bypass100 nFPAM8403 pin 8 → GND
PAM8403 VCC5V railPAM8403 VDD/PVDD
PAM8403 GNDGND railPAM8403 GND
PAM8403 SPK+wireSpeaker (+)
PAM8403 SPK-wireSpeaker (-)

Step 6: Buttons​

For each button, wire a 6x6mm tact switch with a 10kΩ pull-up resistor:

Breadboard button: 10 kΩ pull-up from 3.3 V to the GPIO pin, switch to GND

Button wiring table:

ButtonGPIOWire Color (suggested)
UPGPIO40White
DOWNGPIO41White
LEFTGPIO42White
RIGHTGPIO2White
AGPIO1Red
BGPIO48Blue
XGPIO47Yellow
YGPIO21Green
STARTGPIO18Orange
SELECTGPIO0Orange
LGPIO45Purple (internal pull-up only — no external R)
RGPIO3Purple

Step 7: USB Data (Native USB)​

GPIO19 and GPIO20 are used for native USB data (D-/D+). On the DevKit, these are already connected to the USB-C connector — no additional wiring needed. USB-C now carries both power (charging) and data (firmware flash + debug console).

Joystick removed

The optional PSP joystick has been removed from the design. The D-pad provides full SNES/NES control.

Wiring Checklist​

Before powering on, verify with a multimeter:

  • 3.3V rail is NOT shorted to GND
  • 5V rail is NOT shorted to GND
  • Buck input cap (22µF ceramic) sits close to VIN/GND — short loop
  • Buck output cap (22µF ceramic) and inductor are connected
  • All display data lines (D0-D7) are connected to correct GPIOs
  • Display control lines (CS, RST, DC, WR, RD) are correct
  • SD card SPI lines are not swapped (MOSI/MISO confusion is common)
  • Button pull-up resistors are connected to 3.3V, not 5V
  • No wires touching where they shouldn't
Before powering on

Double-check all connections with a multimeter in continuity mode. A short circuit on the 3.3V rail can damage the ESP32-S3 permanently.

Testing Procedure​

Test 1: Power​

  1. Connect USB-C to IP5306 module
  2. Verify 5V on the 5V rail with multimeter
  3. Verify 3.3V on the 3.3V rail
  4. Check the regulator is not getting hot. A buck runs near ambient — any warmth at all means a short downstream

Test 2: ESP32-S3 Boot​

  1. Connect ESP32-S3 DevKit via USB
  2. Open serial monitor (115200 baud)
  3. Press reset button — you should see boot messages
  4. Flash a simple "Hello World" sketch

Test 3: Display​

  1. Flash a display test program (solid color fill)
  2. Verify all pixels light up uniformly
  3. Test basic graphics (rectangles, text)
  4. If the display is garbled, check D0-D7 wiring order

Test 4: SD Card​

  1. Insert a FAT32-formatted micro SD card
  2. Flash SD card test program
  3. Verify file listing and read operations
  4. Test write speed (should be >1 MB/s over SPI)

Test 5: Buttons​

  1. Flash a button test program that prints GPIO state
  2. Press each button individually and verify correct GPIO triggers
  3. Check for bouncing (rapid on/off) — debounce caps should prevent this
  4. Test simultaneous button presses (D-pad + face button combos)

Test 6: Audio​

  1. Flash an audio test program (sine wave or beep)
  2. Verify sound output from speaker
  3. Test volume control via PAM8403 potentiometer
  4. Check for crackling or distortion (adjust I2S buffer size if needed)

Test 7: Emulation​

  1. Flash NES emulator firmware (start simple)
  2. Load a test ROM from SD card
  3. Verify display, controls, and audio work together
  4. Test SNES emulator — load a simple game
  5. Monitor frame rate (target: 60 fps NES, best-effort SNES)

Common Issues​

ProblemLikely CauseSolution
Display shows nothingBL not connected or wrong GPIOConnect BL to 3.3V directly to test
Display shows garbled imageD0-D7 wired in wrong orderCheck each data line individually
SD card not detectedMOSI/MISO swappedSwap the two wires
Buttons always read LOWPull-up resistor missingAdd 10kΩ to 3.3V
Audio cracklingBuffer underrunIncrease I2S DMA buffer size
ESP32-S3 won't bootEN pin floatingAdd 10kΩ pull-up + 100nF cap
Regulator hot, or buck in hiccupExcessive current drawCheck for shorts on the 3.3V rail