Finished Gameboy Pi Zero playing Pokemon Emerald on Gameboy Advance

Gameboy Pi Zero

Here’s my rendition of a Raspberry Pi Zero installed into a Gameboy shell along with the various bits e.g. LCD, buttons, audio amp, lipo battery, charging circuit. I’ve explicitly opted for a more traditional look with a smaller screen that fits in the case without major modification.

Parts

First things first I hit the internet in search of all the parts, bits and bobs I’d need. Hard to go past the center piece of the whole build and that’s the original Gameboy DMG case. Luckily it’s very easy to find newly injection molded DMG shells which are so incredibly cheap I couldn’t believe it! It even comes with the buttons and rubber membranes.

Next on the list was the Raspberry Pi, there was two options I considered; a Raspberry Pi Zero or a Raspberry Pi 3 A+. Raspberry Pi Zero is quite underpowered vs. the Raspberry Pi 3 however the Raspberry Pi 3 is a lot bigger and needed several connectors to be unsoldered to fit inside the Gameboy shell. I went with the Raspberry Pi Zero as it was less work and still has enough power to run all the games I wanted to play.

What good is a computer without a display! I spent so long looking for the right display I don’t even want to guess how long I searched. There’s a great many ways to go here; you can use a big screen that takes composite video (like a reversing camera display for a car), drill out the Gameboy shell to fit it and connect it very simply to the Raspberry Pi (just two wires). However these screens tend to have very average quality and poor viewing angles. Another option is LCD displays that communicate via SPI to the Raspberry Pi, these tend to have much better quality and viewing angles, and are digital as opposed to analog so are sharper and can offer faster refresh rates.

I ended up going for a 2.4″ LCD SPI display because I wanted a quality, nice looking display which is definitely is. It certainly is on the small side but I wasn’t keen on modifying the Gameboy shell to fit a larger screen as I was quite motivated from the start to try and stay true to the original look and feel of the original Gameboy for nostalgias sake.

The other parts slowly amassed; PCB with contacts for the rubber membrane buttons, USB sound card (the Raspberry Pi Zero has no analog audio output), speaker, audio amplifier for the speaker, lithium-ion battery, battery charger, and more. See below for a full list of all the parts I purchased and a link to where I purchased them.

NameDescriptionApprox. Price (USD)
Gameboy DMG shell (colorful versions here)The undeniably classic Gameboy DMG shell/case that we’ll be installing everything in$10
2.4″ TFT LCD 240×320 (w/ ILI9341 driver)The little LCD screen driven with SPI via the Raspberry Pi Zero’s GPIO pins$9
Raspberry Pi ZeroCertainly the brains of the operation, this little guy will run the Retropie linux image$10
USB audio sound cardRaspberry Pi Zero doesn’t have any audio out so instead you’ll need a USB audio sound card. I couldn’t find the one I brought but here’s a suitable alternative$4
Button PCBThis PCB mounts easily in the Gameboy shell just as the original PCB would and breaks out the signals for each button$4
SpeakerFor the most part original looking Gameboy speaker$3
Colourful buttons and rubber membranesBecause I’m going to add X and Y buttons I needed two additional buttons and rubber membranes$3
Micro USB breakout PCBBasically helps to easily mount a micro USB connector for charging$2
Lithium Ion charger moduleCharges and protects the lithium ion battery from over-discharge and most important, over-charging$2
5V boost moduleBoost our lithium ion’s 3.0-4.2V up to the required 5V to power the Raspberry Pi$2
3.7V 1800mAh lithium ion batteryI picked this size battery because it fit well into the Gameboy’s battery hatch with quite a bit of room to spare$10
Audio amplifier moduleAmplifies the audio signal from the USB audio card for the speaker. If you don’t want a external volume wheel then something smaller like this would be good$2
Volume wheel potentiometer 50KAllow us to adjust the speaker volume physically instead of controlling it digitally$3
3.5mm audio socketFor headphones to be plugged in$1
SwitchTo switch the power to the 5V boost module and consequently the rest of the system$1
WireIf you’re lucky and have wire on hand you then can just use pretty much anything as very little current is being used in a system like this$1

