RetroPie is a beautifully put together Linux distro for Raspberry Pi that bundles EmulationStation and a range of emulators to provide a one-stop-shop for retro arcade, console, and home computer game emulation.
While the RetroPie project does a great job of pulling together all of the necessary software and providing a seamless installation experience for the Pi, the quirks of different controllers can provide some configuration challenges.
I bought Nintendo/Famicom-style bluetooth controller for my Pi. It’s an FC30 made by the Hong Kong company, 8BITDO. It’s a high-quality piece of electronics and comes with a cable and manual — and a key fob(?!).
In New Zealand, a seller called TechExpress imports and sells the 8BITDO range.
Before you get started, it’s important to update the controller’s firmware to the latest version. The 8BITDO website has a special section for each controller with the latest firmware update, and I found the update application worked flawlessly on my MacBook Air. The controller has a bunch of modes that can be used to start it, but I use the default one, which is triggered by holding down just the “start” button to turn it on.
The RetroPie wiki has a decent configuration guide for connecting an 8BITDO. I followed it and configured my controller mapping in EmulationStation. It all appeared to work fine for me, except…
When I started NES, SNES, or Sega Megadrive games, a message would appear at the bottom of the screen telling me that no controller was configured. The emulator for these platforms is RetroArch — a front-end for Libretro. It relies on a specific configuration for RetroArch being present for each controller. Theoretically EmulationStation is supposed to generate this when it starts RetroArch, but due to some step I missed or some other problem this has never happened for me. I ended up hunting around for a pre-baked configuration on the Web. I couldn’t find one for the FC30, but by using a similar 8BITDO configuration and substituting in the key codes that Emulation Station had generated, I was able to get the controller working.
It’s important the configuration file has exactly the same name that the udev device subsystem uses — for the FC30 that means the file has to be at:
I’ve put the content of the file that I ended up with on Pastebin here.
I have a lingering problem where the controller sometimes won’t connect to Bluetooth again after it’s been powered off. I found a workaround to force connection that does always work— albeit a bit cumbersome:
- From the console or a shell run “bluetoothctl” — it will report a MAC address (e.g. [NEW] Device 71:0F:58:6F:61:0C 8Bitdo FC30 GamePad)
- Power on the controller (hold down “start”) and the blue LED will blink
- Type in “connect [your MAC address]”, e.g. “connect 71:0F:58:6F:61:0C”
- The blue LED should go steady (connected) after a few seconds