RetroPie and an 8BITDO FC30

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(?!).

The 8BITDO FC30 controller

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:

/opt/retropie/configs/all/retroarch-joypads/8Bitdo_Classic_FC30_P1_BT.cfg

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)

Technology leader for Xero in Auckland, New Zealand, former start-up founder, father of two, maker of t-shirts and small software products

Technology leader for Xero in Auckland, New Zealand, former start-up founder, father of two, maker of t-shirts and small software products