Thingtendo - a Game & Watch Clone Using ESP32 S3
by lonesoulsurfer in Circuits > Microcontrollers
524 Views, 9 Favorites, 0 Comments
Thingtendo - a Game & Watch Clone Using ESP32 S3
When I was a kid I was lucky enough to get for Christmas one year a Nintendo Game & Watch. It was Donkey Kong Jr (DK-JR) and I played that thing until I clocked it!
Fast forward to 2026 and I still have it in my collection of vintage handheld games. However, they are starting to get old and I don’t really want to take the chance of breaking something when playing them, so I decided to build my own.
After a little research I stumbled across GitHub Repo that had the beginnings of what I was looking for.The one thing that it didn’t have through was DK-JR so it meant I’d have to do a deep dive and add it myself.
Whist working on the build, I decided to add a few more of my favourite G & W games to the platform, including; Mario Bros, Balloon fight and … (4 in total). The thing that these games all have in common is the button layout which made it easy to include them.
This build is a little tricker then other ones that I have done. The reason being, I can't provide the ROM's of the Bin files that you need to flash to the ESP32-S3 because they are copyrighted. This will mena that you will need to source your own (internet is your friend here. Check out the Internet Archive...) and create bin files along with the artwork etc. I have provided a file called 'Claude Guide' which you can find in my GitHub Repo. Add this to Claude along with a link to the repo and ask it for help creating the required files. From there it is straight forward.
Supplies
As usual in a project like this, I have provided the list of parts in a PDF which you can download. I find that this is easier to read and use. I have included links to all of the parts which I purchased from Ali Express.
Just download the PDF in this step and order your parts where required
Check out the next step to get your PCB, front & back panels manufactured
Downloads
Getting the Boards Printed
We all have different levels of knowledge, so when it comes to a build like this I want to make sure that I'm providing enough information so anyone with some basic soldering skills can make it. That includes ensuring there are instructions on how to get your own PCB's printed (which is super easy!)
So with that said, the first thing you will need to do is to get the front panel and PCB printed. I use JLCPCB (not affiliated) to get this done. The front panel is actually just a PCB without any components included! The front panel design is done in a program called Inkscape (available free) and the panel including the drilled holes is done in Fusion 360 (also free!)
STEPS:
- The files that you need to build Thingtendo can be found in my GitHub Repo so if you haven't already, download the repo to your desktop.
- Send the Gerber files (3) to a PCB manufacturer like JLCPCB (not affiliated!) who will print the 3 panels for you. There are other PCB manufacturers so use the one you want.
- when choosing the surface finish pick Lead Free HASL as this will ensure that there is no lead in the panel or PCB.
- You can pick whatever colour you want to choose for your front panel and PCB. I chose black.
- If you have no idea what any of the above means , then check out the Instructable I made on how to get your broads printed which can be found here.
Adding the Switches & Male Heading Pins to the Front Panel
The biggest difference between this build and similar ones that I have done is, I have added the directional and control switches to the front panel! this has meant that I have had to add an additional male header to connect these switches to the ESP32-S3
STEPS:
- Solder each of the 5 momentary switches into place. These are the through hole ones.
- There are also 3 SMD momentary switches for time, A and B. Carefully solder these into place as well. I find the best way to do it is to add solder to each of the solder pads on the board then solder 1 leg of the switch down and then the other pressing down on the switch whist doing so.
- You can now add the male header to the front panel. When doing this we don't want to see any solder or pins coming out the top of the front panel so I did the following:
- there is a plastic shroud around the pins, push this up until just the top ofthe pins are showing
- put it into the boad and run for finger across the top, if you can just feel the pins you can then add solder to each to secure them into place. Solder 1 first and make sure the pin header is sitting straight before soldering the rest into place.
- In the next step I slightly trim the tops of the header pins on the TFT screen. You don't need to do this for these pins as they sit lower then the ones n the TFT screen.
Adding the Screen to the Front Panel
The following step ensures that you can remove the front panel easily and without having to de-solder anything. This is important, especially for maintenance, battery changes, troubleshooting etc.
STEPS:
Adding the screen to the panel
- On the front panel, there are 4 holes where the TFT screen will be attached. Add a 20mm M2 screw (I like to use hex socket head screws) to each hole and then add a M2 nut to secure the screws into place.
- Before adding the screen, trim the tops of the pin header that is soldered to the TFT screen. This will ensure you get a nice low profile when the screen is added to the PCB. I only took off about 2mm from the ends of the pins.
- Place the screen on top of the screws and align it to the front panel. The screen should sit flat to the front panel as the nuts you added earlier act like spacers.
- Now - you need to add a small M2 spacer (5mm) to each of the screws.
- You can now add the low profile female header pins to the male ones on the TFT screen.
- Don’t solder the female header pins yet to the PCB, we’ll do that near the end
Adding the ESP32-S3 Zero, Amp & Charging Module to the PCB
STEPS:
- Solder the male header pins to the ESP32-S3.
- Place into the PCB and solder the male header pins into place
- Now onto the charging and voltage booster module. This board is a changing module and a buck booster all in one. First, let’s set the output voltage to 5V from the Charging & voltage booster module. Connect the module up to a power source (this could be mobile phone battery, variable power source or whatever you have around, as long as it is lower than 5V’s)
- Now with a multimeter, check the voltage output. You need to try and get as close as possible to 5V’s so turn the potentiometer until you reach 5Vs.
- Now you can add the module to the PCB. I added a little superglue to the bottom of the board to ensure it was secured into place
- Add some solder to each of the solder points on the module and then add some wire from a resistor leg to each solder points.
- Bend the wire down so it is touching the solder pad on the PCB and trim.
- Add solder to the solder pad on the PCB and connect the wire to each. This will give you a good strong connection.
- Solder the slide switch into place
Adding Power
I usually use recycled mobile batteries that I have havescavenged from e-waste. In this build I used an old camera battery which works well as it is a low profile battery. No isses with using a li-po battery - just make sure that it will fit into the space that you have on the board whichis about 40mm X 40mm
STEPS:
- Add some solder to the battery solderpoints on the PCB
- Add a little solder to each of the solder points on the battery. Try and do this quickly as you don't ant to melt the plastic around the solder point on the battery too much
- Add a couple resister legs to each of the soler point son the battery (I had to use wire as my battery didn't align right with the solder point on the PCB)
- Add a little glue to the back of the battery and stick it into place onthe PCB, ensuring the resistor legs are connecting to thesolder points on the PCB.
- Finish soldering everything
Flashing the Firmware Onto Your ESP32-S3 Zero
This step covers writing the pre-built firmware files onto the ESP32-S3-Zero using esptool, a free command-line tool from Espressif (the makers of the ESP32 chip). This works the same way on Windows, Mac, and Linux — the guide below uses Windows commands, with Mac/Linux equivalents included.
You do not need Arduino IDE or any other software for this step — just Python and esptool.
What You Need
- The 4 firmware files from the release: bootloader.bin, partition-table.bin, ota_data_initial.bin, gandw_handheld.bin. These can be found on the GitHub Repo
- A USB cable that can carry data (not a charge-only cable)
- Python 3 installed on your computer (python.org — during install on Windows, check the box "Add Python to PATH")
1: Install esptool
Open a terminal (Windows button + R on your keyboard) (Command Prompt on Windows, Terminal on Mac/Linux) and run:
Confirm it installed correctly:
You should see a version number printed (e.g. esptool v5.3.1). If you get an error instead, double check Python installed correctly and is on your system PATH.
2: Plug In the Board
Connect the ESP32-S3-Zero to your computer via USB.
3: Find the Serial Port
Windows: Open Device Manager, expand "Ports (COM & LPT)". Look for something like "USB Serial Device (COM4)" or "Silicon Labs CP210x (COM3)" — note the COM number.
Mac: Open Terminal and run ls /dev/cu.* — look for something like /dev/cu.usbserial-0001 or /dev/cu.SLAB_USBtoUART.
Linux: Run ls /dev/ttyUSB* or ls /dev/ttyACM* — note whichever device shows up.
If nothing shows up on any platform, your computer may need a driver for the board's USB-to-serial chip. Check your specific board's listing/documentation for which chip it uses (commonly CP210x or CH340) and search for that chip name plus "driver" for your OS.
4: Navigate to the Firmware Files
In your terminal, cd into the folder containing the 4 downloaded .bin files. For example, on Windows:
Confirm all 4 files are there:
Windows: dir *.bin Mac/Linux: ls *.bin
5: Flash It
Run the following command, replacing COM4 with your actual port from Step 3 (on Mac/Linux, use the port path instead, e.g. /dev/cu.usbserial-0001 or /dev/ttyUSB0):
You should see the tool connect to the chip, then write and verify each of the 4 files in turn, ending with something like:
That means it worked. The board will reset automatically and boot into the new firmware.
Troubleshooting
"No such file or directory" for one of the .bin files — you're not in the right folder. Repeat Step 4 and confirm with dir *.bin / ls *.bin before flashing.
It hangs at "Connecting..." and never proceeds — some ESP32-S3 boards need to be manually put into bootloader/download mode before they'll accept new firmware. If your board has BOOT and RESET buttons: hold BOOT, tap RESET, release BOOT, then re-run the flash command. Not every board needs this — some reset into bootloader mode automatically — but if the plain command hangs, this fixes it.
Permission denied (Mac/Linux only) — you may need to run the command with sudo, or add your user to the dialout group (Linux):
then log out and back in.
Confirming It Worked
Once flashed, the screen should power on and show the game selection menu. If you have your buttons and screen wired up already, you should be able to navigate and start playing immediately.
Putting the Panels Together
How to Play
How to Use Your Game & Watch Handheld
1: Power On
Slide the power switch to ON. After a moment the game selection menu appears on the screen.
To charge the battery, plug a USB-C cable into the charging port.
2: Choose a Game
The menu shows one game at a time, with its name and year at the bottom of the screen. There are 13 games:
- Donkey Kong Jr. (1982)
- Balloon Fight (1986)
- Climber (1986)
- Super Mario Bros. (1986)
- Ball (1980)
- Helmet (1981)
- Parachute (1981)
- Octopus (1981)
- Popeye (1981)
- Fire (1981)
- Turtle Bridge (1982)
- Tropical Fish (1985)
- Mario the Juggler (1991)
Press Left or Right to scroll through the games. Press Jump to load the game shown on screen.
When a game loads, it first shows the clock screen, just like the original Game & Watch.
- Press Game A to start the normal game.
- Press Game B to start the harder, faster version.
4: Play
The controls depend on the game.
Donkey Kong Jr., Balloon Fight, Climber and Super Mario Bros.
- Use the D-pad (Up, Down, Left, Right) to move.
- Press Jump to jump or perform the game's action.
Tip for Donkey Kong Jr.: to grab the key at the top of the screen, walk to the left edge of the top right branch. Wait until the key swings closest to you, then press Jump + Left together.
All other games (two button games)
These games were originally played with just a left and a right button. On this handheld:
- D-pad Right moves left.
- Jump moves right.
This puts one button under each thumb, just like the original handhelds.
5: The Time Button
The Time button is your function key. On its own or combined with another button, it gives you extra features.
Control What it does
Tap Time Pause or resume the game
Time + Left Volume down
Time + Right Volume up
Hold Time + Down for 2 seconds Return to the game menu
Hold Time + Up for 2 seconds (in a game) Continue after a game over
Hold Time + Up for 2 seconds (in the menu) Turn colour mode on or off
6: Pause
Tap Time quickly during a game. The screen freezes and the sound stops. Tap Time again to carry on playing.
You can still return to the menu while the game is paused by holding Time + Down for 2 seconds.
7: Adjust the Volume
Hold Time and press Right to turn the volume up, or Left to turn it down. This works in the menu and during a game.
8: Continue After a Game Over
Lost your last life? Don't give up. Within about 10 seconds of the game ending, hold Time + Up for 2 seconds. The game jumps back roughly a few seconds, to a point where you still had lives left.
Your score also goes back to what it was at that point.
9: Colour Mode (Easter Egg)
The original Game & Watch screens only showed black on grey, but this handheld has a hidden colour mode.
- Go to the game menu.
- Scroll to the game you want in colour.
- Hold Time + Up for 2 seconds. You will hear a beep.
- Press Jump to start the game in colour.
10: Return to the Menu
To switch games, hold Time + Down for 2 seconds during play. You will return to the game selection menu.