I Made a Custom Handheld Retro Gaming Console

Using a Wii-U Pro controller, Raspberry Pi and a 3D printed enclosure. It can emulate games from N64, PS1, SNES, GBA and more!

Finn Andersen
7 min readAug 19, 2018

Overview and Features

I came across a few similar projects online (such as Ben Heck’s build) and figured it would be a really cool thing to try and make. Many others involved fully 3D printed enclosures but ended up looking kind of blocky because unless you’re a CAD wizard it’s difficult to make really sleek-looking ergonomic designs. I figured I’d take advantage of someone else’s hard work by using an existing console controller and attaching an enclosure for the screen and other electronics. The Wii-U Pro controller has lots of space inside it and there are plenty of knock-offs on eBay so I went with that. The result actually turned out really well considering all the complexity and constraints!

Starting off with the finished product and some high-level features:

  • Uses Raspberry Pi 3 with RetroPie image to emulate games
  • Li-Ion batteries and charging circuit and charge indicator lights
  • 5 inch 800x400px screen
  • HDMI output for playing on TV
  • Stereo speakers and headphone jack output
  • Mini fan for cooling
Side and back views

Parts List

These are the major components used in the build:

  • Off-brand Wii-U Pro Controller
  • 5 inch 800x480 reverse parking screen
  • Raspberry Pi 3
  • 2x 18650 Li-Ion Batteries
  • Powerbank power management board
  • Teensy microcontroller (or Arduino Micro)
  • 5v audio amplifier module
  • 2x mini speakers (e.g. for laptop)
  • 5v mini relay
  • USB Soundcard

Build Process

The first step was to take apart the Wii-U Pro controller to see what I was working with and what I could fit in there. I used a dremel tool to do lots of cutting and grinding so that the batteries would fit in the hand grip area, it was very tight.

Controller Input

Next I had to think about how I was going to interface with the controller buttons and joysticks. The controller only supported Bluetooth connection (could not natively work as a wired USB device) and it seemed to not work properly with anything other than an actual Wii. Therefore it was time to get super hacky and replace the controller’s brain with a new one — a Teensy micro-controller which reads all the button input states and acts as a USB input device to the Raspberry Pi. Details on how to implement this on the Teensy can be found here.

I also decided to re-purpose the player indicator lights on the controller as battery charge level indicator lights.

Interfacing the Teensy with the controller input signals, and power management module with indicator LEDs

Video Output

This was going to be a compact build so the Raspberry Pi had to lose some weight, so I cut off the GPIO pins and most of the USB hub. I then tested it with the car reversing screen which has a simple composite video input which the Raspberry Pi provides. The screen normally runs on 12v from the car battery, but it’s possible to get it working with 5v or 3.3v depending on the particular model.

Trimming down the Raspberry Pi and testing out the screen

Audio

I wanted to have the option of using either loudspeakers or headphones. It seems that the audio output from the Raspberry Pi is ‘line-level’ meaning it’s not amplified enough to even power headphones to any suitable volume level. Therefore I decided to use a USB Soundcard to provide audio which goes through an analogue volume control wheel, then through the headphone jack, and finally to a mini amplifier for the speakers. This means that when headphones are plugged in, the audio signal to the amplifier is disconnected. The speakers are placed inside the controller body so audio passes through the gaps around each joystick.

Power

Achieving an effective power management system was challenging, turns out it’s tough to make an uninterrupted-style power supply that supports use-while-charging and seamless transition between battery and external power source (like you’re used to with many consumer devices). The Adafruit Powerboost looks like it would be ideal but doesn’t support higher current requirement of the Raspberry Pi 3 along with simultaneous battery charging.

I found a powerbank charging circuit which supported ‘pass-through’ power (apparently not that common) but it appeared that the charging input and power output had separate ground levels and it would die if they were connected together (which is what would happen if they were both connected to the Raspberry Pi power input). Long story, but in the end I had to introduce a mini relay which physically cuts the connection from powerbank output to the Raspberry Pi when external power is provided.

Designing and Printing the Enclosure

Now that I’d identified all the components that I would need, I measured their dimensions and designed an enclosure to hold them in the most compact and functional way possible. I also traced out the curved contour of the top of the controller so that it aligns seamlessly. It took a long time with countless tweaks but was very rewarding in the end!

One day it’s just a model on my computer then a few weeks later I’ve got the real thing in my hand (I used an online high-quality SLS printing service). What a time to be alive.

Connecting it all Together

Now comes the moment of truth to see whether all my measurements and planning were accurate. It was definitely a tight fit with the wires added, but it made it! In the upper enclosure:

  • Rapsberry Pi upside-down with connections for power, audio/video output and USB connections
  • Powerbank power module to the left, with charge indicator signals connected to LEDs on controller
  • Headphone back at bottom right

In the controller body:

  • Batteries
  • Audio Amplifier in the middle
  • Teensy micro-controller underneath
  • Extra USB port accessible through battery compartment
  • Speakers on the far right and left
Not so pretty on the inside

This circuit diagram of the of the GameBoy Zero project from Sudomod is pretty similar, it’s just missing the controller input part with the Teensy microcontroller.

GameBoy Zero component schematic

One More Thing

After putting it together and doing some testing I soon discovered that the system was prone to overheating. The Raspberry Pi is notorious for running hot (especially when pushing its hardware to the limits for better emulation…) and even though I added ventilation holes to the enclosure, it was super dense in there and air was not flowing through. Therefore I added a mini cooler fan to the outside of the enclosure, it’s connected to the Raspberry Pi which is running a Python script to automatically turn it on when the CPU temperature gets high.

Keeping cool

Software Configuration

The hardware build for this system was challenging but that’s only half the work, the software side can keep you busy for much longer. RetroPie is a customized operating system image for the Raspberry Pi which contains all the drivers, emulators, configuration and front end interface for playing retro games.

It’s a great system and works well ‘out of the box’ but you can also spend endless frustrating hours configuring and tweaking it for optimum performance and customization, such as:

  • Boot configuration for increasing CPU/GPU clock speed and other settings for optimum emulation performance
  • Custom controller mapping configuration for all different emulators
  • Custom Emulation Station theme & layout
  • Downloading & organizing box art and video previews for games

Time to Play!

This project has proven to be one of my most challenging but also rewarding, employing a diverse range of engineering skills from power supply and audio circuitry, micro-controller programming and interfacing, CAD design, thermal management and embedded Linux. Now it’s finally finished, and I’ve probably spent more time designing/building and configuring the system than I ever will playing it, but either way it’s worth it and I’m very proud of the result. Hope you like it too and thanks for reading!

--

--