Adafruit’s new “Joy Bonnet” for the Raspberry Pi Zero, together with a 3D-printed case, and a little bit of soldering, makes for an easy micro gaming console project, based on the open-source RetroPie/EmulationStation software. Here’s the finished project:
While the Raspberry Pi Zero (actually the “W” model in this case with on board WiFi and Bluetooth connectivity) isn’t nearly as powerful as the latest Raspberry Pi Model 3, it runs NES, SNES, and Atari game console emulators just fine.
To build this console-in-a-controller, you’ll need the following parts:
- Raspberry Pi Zero W — Adafruit usually shows out-of-stock, but just sign up at the “notify me” link and they’re usually back in stock in a couple days or so.
- Adafruit’s Joy Bonnet game controller shield.
- 40 Pin 2 x 20 Header GPIO Jumper I/O Connector For Pi Zero (search for these on eBay, usually available for around $2.45 with free shipping).
- 8 GB or larger Micro SD card.
- Mini HDMI to HDMI adapter or adapter cable — the Raspberry Pi Zero’s HDMI connector is a mini connector; not the more familiar full-size connector.
- Recommended: a PC board stand-off. The Joy Bonnet game controller shield connects to the Raspberry Pi Zero via the 40-pin GPIO block on one side of the PCB. That leaves a ~ 5 mm gap between the two boards on one side. With all the button-mashing you’ll be doing, you’ll want the stand-off to keep the two boards aligned. These stand-offs are cheap, buy them on eBay for a few dollars for a set.
That’s it for the parts. I’ll cover assembling the parts first, then the software configuration.
Start by soldering the 40 pin GPIO block to the Raspberry Pi Zero. The Joy Bonnet shield already had a connection block attached to the PCB, so once you’ve soldered the pin block to the Pi, you just press the controller shield onto the RPi pin block.
It helps to have a tool like below to hold the PCB and a magnifying glass to see the pins clearly. If you solder the pins correctly, the solder will flow into the hole around the pin connection, and you’ll have a nice, shiny bit of solder around the base of the pin.
Important: the pins on the PCB block are a bit on the long side, so you’ll want to trim them as close to the RPi PCB as possible, so that the Pi board will fit into the bottom case part.
Next, you’ll want to trim a PC stand-off to about 5 mm in length, to act as a support between the two circuit boards, on the side of the RPi PCB opposite the GPIO header. Fasten the stand-off using a screw to the top side of the Joy Bonnet PCB. Here’s a picture to better illustrate this. This picture shows the screw attached on the bottom of the RPi board, but that’s a mistake; it’ll interfere with the stand-offs I designed into the case.
Also, I ended up using a screw with a lower head height, but that’s not really critical.
With this done, you’re ready to print the case, or order from an online print service, or make use of a 3D printer at a library, participating UPS store, etc. I’ve uploaded the STL files to Thingiverse here. The case was designed using Autodesk’s 123D Make CAD software to dimensions that allow for some tolerance between different printers. If the case is a little too small or large, try scaling the model files by a few percent. This case is designed with thick walls to withstand rougher handling.
Once all parts are printed and fit tested, you might want to sand or file the join edges between the case halves for better adhesion. Since I printed the parts in PLA plastic, super glue works well to bond them together, as shown above.
Next up: loading the software onto the Micro SD card. Start with the latest RetroPie image. Make sure you download the appropriate image file — in this case for the Pi Zero — directly from the RetroPie web site. If you’re using Windows, you’ll want to use software like Win32DiskImager to write the image file you’ve just downloaded to the SD card.
Connect a keyboard, display, and power to your RPi and boot up. If it works, the Raspbian OS will load first, then run EmulationStation, and finally RetroPie. Exit RetroPie to get to the console. It’s easier at this point if you configure your RPi for wireless connectivity. This article explains how. When you’ve got your RPi connected to your wifi network, come back here.
Next, you need to install some custom software and configure RetroPie to use the Joy Bonnet as an input device. Adafruit has a page with the steps here; but basically you’re running a script from the console, with your RPi connected to the Internet.
Reboot again and RetroPie should recognize your button presses. Of course, at this point you haven’t transferred any game images, so none of the emulators appear as options. I find it easiest to obtain the RPI’s IP address from within the app, under “Settings”, then use WinSCP (or equivalent for Windows) to transfer the ROM images you own to the appropriate emulator folder on the RPi.
That’s it! Enjoy some classic gaming on a console that fits in your pocket.