Although it was great to work on SuperGamePi-based DIY handheld console project, the device wasn’t that much fun to actually use and play. I wasn’t really thinking about it when I was building it – I assumed that fun from constructing & hacking around would be rewarding enough – yet I got nervous more than once when I actually tried to play longer than for a few minutes and there was always some inconvenience.
What went wrong?
Problem 1 was that my soldering work wasn’t perfect and I was having connection shortages which caused gamepad buttons not working or – actually worse – working when they shouldn’t. With a few iterations of desoldering and resoldering, I’ve managed to actually fix that issue.
Problem 2 was that after so many deconstructions and reconstructions of GamePi as project needed, screw holders eventually gave up. I’ve used super glue to fix them and it worked for a while, but not long enough. Still, that could be fixed, in worst scenario by reprinting GamePi case (which was a bit pricey).
Problem 3 was the one which eventually led me to go back to drawing board and redo the whole Pi-based handheld console project. Even though buttons worked, they haven’t really worked well. They were incosistent in tactile feeling plus amount of force needed to press each button differed. This wouldn’t be a problem in many projects – some house applications or soundboxes and such – but in gaming? It’s instant death because of jump which didn’t happen, loss of trial in Mario Kart, shooting failure in worst moment, even in turn-based jRPGs it was very irritating.
Handheld v2 – design!
I decided to completely change aproach and build modular system which would allow to swap components easily and to use already working gamepad part. Of course, it’s still possible to use many other options: one can print 3D case which enables to hold SNES-like controller whole, gut Wii U “tablet” and insert Pi there or use smartphone bluetooth gamepad-case.
I’ve decided to go with last option, as BT gamepads are generally nicely recognized by Raspberry Pi/Retropie and their construction should enable flexibility in rebuilding later on. I didn’t like any option provided by popular company iPega, but found very promising photos & spec of joypad FlyDigiWee. It seemed rather unknown/untested in non-China world, yet I’ve liked it so much that I figured it’s worth trying out. Eventually I’ve had to order it twice and waited almost half a year for it (yeah…), but bad luck stopped there.
In first version of handheld, I’ve used cheap 5″ GPS navigation screen plus not so cheap controller driver by Adafruit. Initially I wanted to use that for v2 as well, but unfortunately plastic holder for controller tape broke and I couldn’t find anywhere reasonably priced replacement. While thinking about about 3D printed replacement part, I eventually ordered another cheap 5″ screen with HDMI, designed for Raspberry Pi as it was accessible in my country.
There was an iussue with placement of GPIO block used for touch which I didn’t need and microUSB power port was put at right side of the screen – it collided with gamepad holder – so I removed both of them using as low force as I could and with help of my friend Ingvar I soldered 5V power plus ground instead.
Those changes made it really easy to use Raspberry Pi’s two GPIO ports to give power to the screen. Success!
Holding it together
While gamepad holder matched very well with screen (OK, after making stupid “backlight switch” smaller), I needed a way to hold RPi in place. Once more, first idea was to print 3D case for whole construction, but that would break modular approach so I decided that the simplest way is the best way – I ordered beautiful blue/clear case for RPi (with access to GPIO of course) and mounted it to gamepad with… cable holders. I can’t imagine more modular approach. ;)
Power over 9000!
While screen was nicely powered by RPi GPIO ports, Pi itself needed power. I’ve done another quick research and eventually reused Powerbank which I bought for v1. It has 6000 mAH capacity which is enough for a few hours of work (haven’t measured it exactly so it’s approximation) and 2.1A USB exit which is optimum for RPi 2 B. Potentially it could be not enough for RPI 3, but I use Pi I have (duh) and Pi 3, although has more power, has also higher needs – not only powerwise, but also regarding cooling necessarry for proper running.
Going back to powerbank – it’s quite heavy for such a small project (160g), yet comparing to other ones (eg. aluminium Xiaomi one which I use with smartphone & tablet) I can’t find better option which would still have nice capacity and amper outage. Also, it’s about the same size as RPi in case which is great, because if it was any longer it would be not comfortable to hold console in palms (which kinda is a goal here).
As you may imagine, I’ve used cable holders to put it all together. Glorious! :)
HDMI powered screen and longer (comparing to standard usecase) space between screen and RPi caused that I couldn’t use compact HDMI connector to hold it together. In result I have to to use standard HDMI cable. Well, perhaps not standard, because I’ve used as short one as I could’ve find – but it was still not perfect. Then my friend Dźwiedziu came with suggestion to… make it tangled like an old stationary phone cord. Perhaps it was crazy, but worked! When you can’t hide it, make it intentionally visible. Cool!
This hasn’t changed from version 1 – I still use RetroPie and it’s a great piece of work. It’s configured to support a lot of emulators, custom ports and such. RetroArch is running in backend which enables automatic configuration and mapping, is easy to use and has great EmulationStation UI. Only competition for RetroPie is RecalBox – designed for ease of use whuch leads to having less configuration options available. And I always prefer to have as vast selection as possible.
SNES, GB&GBA, PSX emulation works great; N64 is so-so. All ports I’ve tested so far work great – DOOM, Duke Nukem 3D, Quake 1 & 3(!), Minecraft Pi Edition (but not with gamepad), Stratagus for WarCraft II (same), Cave Story and more. Please let’s not discuss emulation legality here. I can also turn in into full LXDE/Pixel desktop, but it’s more of gimmick than real usecase. After all this 5″ screen has only 800×400 resolution.
First version, which used custom-build switches connected to Arduino Pro Micro hacked around to work like keyboard, was great because it allowed to use gamepad in places where it isn’t available normally – eg. for DOSBOX games. I lost that functionality in handheld v2 unfortunately. While DOSBOX has nice mapper for assigning joysticks/gamepads buttons to keyboard keys, it’s not working properly with my FlyDigiWee – all buttons, except arrows, are reported as one. Too bad. I’ve tried to register gamepad as keyboard+mouse using Xboxdrv driver, but it hasn’t worked in DOSBOX and Stratagus as well. Maybe there will be something better in future.
What does the future hold?
Project is cool and I’m already using it a lot, but it’s a bit too heavy to my liking. It’s caused by powerbank which is the first thing I’d like to replace (maybe aside of “speakers”) – when they’ll create something lighter with more capacity and outage. Other than that, I’m satisfied. I may change Pi 2 to another module in the future, but probably not to Pi 3 – its power is not that great and its needs are much higher.