technologies used: raspberry pi, retropie
/* This post originally appeared on my blog, which has been discontinued. I wanted to preserve it in its entirety in case it is useful to anyone. */
A while ago, I followed Adafruit's tutorial to make their PiGRRL Zero, a portable game console similar to a Game Boy based on the Raspberry Pi Zero. Unfortunately since it's been some time since assembling it, I am lacking in build pictures and the process isn't fresh in my mind. However, I wanted to document the process before I entirely forget and lose it, and offer some insights on problems I ran into.
The PiGRRL Zero will cost you about $100 to build and can emulate SNES, GBA, and lower pretty successfully. Number of games you can fit depends on the size of MicroSD you buy, but you can get quite a bit on there. It does not have sound built-in, but you can buy a headphone adapter (or take a look at this guy's model which he put speakers in.) It's not going to compete with a commercially made system (like the 3DS), but half the fun is making it and building it your way so it's still well worth it.
I used all of the recommended parts, except I substituted the 2500 mAh battery for the 2000 mAh one. I would highly recommend this, as you get an extra 25% battery life with the only downside being components a bit tighter and harder to pack in (but it is possible without modifications or too much difficulty.) I did manage to get some of the quiet buttons partway through the build and am using those for the shoulder buttons. These were not offered at the time I originally ordered the parts, so the D-Pad and A, B, X, Y buttons are the loud, clicky variety. I would also recommend the quiet buttons as the recommended ones are a bit noisy. It's not problematic in most situations, but if you're playing in bed and your spouse is trying to sleep next to you, they will likely be annoyed. If wife aggro is a concern, you have been warned.
I don't own a 3D printer, but I have a friend that does. He printed all the parts in PLA, as he was having trouble with Ninjaflex. The hard buttons feel fine (truer to original SNES controllers). Adafruit has a special file for the Dpad if you're making a non-Ninjaflex version, but I didn't use it and didn't have any issues with the Dpad. I did have to cut the A/B/X/Y buttons apart to stop an issue I was having with one button sometimes also pressing others.
30 gauge wire is just lovely for the tight spaces here, but finding a wire stripper that strips 30 AWG is harder than you might think. I didn't start off with one and couldn't find a stripper for such fine gauge wire at any local stores, so I ended up ordering the one Adafruit recommends from Amazon ($10 as of this writing) for the free shipping and also picked up the diagonal cutters. I'd recommend both. The cutters are especially great, and I've used them since to trim off tough legs of pots, cut PCB, and all sorts of things. I did not have 26 gauge wire laying around and used 24 gauge in place. That did the trick, but it was tough to solder to some of the small points and more of a pain than finer wire. I didn't use any heat shrink or tack and wouldn't bother buying any.
Overall, assembly was easy. The microSD card sticks out just enough to kind of block the Dpad PCB, and as discussed earlier, the larger battery makes things at the bottom pretty tight so be patient and willing to gently nudge things into place. I want to make two main points here: I had a fair amount of trouble getting the screws to really secure in the 3D printed case, and I found the tack to be completely insufficient. I ended up just getting the screws in as best as I could and hot gluing the shit out of everything. I initially tried using tack on the non-screwed-in components, but they were too wiggly when plugging things in/out, etc. So I hot glued those as well. The inside is an ugly hot glue mess, but luckily you can't tell that from the outside.
I had the top cover printed in green and all other parts printed in black. This turned out to be great because the PiGRRL does not have a low battery indicator on the LCD screen whatsoever. This makes sense, Raspbian on the Pi has no idea that it's being powered by a battery, but this is still less than ideal. With the green PLA, the red LED of the Powerboost shines through enough to realize when the battery is low. (If you want to use a color that won't allow the LED to be seen, Martin O'Hanlon has a great post about how he got an icon on screen to indicate a low battery.)
I really like the look Adafruit got from have the A/B buttons a different color than the X/Y buttons, so I spray painted the X/Y silver. I also spray painted the Start/Select button row the same silver as I thought it looked better. For the labels on the top of the case, I used clear address labels you put in your printer like these and cut them down to size and stuck them on. The font is Pixel Twist by Simon Murdoch. After that, I coated every piece in a few coats of satin finish. This sealed the labels and paint on. The satin had a better look and feel than matte or glossy.
This was generally smooth also, but a couple of things worth pointing out. Windows has trouble unzipping the OS image, as described in the Adafruit forums. They provide this file, which should work properly in Windows. The second thing is that save states were not enabled in that file, or at least they didn't work for me. To enable this, add the following lines to
input_save_state = q
input_load_state = w
With those in place, pressing Select + L will save state and pressing Select + R will load state. I would highly recommend completely relying on states as the emulators do support in game saves, but I had difficulty with certain ROMs not saving properly. Specifically, I ran into the game thinking it saved correctly, no errors, no problems with the emulator and when I launched back into that ROM to load... there was no save. Frustrating experience, easier to just use save states which will always work. The other setting I would recommend changing right away is disabling "Wait for network" on boot which is done in raspi-config. Given that the PiGRRL generally won't be online at any given time, this just results in the Raspberry Pi wasting time waiting to connect to a network instead of displaying your beautiful splash screen. Speaking of beautiful splash screens, here's the one I made and am using. Feel free to use it yourself if you like.
So with it all built, how's it play you're probably wondering. It's pretty smooth with very few issues. There can sometimes be slight input delay (not much, but noticeable), especially on more taxing games. I mostly play GBA games like Pokémon Leaf Green and Advance Wars on mine. It's certainly serious enough that almost a year later I'm still playing it. I have had to open it a couple of times and resolder or glue some things. I wouldn't recommend it for children or non-tech savvy for that reason. It will require some maintenance. However, although it requires a decent familiarity with Linux to set up, once it's up and running you don't really need to launch into Linux ever.
I'll end this with the pics: