Yes, an ESP32 can power a portable NES-style handheld, but the older project this guide is based on is best treated as an architecture reference—not a current, plug-and-play kit. The original design combined a TTGO v1.7 ESP32 board, a 4-inch ST7796S SPI display, a MAX98357 I2S amplifier, a speaker, controls, a microSD card and a LiPo battery. Rebuilding it today means verifying the original software, adapting the pin configuration and adding proper battery-management hardware.
What you are building
This is an ESP32-based handheld computer running an NES emulator. It is not an official Nintendo console, an NES hardware clone or a separate Arduino board connected to an ESP32. In this project, “Arduino” primarily means the Arduino IDE and Arduino-compatible framework used to compile and upload firmware to the ESP32.
As an Amazon Associate I earn from qualifying purchases.
The finished system is intended to:
- Boot from battery power.
- Render NES video on a color SPI LCD.
- Read a D-pad-style control scheme, buttons and possibly an analog joystick.
- Load game files from removable microSD storage.
- Produce sound through an I2S digital amplifier and speaker.
The original project, documented by Hackster, used a modified Arduino-compatible Nofrendo emulator and changed its display implementation to use Arduino_GFX. A linked 26-step Instructables walkthrough provides additional project context.
Is the ESP32 powerful enough?
The original build demonstrates that an ESP32-class microcontroller can run an NES emulator. However, performance is not determined by the processor alone. The emulator port, CPU clock, display driver, SPI transfer speed, frame-buffer strategy, audio implementation and game mapper support all matter.
#1 Best Overall
- Powerful ESP-32 Board: Unlock the world of Internet of Things (IoT) and advanced electronics with the heart of this kit: the ESP-32 board. It features a powerful dual-core processor, integrated Wi-Fi and Bluetooth 4.2, making it perfect for building connected, smart devices that communicate with your phone or the cloud. It's fully compatible with the Arduino IDE for easy programming.
- Super Starter Kit: This kit contains over 35 different modules and electronic components, including sensors, displays, motors, and input devices. From LEDs and buttons to an OLED screen, servo motor, and keypad, you have everything needed to explore a vast range of projects in one box.
- Step by Step Online Tutorial: Jump right in with our detailed, beginner-friendly tutorial. Access 30+ projects with complete code, clear circuit diagrams, and step-by-step instructions. Learn the fundamentals of electronics, coding, and how to utilize the ESP-32's unique capabilities without any prior experience.
- Hands-on Learning for All Skill Levels: Perfect for students, makers, engineers, and hobbyists. Start with basic circuits and coding, then progress to intermediate and advanced IoT applications. Build practical projects like weather stations, smart home controllers, remote-controlled devices, and interactive gadgets. The skills you learn are the foundation for real-world innovation.
- Quality & Great Support: Elegoo is committed to quality. We provide a clear, detailed tutorial guide, refined code, and a well-organized component kit. All modules are carefully selected for reliability and ease of use. Our dedicated technical support team and active online community are ready to help you succeed in your learning journey.
The LCD may be a larger performance concern than the emulation itself. An NES produces a logical 256×240 image, while a 4-inch ST7796S panel has a different native resolution and aspect ratio. The firmware must scale, center, crop or otherwise transform that image before sending it over SPI. Large full-screen transfers consume substantial bus and processor time.
Do not promise full-speed operation for every NES game without testing a stated emulator build against a stated game set. Likewise, an ESP32-S3 is not automatically a drop-in replacement for the original ESP32. GPIO numbering, boot pins, flash and PSRAM configuration, USB behavior and library compatibility can all differ.
Original design versus a modern adaptation
| Original component | Purpose | Modern-build consideration |
|---|---|---|
| TTGO v1.7 ESP32 board | Main processor and development platform | The exact board may be difficult to identify or obtain. A replacement requires a new pin and software configuration. |
| 4-inch ST7796S SPI LCD | Video output | Confirm controller, resolution, orientation, logic voltage, backlight and initialization sequence. |
| MAX98357 module | I2S digital audio amplification | Verify the module’s pinout, supply range, gain configuration and speaker requirements. |
| Small speaker | Audio output | Match impedance and power rating to the amplifier module. |
| PSP-style analog joystick | Directional or auxiliary input | It requires calibration and a dead zone and may be less practical than a compact D-pad. |
| Six push buttons | NES controls and menu functions | Map A, B, Start, Select and directional or menu functions explicitly in firmware. |
| LiPo battery | Portable power | Must be paired with suitable charging, protection, regulation and switching hardware. |
| microSD card | Removable game storage | Confirm filesystem, directory and filename expectations in the firmware. |
| 400-hole breadboard | Prototype assembly | Use it for validation, then move to perfboard or a custom PCB for a durable handheld. |
The original parts are documented in the Hackster report. Its age matters: marketplace listings, board revisions and library APIs may have changed since publication.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Clear out junk files and repair common Windows errors3Fix the driver behind crashes, sound loss and screen glitchesBill of materials
Required electronics
- ESP32 development board, ideally the exact TTGO v1.7 board for a historical reproduction.
- SPI display based on the ST7796S controller, with documented resolution and pinout.
- MAX98357 or another verified I2S amplifier module.
- Small speaker compatible with the amplifier.
- Push buttons and, if desired, an analog joystick.
- microSD card and a compatible socket or breakout.
- LiPo battery with suitable protection.
- Charger and power-management hardware.
- Regulated power rail, power switch and appropriate wiring.
Strongly recommended additions
- Bulk and local decoupling capacitors.
- Fuse or resettable protection device where appropriate.
- Enclosure, mounting hardware and strain relief.
- USB cable for programming and charging.
- Perfboard or a custom PCB for the final assembly.
Do not connect a bare LiPo cell directly to an arbitrary 5 V or 3.3 V rail. The battery, charger, regulator and load must be designed as one power system. Confirm whether the charger supports playing while charging; many simple charging boards do not provide proper power-path management.
Hardware architecture
LiPo battery
│
charger / protection / regulator
│
ESP32
┌───┼───────────────┬───────────────┐
│ │ │ │
SPI LCD microSD I2S amplifier
│ │
backlight speaker
GPIO buttons / joystick
The display and microSD interface may share SPI clock and data lines. Each device needs its own chip-select handling, and inactive devices must properly release the bus. The exact GPIO map is not verified by the project summary, so do not copy pin numbers from an unrelated ESP32 tutorial. Obtain them from the selected board schematic and the actual project source.
Display design
ST7796S panels generally communicate over SPI, but two modules advertised with the same controller can still differ in resolution, wiring, voltage requirements, reset behavior, backlight control and initialization data. A panel with a built-in SD socket may also route the socket onto the same SPI bus.
The NES image can be:
- Scaled: Uses more of the panel but may create uneven pixel sizes or blur.
- Centered with borders: Preserves the image but leaves unused screen area.
- Cropped: Fills more of the display at the cost of missing content.
- Rendered into an intermediate buffer: Gives the firmware more control but consumes RAM and processing time.
Integer scaling is generally preferable for sharp pixel art, although it may leave borders. Rotation and RGB/BGR color order are common sources of incorrect colors or a mirrored image. The Arduino_GFX change in the original project was intended to make different display resolutions and formats easier to support, but it does not make every ST7796S breakout interchangeable.
Rank #2
- ESP32 camera board: Dual-core 32-bit microprocessor up to 240 MHz, 4 MB flash, 8 MB PSRAM, onboard 2.4 GHz Wi-Fi and Bluetooth 4.2 (LE), USB code uploader, camera, memory card slot (Comes with 1GB memory card and card reader)
- 3 sets of code: MicroPython, C and Processing (Java). Python is one of the most popular languages, and C is one of the most classic languages. Processing code needs to run on computers to provide graphical interfaces
- Detailed tutorial: Can be downloaded (in English, 795-page in total) or viewed online (original in English, can be translated into other languages by browsers) (The tutorial link can be found on the product box, no paper tutorial)
- 122 projects from simple to complex: Provides step-by-step guide with electronics and components knowledge, each project has schematics, wiring diagrams, complete code and detailed explanations
- 240 items in total: This ultimate kit includes the most commonly used electronic components, modules, sensors, wires and other compatible items
Backlight brightness can be one of the largest power loads in the handheld. Add a controllable backlight connection if the display supports it, and test brightness settings before estimating battery life.
Controls and input mapping
The accessible project summary identifies a joystick and six buttons but does not verify the original GPIO assignments or complete button map. A reproducible build should document:
- Up, down, left and right.
- A and B.
- Start and Select.
- Menu, reset or exit functions.
- Whether the joystick replaces the D-pad or acts as an alternate input.
- Joystick calibration and dead-zone values.
- Button polarity and debounce behavior.
A common arrangement is to wire each push button between a GPIO and ground, then use an internal pull-up so a pressed button reads active-low. This is a design pattern, not a verified map for this project. Avoid pins reserved for flash, PSRAM, USB, bootstrapping or onboard peripherals, and keep all assignments in one hardware-configuration section.
Use software debouncing rather than assuming mechanical switches will produce clean transitions. Before launching the emulator, run a diagnostic sketch that prints every button state and reports joystick readings.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Audio path
The MAX98357 is an I2S amplifier, not an analog speaker driver. The ESP32 must supply an I2S bit clock, word-select clock and serial data, in addition to power and ground. The exact pins, sample rate, buffer settings, gain and speaker impedance are not verified in the project summary.
Test the audio chain independently with a tone or WAV example before integrating it with the emulator. If the result is silent or crackles, check:
- I2S clock and data assignments.
- Amplifier power and shared ground.
- Speaker impedance and wiring.
- Audio sample rate and buffer size.
- Whether the emulator’s audio callback is enabled.
- Physical separation between speaker wiring, display wiring and noisy regulators.
Amplifier volume affects both sound quality and battery consumption. Boot pops or clicks can often be reduced by controlling amplifier enable behavior and initializing the audio path in a predictable order.
Rank #3
- Perfect choice for beginners to learn, electronics and program.
- The Basic Starter Kit is easy to use and you can learn to program at an introductory level.
- You can use ESP32 modules to control other modules, such as LED,DHT11,OLED module, etc
- The tutorial include codes and lessons.It will teach every users how to assembly Basic Starter Kit for ESP32.
- Please download our tutorial and learn after you receive the goods.
Using the SD card as a cartridge substitute
The original design treats the SD card as removable game storage: changing cards changes the available library. That is convenient, but removable does not automatically mean safe to hot-swap while powered.
Recommended Free Tools
Before combining storage with the display, test the SD interface by itself. Confirm:
- Whether the firmware expects FAT32 or another filesystem.
- Whether files belong in the root directory or a specific folder.
- Filename and extension rules.
- SPI chip-select wiring.
- Card voltage compatibility.
- Initialization timing.
- Behavior when no card or an invalid file is present.
If display and SD share SPI lines, ensure the inactive device is deselected and does not drive the bus. Avoid removing the card during an active read or write unless the hardware and firmware explicitly support it.
Software installation and build process
Start with the official Arduino IDE download page and the official Arduino-ESP32 documentation. Then reproduce the project’s stated environment from its source files:
- Install Arduino IDE.
- Install ESP32 board support.
- Select the exact target board.
- Obtain the exact Nofrendo fork or project source used by the build.
- Install the specified display, audio, SD and input libraries.
- Open the supplied sketch.
- Set the display, SD, I2S and input configuration for your board.
- Compile before connecting the complete battery-powered assembly.
- Upload over USB and observe the serial output using the project’s stated settings.
- Test the display, controls, SD card, audio and emulator independently.
The supplied sources do not verify the exact Arduino IDE version, ESP32 core version, emulator commit, Arduino_GFX version, GPIO map, baud rate, SPI frequency, I2S configuration or ROM directory structure. Those values should come from the linked implementation files, not from guesswork or a similar ESP32 project. If an old library fails to compile, first reproduce the original environment, then update one dependency at a time.
Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minutePC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Bring-up order
- Board upload: Confirm that a simple test sketch compiles and uploads.
- Display: Run a display-only example and verify color, rotation and backlight.
- Inputs: Print button and joystick states over serial.
- SD: List files and read a test file without the emulator.
- Audio: Play a test tone through the MAX98357.
- Emulator: Start with one legally obtained, known-compatible game file.
- Battery: Test the power system only after USB operation is stable.
This sequence isolates faults. If the complete system fails immediately, it is much harder to tell whether the problem is a pin conflict, software dependency, power sag or display initialization error.
Power, runtime and battery safety
The original report mentions a LiPo battery but does not establish its verified capacity, charger, regulator, runtime or safe charging arrangement. Do not copy a battery connection without checking those details.
Rank #4
- COMPREHENSIVE STARTER KIT: Includes an ESP32 development board and over 20 different types of electronic components and modules. This complete set provides everything you need to start learning electronics and building Internet of Things (IoT) projects, all organized in a convenient plastic storage case.
- POWERFUL ESP32 MICROCONTROLLER: Features a versatile ESP32 development board with an integrated dual-core CPU, Wi-Fi, and Bluetooth connectivity. This board serves as the core of your projects, enabling wireless communication and control for a wide range of applications from home automation to robotics.
- DIVERSE SENSORS AND MODULES: Explore your environment with a variety of included sensors. The kit contains a DHT11 temperature and humidity sensor, HC-SR501 PIR motion sensor, an IR infrared obstacle avoidance sensor, and a photoresistor light detection module for creating responsive, intelligent devices.
- INPUTS, OUTPUTS, AND CONTROL: Features an I2C OLED display for showing data, a 2-channel 5V relay module for controlling high-power devices (rated 10A 250VAC / 15A 125VAC), active and passive buzzers for audio feedback, various color LEDs, push buttons, and a potentiometer for precise analog input.
- PROTOTYPING ESSENTIALS INCLUDED: Get building right away with an 830-tie-point solderless breadboard, a bundle of male-to-male jumper wires, a USB cable for power and programming the ESP32 board, and a variety of common resistors. The kit is perfect for both beginners and experienced makers.
A rough runtime estimate is:
runtime ≈ usable battery watt-hours × conversion efficiency ÷ average system power
This is only an estimate. Brightness, volume, CPU load, SD activity, regulator efficiency, battery age and voltage sag all affect the result. A credible runtime figure must state battery capacity, display brightness, audio volume, workload and whether the system was measured or calculated.
Also check peak current capability, low-battery behavior, power-switch placement and whether the amplifier and backlight can be switched or dimmed. Brownouts commonly appear when the amplifier changes volume or the display backlight draws a transient current. Add appropriate decoupling and test the complete system on a regulated USB supply before using the battery.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.From breadboard to handheld
A breadboard is useful for proving the circuit, but it is a poor permanent platform for a device that will be carried and handled. Once the electronics work:
- Move to perfboard or a custom PCB.
- Provide strain relief for display, speaker and battery wires.
- Insulate the LiPo from solder joints and sharp enclosure edges.
- Leave access to USB, SD and the power switch.
- Mount the display behind a secure bezel.
- Check button spacing, joystick height and viewing angle.
- Place the speaker behind a grille without compressing it.
- Route noisy power and audio wiring away from sensitive display connections where practical.
- Do not add a heatsink unless testing shows a thermal problem.
A custom enclosure, controls and mechanical assembly may require more time than the ESP32 wiring itself.
ROMs and legal use
An emulator and the game data it loads are separate things. Do not link to unauthorized ROM sites or assume that downloading a commercial ROM is automatically legal because you own the original cartridge. Copyright, preservation and personal-copy rules vary by jurisdiction.
Free tools Windows power users keep installed
One-click scans. No signup required.
Use NES homebrew, public-domain material or legally dumped copies where permitted by the law that applies to you. Do not bundle commercial ROMs with project files unless redistribution rights are clear. The original article’s brief ROM disclaimer should not be treated as universal legal advice.
Best Value
- ESP32-S3 camera board: Dual-core 32-bit microprocessor up to 240 MHz, 8 MB flash, 8 MB PSRAM, onboard 2.4 GHz Wi-Fi and Bluetooth 5 (LE), USB-OTG, USB code uploader, camera, memory card slot (Comes with 1GB memory card and card reader)
- 3 sets of code: MicroPython, C and Processing (Java). Python is one of the most popular languages, and C is one of the most classic languages. Processing code needs to run on computers to provide graphical interfaces
- Detailed tutorial: Can be downloaded (in English, 828-page in total) or viewed online (original in English, can be translated into other languages by browsers) (The tutorial link can be found on the product box, no paper tutorial)
- 121 projects from simple to complex: Provides step-by-step guide with electronics and components knowledge, each project has schematics, wiring diagrams, complete code and detailed explanations
- 243 items in total: This ultimate kit includes the most commonly used electronic components, modules, sensors, wires and other compatible items
Troubleshooting
Blank or white display
- Confirm the controller selection.
- Check SPI clock, MOSI, MISO, chip-select, data/command, reset and backlight connections.
- Verify display voltage and logic levels.
- Try the correct rotation and color-order settings.
- Check reset timing.
- Look for conflicts with boot, flash, PSRAM, SD or USB pins.
Return to a display-only sketch before debugging the emulator.
Wrong colors or mirrored image
Check RGB/BGR order, rotation, controller initialization and whether the module is actually configured like the assumed ST7796S panel.
Controls do not respond
Check active-low versus active-high logic, pull-ups, continuity, GPIO conflicts, joystick calibration, dead-zone settings and debounce timing. A serial input diagnostic is the fastest way to separate wiring from emulator mapping.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Audio is silent or crackles
Check I2S pins, amplifier power, speaker impedance, ground integrity, buffer size, sample rate and the emulator audio callback. Test the amplifier independently.
SD card is not detected
Check formatting, chip-select wiring, shared SPI behavior, voltage compatibility, initialization timing, expected file paths and whether the display is holding the bus active.
Compilation fails
Common causes include obsolete library APIs, a mismatched ESP32 board package, missing emulator-specific files, changed Arduino_GFX interfaces or selecting an ESP32-S3 for code written for a classic ESP32. Reproduce the original software environment first, then modernize carefully.
Random resets
Investigate LiPo voltage sag, regulator limits, amplifier current spikes, inadequate decoupling, brownout detection, breadboard power distribution, boot-pin conflicts and watchdog resets caused by slow display or SD operations.
When to choose another platform
The ESP32 is a good fit for a focused NES-only appliance, a fast-booting low-power project and a hands-on lesson in SPI graphics, I2S audio, storage and real-time input. It is less attractive when the goal is broad retro-console compatibility or an easy library-driven setup.
A Raspberry Pi-class computer generally offers easier emulator installation, broader compatibility and more mature display and controller support, but uses more power, takes longer to boot and introduces a full operating system. A prebuilt retro handheld may be cheaper in total time than designing an enclosure and debugging a battery circuit. Choose the ESP32 when the embedded engineering is part of the goal—not merely when you want the quickest route to playing games.
Verdict
The project is practical, but the reliable way to approach it in 2026 is as a staged adaptation. Use the original TTGO, ST7796S, MAX98357, Nofrendo and SD-card architecture as a reference; verify every pin and software dependency from the actual implementation; prototype each subsystem separately; and replace the informal LiPo arrangement with documented charging, protection and regulation hardware. That produces a useful ESP32 NES handheld without pretending that an older project report is a current turnkey tutorial.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Scan for outdated or missing drivers - takes under a minuteDriver Scan →

