Skip to main content

Bill of Materials (BOM) with AliExpress Links

All components selected for the prototype, with direct purchase links.

Interactive BOM viewer: Open Interactive BOM — click any component to highlight it on the PCB layout (dark mode, pin-1 markers).


MCU — ESP32-S3

OptionFlashPSRAMUSBPriceLink
ESP32-S3 DevKitC-1 N16R8 (clone)16 MB8 MB OctalDual USB-C$5.50-$7.00AliExpress
WeAct ESP32-S3-A N16R816 MB8 MB OctalDual USB-C$5.50-$7.50AliExpress (WeAct Store)
Waveshare ESP32-S3-DEV-KIT N16R816 MB8 MB OctalUSB-C$10.99-$12.99Waveshare

Recommended: ESP32-S3 DevKitC-1 N16R8 generic (~$6.00)


Display

Chosen: ILI9488 3.95" Bare LCD Panel (for custom PCB)

SpecValue
Size3.95"
Resolution320(RGB) × 480
ControllerILI9488
TouchResistive (SPI) — not connected, touch not used
Connector40-pin FPC, 0.5mm pitch
InterfaceMCU 8/16-bit parallel + SPI
BacklightWhite LED, 3.3V
Display colors262K
Price~$3.95
LinkAliExpress
Why bare panel instead of module?

The bare LCD panel connects directly to the PCB via a 40-pin FPC ribbon — no breakout PCB, no pin headers. This is how commercial handheld consoles are built: compact, thin, and plug-in. The FPC ribbon slides into the J4 connector on our PCB and locks with the latch. Zero soldering required.

ILI9488 vs ST7796S — driver notes

Both controllers are equivalent for 8-bit 8080 parallel with RGB565 (~20 MB/s). Key differences:

  • ESP-IDF: use community component esp_lcd_ili9488 (ST7796S has official Espressif component)
  • LovyanGFX / TFT_eSPI: both controllers fully supported
  • SPI limitation: ILI9488 does NOT support RGB565 over SPI (only RGB666/888). This does not affect us since we use parallel 8080.
  • Init sequence: slightly different command set, but handled by the driver library

Display Orientation (landscape for gaming)

Portrait (native)          Landscape (gaming mode)
┌──────────┐ ┌─────────────────────┐
│ │ │ │
│ 320px │ rotate │ 480px │
│ × │ --------> │ × │
│ 480px │ 90° CW │ 320px │
│ │ │ │
│ FPC ══ │ │ FPC ══ │
└──────────┘ └─────────────────────┘

FPC 40-Pin Pinout (ILI9488 panel datasheet)

ILI9488 FPC 40-pin pinout from datasheet

ILI9488 datasheet specifications

PinSymbolDirectionDescriptionConnection
1XLTouch panel logical footNC
2YUTouch panel logical footNC
3XRTouch panel logical footNC
4YDTouch panel logical footNC
5GNDGroundGND
6VDDII/O power supply (1.8–3.3V)+3V3
7VDDAAnalog/digital power (2.8–3.3V)+3V3
8TEOutputTearing effect (vsync)NC
9CSInputChip select (active low)GPIO12
10DC/RSInputData/Command selectGPIO14
11WRInputWrite strobe (8080 mode)GPIO46
12RDInputRead strobe (8080 mode)+3V3 (tied HIGH)
13SPI SDIInputSPI data inNC (parallel mode)
14SPI SDOOutputSPI data outNC (parallel mode)
15RESETInputReset (active low)GPIO13
16GNDGroundGND
17-24DB0-DB7I/O8-bit parallel data busGPIO4-11
25-32DB8-DB15I/O16-bit extensionNC (8-bit mode)
33LED-ABacklight anode (2.9–3.3V typ 3.1V)+5V via R27 20Ω (net LED_BLA, always-on, ~90 mA defined by the family class rating — R25-HIGH-1 fixed in the design 2026-07-31; every board fabricated through v4.3.1 carries the old hard +3V3 tie with no current-limiting element)
34-36LED-KBacklight cathode (8 chip white LED)GND
37GNDGroundGND
38IM0InputInterface mode select+3V3 (HIGH)
39IM1InputInterface mode select+3V3 (HIGH)
40IM2InputInterface mode selectGND (LOW)
Interface Mode Selection (IM2:IM1:IM0)
IM2IM1IM0ModeData Pins
0108080 16-bit parallelDB15-DB0
0118080 8-bit parallelDB7-DB0
1013-line 9-bit SPISDA in/out
1114-line 8-bit SPISDA in/out

