NeoPiGamer
-
Over the past month, I've taken a Raspberry Pi Zero, an old gameboy advance, and a whole lot of modded components to create the NeoPiGamer.
Here are the specs:
- Raspberry Pi Zero
- 3.2" SPI TFT Display
- Powerboost 1000C
- 1200mAh battery
- USB Stereo Audio Adapter
- 2.5W Class D Audio Amplifier
- Two 6mm Tactile Button Switches (for the additional Y and X buttons)
- Two Tall 6mm Tactile Button Switches (to repace the start and select buttons)
- DS Lite Mono Speaker (very nice sound quality)
- SPDT Slide Switch
- RetroPie 3.7
I used the pinouts on the gameboy advance to wire the original controls and buttons directly to the GPIO on the Raspberry Pi Zero. I cut the TFT display's controller board down to the size of the display and wired it directly to the Raspberry Pi Zero. Luckly, the waveshare drivers used for the display allowed for me to set the SPI speed high enough to get 60fps for silky smooth gaming. Every component used except for the power supply had to be modified in order for everything to fit inside the case. I get 3+ hours of battery life thanks to the energy efficiency of all components used.
Here are few build photos.
Update - June 8, 2016
I have modified the NeoPiGamer a bit since the original build. I trimmed the housing a bit more and was able to fit a 2500mAh battery doubling the battery life to around 6-8 hours. I've implemented push-button power-on of the powerboost using a modified implementation of what's documented by NeonHorizon. I tried several very good implementations of detecting low power and auto-shutdown, but reliability and system performance were an issue so I added a low power led to the location of the original power led. It works perfectly by blinking when the battery is getting low and stays solid when it's time to shutdown down. Shutdown of the Pi Zero turns off the powerboost as documented.
I am truly enjoying the NeoPiGamer.
-
WOW!!!
What a fantastic build project!
I take my hat off to ya mate :)
-
Sweet! you should post a video!
-
I love the sparkle paint job ^_^
What systems have you got running on it?
-
@PingSpike - Thanks! It wasn't the easiest build, but it was worth it.
@Velocireed - I'm considering doing both a video and build details. Stay tuned.
@Imrhien - So far, it's running NES, SNES, Genesis/Megadrive, FBA (for Neo Geo and a few arcade games), Lynx, Gameboy, and Gameboy Advanced. I'm quite amazed at how well everything runs on the Pi Zero.
-
cool! it looks like your hard work payed off!
-
@Tekkaman_Slade Excellent build!! I'm working on something on the same line with a 5 in screen and a Pi3.
-
I see alot of people converting original gameboys but really think handhelds with 6 button outlays are best in this form factor.
The wiring alone is enough to give somebody like me nightmares and wish somebody would start selling these type of kits for those without the know how, tools or time to build one from scratch.
Well done -it looks really good.
-
That's pretty damn cool!
-
@batman said in NeoPiGamer:
I see alot of people converting original gameboys but really think handhelds with 6 button outlays are best in this form factor.
That's the very reason why I chose the Gameboy Advance for this project. I wanted a portable with 4 face buttons and 2 real shoulder buttons. A Nintendo DS has everything from the start, but the bottom half is too thin to fit all the components. The GBA was a very very tight fit and it took quite a bit of planning and modding to add the addition face buttons while maintaining the existing shoulder and face buttons. I'm just glad it all worked out.
The wiring alone is enough to give somebody like me nightmares and wish somebody would start selling these type of kits for those without the know how, tools or time to build one from scratch.
Adafruit sells kits for the PiGRRL and the Pocket PiGRRL. Both kits are easy to put together and are a great way to learn the basics. You can purchase the 3D printed cases on eBay if you don't have a 3D printer.
-
Both kits are easy to put together and are a great way to learn the basics. You can purchase the 3D printed cases on eBay if you don't have a 3D printer.
Thanks, I've seen both of the kits previously and have been put off by the 3D printed d-pad, buttons and the lack of shoulder/trigger buttons. I could be wrong, but I just don't see these being comfortable to hold for extended periods. Particularly the smaller model.
There aren't too many games that I play that actively require 6 buttons but I would want that option for games that do without taking my finger off the d-pad or the main buttons.
Personally, I'm interested and keeping an eye on this project in the hope their kit will be actually affordable and buttons be of good quality when they bring it to market. I would be even more excited if they chose to go for a GBA/PSP/DS style layout:
https://hackaday.io/project/10207-gamegirl-the-retro-console-done-right
-
@Tekkaman_Slade im curious how you wired up the controls from the gba board. Any chance you provide a walk through on how you wired the controls to the pi zero?
-
@gamester_47 - I used the diagram below to wire the pinouts from the GBA's PCB directly to the GPIO pins on the Pi Zero.
I cut out the middle/green portion of the PCB in order for the signals to work properly. The Gameboy Pocket and Nintendo DS have the same issue. I needed the space for the LCD screen anyway so it all worked out.
The square pinouts under the right shoulder button and between the start and select buttons are ground.
Then I used the Adafruit retrogame utility described here to remap the buttons to keyboard presses.
-
Hi. I'm trying to do something similar to what you did. The only issue I am having is finding a display that I really like. Your display seems perfect (even bragging about 60fps). Could I get a link to the display that you used and describe what part of it that you modded? Thanks a bunch ^_^
-
I used a SainSmart 3.2" TFT LCD Module touch screen display. I believe it's a re-badge or clone of the WaveShare32 TFT touch screen display. I got it from my local Micro Center.
First I disconnected the flex cable and separated the driver board from the actual TFT display. They're held together with double sided mounting tape, so that part was easy.
Then I used a dremel tool to cut right along the 4 slim tactile button switches on the side of the driver board. This both resized the width of the board to the same width as the display as well as removed the buttons.
Next I cut off the thick plastic portion of the GPIO connector and desoldered the remaining pins.
Then I soldered wires from the appropriate pinouts directly to the GPIO on pi zero based on the pinout specs available on the page linked above. The manual linked on the same page also has more pinout details. I put electrical tape on the opposite side of the pin holes on the driver board to prevent any contact with the back of the TFT display.
Lastly, I removed the mounting tape, reattached the driver board to the back of the TFT display using double sided masking tape to reduce the thickness of the display, and reconnected the flex cable.
Drivers are included in raspbian jessie which makes enabling the display so much easier. You simply have to place the parameters below into the config.txt file in the boot folder.
hdmi_force_hotplug=1 hdmi_group=2 hdmi_mode=87 hdmi_cvt=320 240 60 1 0 0 0 dtparam=spi=on dtoverlay=waveshare32b,speed=80000000,fps=60,rotate=270
The first set of parameters setup the display resolution. The second to last parameter enables SPI. The last parameter specifies the hardware overlay for the display so the correct kernel modules are loaded along with maxing out the speed and frames per second for the display. I also had to specify rotating the display 270 degrees since I have the display turned around for shorter wiring between the pi zero and the display in the GBA case. More info on the software side of things can be found here.
Since The SainSmart 3.2" TFT LCD Module has a resistive touch screen , I highly recommend you also blacklist the ads7846 touch input kernel module. Otherwise, the kernel will get continuous interrupts from any pressure between the touch screen and the back of the front of the GBA which will affect both input and game performance.
-
@Tekkaman_Slade Thanks you the best :)
-
@Jeff-H I have found that if you want to keep the plastic screen on the front, a 2.8" screen just fills the gap nicely. Im planning a GBA/Zero project but im struggling to find a good 2.8" screen that works with the Pi, and doesn't have too much overhang on the ends. There isn't a massive amount of space from the edge of the display to the buttons
-
I used a 3.2" TFT LCD Module because I wanted a larger screen than the original GBA. But if you or Jeff-H are looking to retain the original GBA screen lens, than the Adafruit PiTFT Plus 320x240 2.8" TFT + Capacitive Touchscreen may work for you. I made the same modification to the Adafruit PiTFT Plus 2.8" for another project minus desoldering the pins. You can actually trim the driver board on both sides leaving a very little overhang above the pins. The B+/Pi 2 Version fabrication print schematics make it very clear where it's safe to trim the driver board without damaging the circuit paths. You will need a high watt soldering iron to desolder the pins as industrial grade solder is used on the driver board. There is a resistive touch screen version of the same board that comes with the pins unsoldered, but I haven't reviewed the fabrication print schematics to see how well that display's driver board can be trimmed.
Cool thing about the Adafruit PiTFT Plus 320x240 2.8" TFT + Capacitive Touchscreen is that drivers are included in raspbian jessie. You simply have to place the parameter described here in the config.txt.
@Jeff-H - I updated the parameter information in the previous post.
-
@Tekkaman_Slade thanks for the info, i will investigate the adafruit screens.
did you have any issues with the I2S audio board you used clashing with the pins for your screen? The screens i have been playing with, use GPIO18 for the backlight
-
I used a USB Stereo Audio Adapter I got from Micro Center for 8 dollars. I modded it by removing the casing and the USB port. Then I wired data, power, and ground from the audio adapter directly to a micro-usb male connector. That made it easier for me to plug and unplug the audio adapter for disassembly and debugging of the NeoPiGamer.
Here's what Adafruit has noted about the screen you are using.
"Note that if you are playing audio out the headphone jack, you can't use the PWM capabilities of GPIO #18 at the same time, the PWM function is reassigned to do audio. However, you can use it as a simple on/off pin"
So you should be able to use the screen you are using without backlighting control if GPIO 18 is being used for audio.
Contributions to the project are always appreciated, so if you would like to support us with a donation you can do so here.
Hosting provided by Mythic-Beasts. See the Hosting Information page for more information.