Altogether the parts cost approximately $67 USD (However that’ll fluctuate depending on buying things on sale, exchange rates etc.)


Button PCB

The button PCB makes this project significantly easier by slotting in where the original PCB would’ve and breaking out all the buttons, including provisions for X, Y, L and R buttons. Wiring this board to the Raspberry Pi is as simple as connecting the grounds and then each desired buttons output to one of the Raspberry Pi’s GPIO pins. I’ve included a pin mapping in the Wiring section below to help you with figuring out which pin on the button PCB goes to which pin on the Raspberry Pi.


Drilling Holes for X and Y Buttons

Handily enough the button PCB has small 1mm holes in the center of the X, Y, L and R buttons specifically to help with marking on the shell where to drill. I piloted with a 3mm drill bit first, after that I opened the holes up to 6mm. Lastly I got out the step drill and brought the holes to the final 11mm diameter needed for the buttons.

It’s most important to take this step nice and slow because a mistake could mean ruining the lovely Gameboy shell. Drill bits tend to grab and throw plastic while drilling so make sure to clamp the Gameboy shell down securely and drill using the lowest speed on your drill or drill press. Additionally, unlike what I did, I’d recommend to drill a small pilot hole and then go straight to using a step drill to get the holes to 11mm, they’re self centering and are great for drilling plastic.


X and Y Button Wells

Once the holes are drilled there needs to be a plastic well/guide that helps keep the buttons in place, stops them rotating and helps guide them when pressed. Consequently I printed this button well from thingiverse to be my guide. Once printed I snapped out the little drill guides in the center of the button wells I applied some superglue to the bottom, lined it up with the A and B wells and applied some force while it dried.

The 3D printed wells unfortunately do mean the buttons can graze up against the layer lines and provide a rough press but this is only when pressing the button on it’s edge and cocking it within the well. But, don’t let that scare you, they still work very well and it’s not been an issue for me while playing. A bit of careful sanding and you could probably get rid of the issue altogether.


LCD Holder

To hold the 2.4″ LCD in place I earlier whipped up this little print that glues into the shell and holds the LCD centered within the window for the screen. Firstly, I needed to use a 6mm drill bit to make quick work of the unneeded screw bosses that were used to screw in the original PCB and LCD. Once that was done the LCD holder can simply drop in with some superglue applied liberally to it’s underside.

Secondly, the LCD itself just drops and pops into this holder with the small plastic bosses fitting within the LCD’s screw holes. Thirdly and finally, a few dabs of hot glue ensure that the LCD stays put inside the holder. Also as you can see by this point I’ve attached the Raspberry Pi to the back of the LCD, I cover this more below in the Wiring section.

As you might’ve noticed the 2.4″ LCD doesn’t fit perfectly in the Gameboy’s shell as it’s aspect ratio doesn’t quite match the classic 10:9 ratio of the original. However, I felt that it was close enough that the fact the screen didn’t quite reach the top or bottom of the screen cutout wouldn’t ruin the experience too much.


Power Switch, Micro USB and Volume Wheel

Wanting this Gameboy Pi Zero to look slick while staying true to the original Gameboy look I tried to mount everything in a subtle way so from an initial impression you wouldn’t notice it wasn’t an original Gameboy… Well sorta, it’s a bit hard to not notice the extra buttons! The power switch utilizes the original switch, I simply mounted a small switch inside that is actuated by the original switch plastic piece.

Additionally, the micro USB socket for charging is hidden away in the “Ext. Connector” port. Lastly, the volume wheel potentiometer is mounted exact where it’s originally located. Correspondingly I very quickly and roughly designed and 3D printed some little mounts to help me out mounting the power switch and micro USB charging socket.