Our design uses 8080 8-bit parallel (IM2=0, IM1=1, IM0=1): IM0 and IM1 pulled HIGH to +3V3, IM2 pulled LOW to GND.

Pinout verified from actual panel datasheet

This pinout is from the actual ILI9488 3.95" panel datasheet (see images above). It differs significantly from generic/typical pinouts found online. Do NOT use generic ILI9488 pinout tables — always refer to this datasheet.

FPC Pin Reversal on PCB

When the display is mounted in landscape (CCW rotation), Pin 1 is at the south end of the FPC tail. The ribbon passes straight through the PCB slot to J4 on the bottom side without twisting, so display Pin N contacts connector Pad (41−N). The PCB traces are routed accordingly — e.g., display Pin 17 (DB0/GPIO4) connects to J4 Pad 24. See PCB FPC Slot for details.

Alternative Display Options

OptionSizeResolutionControllerInterfacePriceNotes
ST7796 4.0" bare panel + GT911 touch4.0"320x480ST7796S8/16-bit parallel~$8-12AliExpress — larger screen, official ESP-IDF driver
ST7796S 4.0" module + PCB4.0"320x480ST7796S8/16-bit parallel~$12-19Prototyping only (pin headers, no FPC)
ST7796S 3.5" IPS SPI3.5"320x480ST7796SSPI$8-$12Prototyping only

Power Supply

LiPo Battery

OptionCapacityDimensionsWeightPriceLink
LiPo 105080 5000mAh5000mAh50x80x10mm~80g~$5-8AliExpress
LiPo 104060 3000mAh3000mAh40x60x10mm~50g$6.70AliExpress
LiPo 103450 2000mAh2000mAh34x50x10mm~35g$3.50AliExpress

USB-C Charging Module

OptionFeaturesPriceLink
IP5306 USB-CCharge+boost 5V/2.4A, charge-and-play$1.59AliExpress
TP4056 USB-CCharge only 1A, no boost (needs external regulator)$0.25AliExpress

Voltage Regulator

OptionSpecificationPriceLink
SY8089AAAC2A synchronous buck 5V->3.3V, ~93%$0.12LCSC C78988

Recommended: LiPo 5000mAh + IP5306 + SY8089AAAC buck (~$7-10)

Estimated battery life with 5000mAh

About 12.9 hours of continuous gameplay. That is not 5000 / load — the number is derived through both conversion stages (SY8089 buck at ~93 %, IP5306 boost at ~90 %) in Power Budget, which is the single place it is computed.

Power architecture
USB-C -> [IP5306] -> +5V_VOUT -> [Q2 PMOS] -> +5V -> [SY8089 buck] -> 3.3V -> ESP32-S3
| ^
[LiPo Battery] SW16 (gate)

The IP5306 manages battery charge/discharge and provides a stable 5V output on +5V_VOUT. Since the SW16 respin, the high-side P-MOSFET Q2 separates that boost output from the +5V load rail: SW16 only drives Q2's gate, so OFF kills every load while USB charging (upstream of Q2) keeps working. The SY8089AAAC synchronous buck steps it down to 3.3V at ~93% efficiency. A linear regulator was used up to v1: at 5V in / 3.3V out it can only ever be 66% efficient, dissipating ~0.46W typical and ~1.0W at peak inside a sealed enclosure. The buck dissipates ~0.07W for the same load.


Controls / Input

ComponentSpecificationPriceLink
Tact switch 6x6mm (20pcs)Momentary push button, for D-pad/A/B/X/Y/Start/Select/L/R (12 buttons)$1.04AliExpress
Rubber pads GBA-styleConductive silicone, better feel$0.27AliExpress
Rubber pads GBA full setD-pad + A/B + Start/Select + L/R$1.05AliExpress
PSP Joystick (removed)2-axis analog, PSP 2000/3000$2.11Removed in v2 — GPIOs reassigned to USB data and BTN_R

Audio

ComponentSpecificationPriceLink
Speaker 28mm 8ohm 0.5WMini speaker (5pc pack $4.05)$0.81/pcAliExpress
PAM8403 amplifier2ch 3W, with volume pot$0.44AliExpress

Storage

ComponentSpecificationPriceLink
SD Card module SPIMicro SD reader, built-in level shifter$0.45AliExpress
Micro SD 32GBClass 10 / UHS-I (Kingston or Samsung)$3.50AliExpress

Prototyping Supplies

ComponentSpecificationPriceLink
Breadboard 830 pointsFor phase 2 prototype~$2.00AliExpress
Jumper wires setM-M, M-F, F-F~$2.00AliExpress
Resistor/capacitor kitAssorted values~$2.00AliExpress

Budget Summary

CategoryComponentPrice
MCUESP32-S3 N16R8 DevKitC-1$6.00
DisplayILI9488 3.95" 8-bit parallel (bare panel)$3.95
BatteryLiPo 105080 5000mAh$6.50
ChargingIP5306 USB-C$1.59
RegulatorSY8089AAAC buck$0.12
ControlsTact switch 20pcs (12 buttons: D-pad, A, B, X, Y, Start, Select, L, R)$1.04
Extra controlsRubber pads$1.05
AudioSpeaker + PAM8403$1.25
StorageSD module + 32GB card$3.95
MiscBreadboard, jumpers, resistors$6.00
TOTAL$32.90

Button Layout

    [L]                         [R]

[X]
[D-pad] [Y] [A]
up/down/ [B]
left/right

[Select] [Start]

12 buttons total: D-pad (4), A, B, X, Y, Start, Select, L, R

Recommended budget

Plan for ~$45 to have margin for spares and unexpected needs — the project's stated prototype budget band is $33–45.

Shipping

Most AliExpress sellers offer free shipping. Delivery time: 2-4 weeks (standard).


JLCPCB PCB Assembly — LCSC Part Numbers

For the custom PCB version (see PCB Design), all SMT components are sourced from LCSC for JLCPCB assembly.

38 line items, 99 placements. Generated from release_jlcpcb/bom.csv — the file uploaded to JLCPCB. Regenerate with make docs-bom.

