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.

[IP5306 Module]
OUT+ ──> Breadboard 5V rail
OUT- ──> Breadboard GND rail
BAT+ ──> LiPo battery (+)
BAT- ──> LiPo battery (-)
USB ──> USB-C cable (for charging + power)

[Buck 5V->3.3V]
VIN ──> 5V rail (through 10µF cap)
GND ──> GND rail
VOUT ──> Breadboard 3.3V rail (through 22µF cap)
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 VIN  ──> 5V rail (if USB not connected directly)
— OR —
DevKit USB ──> Direct USB-C (for programming/debug)

DevKit GND ──> 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:

3.3V ──[10kΩ]──┬── GPIO pin

[switch]

GND

Button wiring table:

ButtonGPIOWire Color (suggested)
UPGPIO40White
DOWNGPIO41White
LEFTGPIO42White
RIGHTGPIO1White
AGPIO2Red
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