Hello there. I’m Grhmhome and today I’m going to show you how you can make your own Pico 8 handheld. This will be a long written guide, but hopefully, this will help people who want to make a Pico 8 handheld.
Before we start
Warning! This is for educational purposes only and this project will be using a Lithium-ion battery. Don’t try this at home if you aren’t experienced with soldering and/or working with Lithium-ion batteries as they can explode! This project is not for beginners. This project is not endorsed by Lexaloffle! There is no guarantee that you will successfully make a Pico 8 handheld by following this guide. If there are any errors in my guide, please let me know and I will make any changes to this post.
This is what the handheld should look like in the end if you follow this tutorial:
What you will need:
- Soldering iron
- Solder and flux
- Helping hands to hold the parts you are trying to solder. You don’t need helping hands, but it helps me out when I use them.
- Hot glue gun for keeping the power switch in place
I personally use the soldering iron linked down below, and it comes with lead-free solder. It works great and comes with helping hands to hold the boards and wires you are trying to solder
https://www.amazon.com/dp/B082F1RKTM – YIHUA 926 III Digital Soldering Iron Station Kit
I used this flux pen and it works well.
https://www.amazon.com/dp/B07B53LNGX – Chip Quik CQ4LF Liquid Flux No-Clean in 10ml
You will need access to a 3D printer or 3D printing service or see if someone like a friend or family member could 3d print you the front shell, buttons, and backplate.
Parts list for the handheld (Amazon US):
- https://www.amazon.com/dp/B07Y8JBMY2 – Fancasee (2 Pack) Replacement 3.5mm Male Plug to Bare Wire Open End TS 2 Pole Mono 1/8″ 3.5mm Plug Jack Connector
- https://www.amazon.com/dp/B01EV70C78 – ELEGOO 120pcs Multicolored Dupont Wire 40pin Male to Female, 40pin Male to Male, 40pin Female to Female Breadboard Jumper Wires Ribbon Cables Kit Compatible with Arduino Projects
- https://www.amazon.com/dp/B00B88CB00 – Gc Electronics Board Type: Prototype Board – 22-516 – You don’t need this exact one, just something to solder the buttons and wires to
- https://www.amazon.com/dp/B07VSNN9S2 – 120 Pcs QTEATAK 6 x 6mm x 5mm Momentary Tactile Tact Push Button Switch for PCB 4 Pin DIP Black
- https://www.amazon.com/dp/B081GL2Y7Z – 180Pcs M2.0 Series Laptop Screws Notebook Screws Set
- https://www.amazon.com/dp/B07DBXMFSN – Waveshare 1.5inch RGB OLED Display Module
- https://www.amazon.com/Adafruit-PowerBoost-1000-Charger-Rechargeable/dp/B01BMRBTH2/ – Adafruit Powerboost 1000C
- https://www.amazon.com/dp/B01NAX9XYG – Adafruit 328 Battery, Lithium-Ion Polymer, 3.7V, 2500mAh
- https://www.amazon.com/gp/product/B00NAY3O9M/ – Adafruit Breadboard-Friendly SPDT Slide Switch [ADA805]
- https://www.amazon.com/dp/B00LN3LQKQ – UGREEN Micro USB 2.0 OTG Cable On The Go Adapter Male Micro USB to Female USB
- https://www.amazon.com/dp/B00NMXY2MO – Plugable USB Audio Adapter with 3.5mm Speaker-Headphone and Microphone Jack
I use a 32 Ohm speaker that I bought on Mouser.com
You can use another 32 Ohm speaker, but it needs to be 1 inch (25.4mm) in diameter or smaller if you plan to use my 3d printable shell.
You will also need a Raspberry Pi Zero W so you can remotely SSH into the system. You could buy one on Amazon, but they tend to be more expensive as they come in a kit. Also, you will need a heatsink for the Pi Zero if you want your system to be less warm. You will also need wires. I forgot which ones I bought, but Adafruit sells wires https://www.adafruit.com/product/2003.
You can get a Pi Zero W with the GPIO pins pre-soldered making things easier, but if you are capable, you can just solder the pins on yourself.
If you don’t have one already, you will need a Micro SD card that is at least 16 GB in size for Retropie. I might recommend another Linux distro in the future, but I found that Retropie seemed to work well out of the box when installing drivers for the screen and controls.
Part 1: 3D printing
You will need access to a 3D printer or have someone print the files for you if you decide to use the same files. This project guide assumes you are using the files linked below.
If you decide to print this, you are free to use whatever filament or color that you own. Also, you have the choice of printing a 2 button version or a 4 button version. The guide assumes you are printing a 4 button version, but if you choose the 2 action button version, just tweak the settings in part 4 of this guide.
Part 2: Software and drivers
You will need to flash a micro-SD card with Retropie. Retropie can be found here: https://retropie.org.uk/
The version I used in this project was v4.7.1, but later versions might be released in the future and some of the drivers might not work out of the box in later releases, but they should work in v4.7.1 just fine.
First, you will want to use a micro-SD card reader and flash the SD card. After that, you will want to create a blank file (no file extensions) called ssh and put it in the root of your /boot partition on the SD card. If you use Microsoft Windows, you can install Notepad++ and create one using that. This will allow you remote access to your handheld while you install the drivers, updates, etc. If you do not want to do this, you can plug in your Pi Zero to a keyboard and monitor, but I feel like that is way less convenient. This guide will assume you are connecting via SSH. Also, you will want to add a file called wpa_supplicant.conf – The Retropie website has a great guide on setting up that as this file will allow your Pi Zero W to connect to your wireless network https://retropie.org.uk/docs/Wifi/
Once you power on your Pi Zero W and remotely connect to it via SSH, you will be prompted for a username and password. The default username for Retropie is pi and the password is raspberry. You will want to type in the following: ‘sudo apt install update’ without the semiquotes. You might be prompted to put in a password. This will update the package list for installing software. Next, you will want to install the drivers needed for getting the screen and controller working properly. You will want to type in ‘sudo raspi-config’ without the semiquotes and enable SPI interfaces.
You will then want to go into Retropie settings and download the GPIO driver in the packages menu ‘mk_arcade_joystick_rpi’.
You will also need to buy a copy of Pico 8 if you don’t have one already. It has a large library of games and should give you hours of fun. https://www.lexaloffle.com/pico-8.php
What I did was copy the Raspberry Pi version of Pico 8 and placed it in the root of my /boot partition then when I remotely connect to the Pi, I copy that directory over to /home/pi using the command (without semiquotes) ‘cp -r /boot/pico-8 ~/’ or ‘cp -r /boot/pico-8 /home/pi’
After that, we will want to install the screen driver. I have a guide for doing that on the Pico 8 forums: https://www.lexaloffle.com/bbs/?tid=44144
Part 3 – Soldering the controls
Measure the inside of your handheld then break a large piece of perfboard that will fit on the bottom half of the console. Also, you will want to make some holes for screwing in the perf board to the front shell.
You will then want to line up the tactile pushbuttons with the front shell and place them on the perfboard. Make sure everything lines up or you will have to resolder the buttons that don’t line up. They don’t have to be 100% exactly lined up, but enough for when everything is done and assembled, that pushing on all of the 3d printed buttons will push on the correct buttons they are lined up with. Same with the d-pad, make sure the pushbuttons will line up with the d-pad. Solder them in place.
All 4 pins of each button should be soldered so they stay in place and not flex and break or fall out.
You will then want to solder a ground wire on only one corner pin of each of the tactile buttons. You will want to take all the ground wires that were soldered to each of the buttons and take the other ends of each of those wires and solder them together at the center of the board. It is highly recommended that you use color-coded wires.
I used yellow for the ground wires and a separate color for each of the buttons connecting to the GPIO. You will want to take one of your jumper cables and solder one end to the ground wires in the center, and plug the female end into a ground GPIO pin of your choice on the Raspberry Pi. What I did was cut one end of the jumper cable and soldered that directly to all the other ground wires in the middle of the board. You will then want to make sure you solder separate jumper cables to only one corner pin of each of the tactile buttons, but make sure you do not solder to the same pin as ground. Make sure these wires are all color-coded. The reason why you want things to be separate colors is to prevent confusion if a button decides to not work and to help troubleshoot if something goes wrong.
Part 4 – Controller driver
Once all that is set up, you will want to configure the controller driver. This will be important as you will not want the screen to use the same GPIO pins as the buttons and d-pad. Edit the file ‘/etc/modprobe.d/mk_arcade_joystick_rpi.conf’ without the semiquotes and add replace the text inside with this: ‘options mk_arcade_joystick_rpi map=5 gpio=16,5,6,20,19,-1,12,4,-1,13,21,-1’ without semiquotes. Make sure the jumper cables are using the same pins as in the modified config file.
If you plan on using only 2 action buttons, just put ‘ options mk_arcade_joystick_rpi map=5 gpio=16,5,6,20,19,-1,12,4,-1,-1,-1,-1’ without semiquotes instead.
If you are unsure which pin goes where on the GPIO, check this handy website out: https://pinout.xyz/
You can change which pins you want the buttons to use, but make sure you follow the button order Y-,Y+,X-,X+,start,select,a,b,tr,y,x,tl. If you don’t want to use a button, just put -1 as the value. Once you reboot your system, type in jstest /dev/input/js0 and test to see if your buttons are working. Make sure your jumper cable for ground is on one of the GPIO pins for ground or these buttons will not work. Also, if one of the buttons isn’t working, jstest will let you know.
Part 5 – Soldering the Powerboost 1000C
I used this guide for soldering the Powerboost 1000C from Adafruit
https://learn.adafruit.com/pigrrl-zero/power. The instructions there are perfect for this guide, but instead, I soldered 2 jumper cables, one for positive, and one for negative, and plugged the positive jumper cable into the 4th GPIO pin and negative into the 6th GPIO pin. Once everything is assembled, you can plug in your battery, flip the power switch and you should see the Pi and screen turning on.
Part 6 – Soldering the 32 Ohm speaker
Grab your mono jack and solder the red wire to one side on the back of the speaker and do the same with the black wire on the other side. I don’t know if polarity matters or not, but I believe you can solder red to the left pad and black to the right pad and visa-versa.
Part 7 – Autostarting Pico 8 and audio
If you didn’t add to /etc/rc.local: ‘sudo /home/pi/pico-8/pico8 -splore &’ without semiquotes from the screen tutorial on part 2B, you will want to do that now so you can boot into Pico 8 every time you turn on your console. Make sure you put that above exit 0. Also, plug in your USB audio adapter into your Pi Zero and plug in your speaker. I used this guide here for setting that up: https://www.raspberrypi-spy.co.uk/2019/06/using-a-usb-audio-device-with-the-raspberry-pi/
You will want to make sure volume is up to 100% as I didn’t add an amplifier. Once you are done, you will want to reboot your system and test all your components together. If everything is working correctly, you can move onto the final step
Part 8 – Final assembly
Make sure the 3d printed buttons are lined up and screw in the soldered perfboard from earlier with 2m screws. Also, screw in the screen. You will also want to make sure the speaker is put behind the speaker grille and use a hot glue gun to keep it in place. On the backplate, you should screw in the Powerboost 1000C and use a hot glue gun to keep the power switch in place. After that, you can start putting everything else in, such as the Raspberry Pi Zero. I used electrical tape on the bottom of the Pi Zero to prevent any of the pins from touching other components inside the console. After that, attach the battery and place it inside. Some things can be a bit snug, such as the USB cable and audio adapter, but once everything is in, turn on your system one last time to see if it will power on and that you hear sound. If everything is working, you can screw in the backplate to the front shell and you should be done.
If everything works properly, you should be good to go. If there are any issues in this tutorial, please let me know, and I’ll correct them asap. Thanks for reading and have a wonderful day.