RefPartPackageLCSCQtyRoleDatasheet
U1ESP32-S3-WROOM-1-N16R8Module_ESP32-S3-WROOM-1C29132021ESP32-S3-WROOM-1-N16R8 — 16 MB flash, 8 MB octal PSRAMPDF
U2IP5306ESOP-8C1816921IP5306 — charger + 5 V boost, charge-and-playPDF
U3SY8089AAAC 2A BuckSOT-23-5C789881SY8089AAAC — 2 A synchronous buck, 5 V → 3.3 V (~93 %)PDF
U5PAM8403SOP-16C51225571PAM8403 — class-D audio amplifierPDF
J1USB-C 16-pinUSB-C-SMD-16PC27651861USB-C receptacle, 16-pinPDF
U6Micro SD Card SlotTF-01AC911451microSD slot (TF-01A) — ROM storagePDF
J3JST PH 2-pin SMDJST-PH-2P-SMDC2957471JST PH battery connector
LED1Red LED 0805LED_0805C842561red LED (LED1) — power indicator on +3V3 (U2's LED pins are NC)PDF
LED2Red LED 0805LED_0805C191713911red LED — LED2 power indicator / LED3-6 diagnostics; YLED0805R is red despite the old 'green' labelPDF
L11uH 4.5A InductorSMD-4x4x2mmC2805791L1 — IP5306 boost inductorPDF
L22.2uH 2.95A InductorIND-SMD-4.0x4.0C364091L2 — SY8089 buck output inductor
R1,R25.1k 0805R_0805C278342CC1/CC2 pull-downs — USB-C UFP detectionPDF
R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R1510k 0805R_0805C1741412button pull-ups + R3 EN pull-up (R25-CRIT-1 fix)PDF
R20,R2120k 0805R_0805C43282PAM8403 INL/INR input bias
R24,R25100k 0805R_0805C1495042R24 Q1 gate pull-down, R25 buck feedback (upper) — R16 deleted in the SW16 respinPDF
R26,R3222k 0805R_0805C175602R26 buck feedback (lower), R32 Q2 gate pull-up (default OFF)
C2922pF 0805 C0GC_0805C18041C29 — buck feedback feedforward
R17,R18,R331k 0805R_0805C175133R17/R18 LED series resistors + R33 Q2 series gate resistor (soft-start slope)PDF
C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C21,C26,C31100nF 0805C_0805C4967817decoupling + C31 EN reset cap (R25-CRIT-1 fix)PDF
C220.47uF 0805C_0805C139671C22 — DC-blocking into PAM8403
C23,C24,C25,C321uF 0805C_0805C283234PAM8403 VDD/PVDD decoupling + C32 Q2 gate-source soft-start cap
C334.7uF 0805C_0805C17791C33 — IP5306 KEY wake cap (couples the SW16 ON transition into KEY)
C17,C18,C2710uF 0805C_0805C158503bulk decouplingPDF
C1,C19,C3022uF 1206 MLCCC_1206C128913C1 buck input, C19 boost output, C30 buck outputPDF
SW1,SW2,SW3,SW4,SW5,SW6,SW7,SW8,SW9,SW10,SW11,SW12,SW13,SW15,SW14SMT Tact Switch 5.1x5.1mmSW-SMD-5.1x5.1C31888415tact switches — D-pad, ABXY, Start/Select, L/R, Menu, RST, BOOTPDF
J4FPC 40-pin 0.5mm Bottom ContactFPC-40P-0.5mmC28568121FPC 40-pin 0.5 mm — ILI9488 displayPDF
SW16Slide Switch SS-12D00G3SS-12D00G3C4315401SW16 slide switch (MSK12C02) — drives Q2's gate; carries no rail currentPDF
U4USBLC6-2SC6 USB ESD TVSSOT-23-6C75191USBLC6-2SC6 — USB ESD/TVS protection
R22,R2322R 0402R_0402C250922USB D+/D- series termination
R2720R 1206R_1206C179551R27 — backlight series resistor, +5V -> LED_BLA (R25-HIGH-1 fix)
F1PTC Resettable Fuse 2A 1812F_1812C9600261F1 — VBUS PTC fuse, 2A hold / 4A trip (R3-HIGH-4 fix)
D1BAT54C Dual Schottky DiodeSOT-23C377041BAT54C — dual Schottky, menu-combo diode OR
Q1,Q2AO3401A P-Channel MOSFETSOT-23C151272AO3401A — Q1 reverse-battery protection, Q2 +5V high-side load switch (R32: replaced SI2301CDS C10487, whose 2.3 A rating sat below the battery-path current)
LED3,LED4,LED5,LED6Red LED 0805 (bring-up diagnostic, DNP in production)LED_0805C191713914red LED — LED2 power indicator / LED3-6 diagnostics; YLED0805R is red despite the old 'green' labelPDF
R28,R295.1k 0805 (bring-up diagnostic, DNP in production)R_0805C278342CC1/CC2 pull-downs — USB-C UFP detectionPDF
R30,R311k 0805 (bring-up diagnostic, DNP in production)R_0805C175132R17/R18 LED series resistors + R33 Q2 series gate resistor (soft-start slope)PDF
R341M 0805R_0805C175141
SW17TS-1088 (SMD momentary switch 3.9x3.0mm; DO NOT PLACE - manual IP5306 KEY wake, fit only if the C33 RC needs it)SW-SMD-2P-TS1088C7204771SW17 — manual KEY wake, DO NOT PLACE (fit only if the C33 pulse is short)

PCBA cost (real JLCPCB quote): $197.86 for 5 boards (~$39.57/board) including fabrication, components and assembly. Most of it is one-time setup — see the full quote breakdown.

v2 Additional Components (Audio Coprocessor)

The v2 PCB adds an ESP32-S3-MINI-1-N8 as a dedicated audio coprocessor (see Phase 5 — Software Architecture):

RefComponentPackageLCSCClassUnit cost
U7ESP32-S3-MINI-1-N8Module (15.4×20.5mm)C2913206Extended$3.25
C34,C35100nF 0805 (decoupling)0805C49678Basic$0.01

v2 BOM delta: +$3.27 per unit. No external crystal, flash, or extra passives needed — the module integrates everything. (References C26–C33 are already taken on the v1 board — C32/C33 are the SW16 respin's gate and wake caps — so the coprocessor's decoupling caps are C34/C35.)

v2 estimated PCBA cost: $215 for 5 boards ($43/board).


PCB Version — What to Buy Separately

When ordering the custom PCB from JLCPCB, the following components are NOT included in the assembly and must be purchased from AliExpress:

ComponentRefPriceConnection to PCBSolder?
ILI9488 3.95" bare LCD panel (40P FPC 0.5mm, resistive touch NC)~$3.95FPC ribbon → J4 connector (slide + latch)No
LiPo 105080 5000mAh batteryBT1~$6-8JST PH plug → J3 connectorNo
Speaker 28mm 8ΩSPK1~$0.802 wires → solder padsYes (easy)
PSP joystick (removed)J2Removed in v2 — GPIOs reassigned to USB data and BTN_R
~$17-23
tip

The display and battery are plug-in — no soldering skills required. Only the speaker (2 wires) needs soldering.

Display purchase — important

Buy the bare LCD panel (no PCB breakout board), specifically:

  • ILI9488 controller, 3.95", 320×480, 40-pin FPC 0.5mm pitch
  • Resistive touch (not connected — touch pins left NC on PCB)
  • AliExpress link

Do NOT buy display modules with PCB breakout + pin headers — those are for breadboard prototyping and won't fit the FPC connector on the PCB.