Wiring

Dread filled me when I set out in an attempt to make a tidy job of the wiring. The LCD only required power and 5 signal wires so it wasn’t hard to get it somewhat neat and tidy. However the buttons PCB had 10 signal wires and ended up resembling a rats nest more than I would’ve liked. The rear shell was also a bit of a nightmare; the battery charging module, 5V boost converter, power switch, audio amp, volume wheel, USB audio card all unquestionably had to fit in! I’m not massively in love with where I ended up but it’s functional and not as bad as I feared.

I decided on piggybacking the Raspberry Pi Zero to the back of the LCD as it put it conveniently within short wiring distance from the LCD’s pins and the button PCB’s pins. Everything else ended up on the rear shell, the USB sound card ended up tucked in a small free space near the side of the battery compartment. The audio amplifier is sat in the very bottom of the cartridge slot. The 5V boost module, lipo charging module and micro USB charging socket are sitting on top of the metal plate that covers the cartridge slot, obviously I put some tape on the bottom these modules as shorting them to the metal plate wouldn’t have worked out well!

For the purpose of making your life easier should you embark on a project like this I have included two wiring diagrams; firstly, a wiring diagram of the USB lipo charger, 5V boost converter, LCD and Raspberry pi and secondly, a wiring diagram of the USB sound card, audio amplifier, volume wheel and speaker.


Also here’s a pin mapping for the connections I made between the LCD and the Raspberry Pi, and the Buttons PCB and the Raspberry Pi:

LCD PinRaspberry GPIO Pin Number
GND25 (or any GND)
VCC1 (3V3)
CLK23 (SPI0_SCLK)
MOSI19 (SPI0_MOSI)
RES26 (SPI0_CE1)
DC22 (GPIO25)
BLK12 (GPIO18)
MISONot connected
Buttons PCB PinRaspberry GPIO Pin Number
Up18 (GPIO24)
Down29 (GPIO5)
Left31 (GPIO6)
Right33 (GPIO13)
Start35 (GPIO19)
Select37 (GPIO26)
A40 (GPIO21)
B38 (GPIO20)
X36 (GPIO16)
Y32 (GPIO12)
LNot connected
RNot connected
GND30 (or any GND)

Software

If you read my post on my Mini Arcade Machine then you’ll notice this is the exact same software as I used for it. The lovely folks at RetroPie developed a linux image that easily installs onto a Raspberry Pi (Zero, 3 or 4) and gets you up and running with all the emulators and an amazing, customizable user interface for going between emulators and potentially the thousands of games per emulator depending on what/how many games you install.

  • RetroPie – a full linux image for the Raspberry Pi with emulation station preinstalled
  • mk_arcade_joystick_rpi – an application that will read the button presses via the Raspberry Pi’s GPIO and accordingly convert them into key presses that EmulationStation can understand

Finished Gameboy Pi Zero

In conclusion, I’m very happy with how it came out! It looks like an original Gameboy (if you ignore the X & Y buttons) until you switch the power on and find thousands of games across several console emulators! It’s a whole bunch of fun to sit down and relive some games that I remember so fondly from childhood.

Games run great on the Raspberry Pi Zero, probably won’t be playing any Playstation games anytime soon but it’s cool to think it can. The volume wheel and headphone jack both work great. Battery life is fairly okay at around 3-4 hours, there’s quite a bit of spare room in the battery well for a bigger battery in the future however if I can manage to find one that fits well.

I still need to add the L and R buttons to the rear shell at some point so I can play more games. I’d also like to either buy or 3D print a Gameboy cartridge so I can fill the empty slot on the back, I think it’ll complete the look.

I hope you enjoyed this post and are inspired to make your own Gameboy Pi Zero! Finally, here’s some photos of my (mostly) finished Gameboy Pi Zero:


If You Liked This

You might also want to check out my Mini Arcade Machine build.

1 thought on “Gameboy Pi Zero”

Comments are closed.