Adding Bluetooth To Original SNES Controllers

There’s a bunch of companies selling wireless Super Nintendo style controllers out there. You can go on Amazon and get any number of modern pads that at least kinda-sorta look like what came with Nintendo’s legendary 1990’s game console. They’ve got all kinds of bells and whistles, Bluetooth, USB-C, analog sticks, etc. But none of them are legitimate SNES controllers, and for some people that’s just not good enough.

[sjm4306] is one of those people. He wanted to add Bluetooth and some other modern niceties to a legitimate first-party SNES controller, so he picked up a broken one off of eBay and got to work grafting in his custom hardware. The final result works with Nintendo’s “Classic Edition” consoles, but the concept could also work with the original consoles as well as the computer if you prefer your classic games emulated.

A custom ATMEGA328P-powered board polls the controller’s SPI serial shift register in much the same way the original SNES would have. It then takes those button states and sends them out over UART with a HC-05 Bluetooth module. The controller is powered by a 330 mAh 3.7V battery, and a charging circuit allows for easily topping the controller off with a standard USB cable.

A particularly nice touch on the controller is the use of custom light pipes for the status LEDs. [sjm4306] made them by taking pieces of transparent PLA 3D printer filament, heating and flattening the end, and then sanding it smooth. This provides a diffusing effect on the light, and we’ve got to say it looks very good. Definitely a tip to file away for the future.

On the receiving side, this project was inspired by a custom NES Classic Edition Advantage controller we featured last year, and borrows the work creator [bbtinkerer] did to get his receiver hardware talking to the Classic console over I2C.

We’ve seen a number of projects which have added wireless functionality to the classic Super Nintendo controller, but most tend to be more invasive than this one. We like the idea of reading the controller’s original hardware rather than completely gutting it.

14 thoughts on “Adding Bluetooth To Original SNES Controllers

  1. > A custom ATMEGA328P-powered board polls the controller’s SPI serial shift register in much the same way the original SNES would have. It then takes those button states and sends them out over UART with a HC-05 Bluetooth module.

    I think you could do that with AtTiny85 (or 45, 25).

    Btw, what kind of feel original SNES controller has? I haven’t ever seen one IRL because no-one I know has SNES. Are the buttons comfortable to use? I’m guessing newer controllers do better but I don’t really know.

    1. they were not as jagged and sore as the nes controllers, but they were still pretty good at removing skin from thumbs during intense bomberman matches. The shape and introduction of the shoulder buttons was pretty nice and comfortable, however not many games (imo) actually used the shoulder buttons meaningfully.

    2. The controllers that Nintendo made for SNES have a very distinct feel that (in my opinion) really works with the SNES games. Of course you can use a modern controller and play just fine. It is probably just the nostalgia nerd in me, but playing with original controllers is just a much more unique experience.

  2. The 8bit do controllers come close to the original feel, but not quite. Problem is finding a good as new original controller, most of them have wear and then buttons become a bit harder to press, even after extensive cleaning.

    I’m wondering how the lag is with these bt modules in between…

    1. I rigged a quick test by toggling pins on the transmitter and receiver side and measured around 29ms latency (around 1.7 frames for 60fps). Perfectly fine for the types of games I play.

    1. I was definitely tempted to go that route but they don’t come with receivers and the cost adds up once you add a few of those in. Here I can make one controller and as many receivers for different devices with each receiver only costing me a few dollars in parts (just a plug, atmega328p and an hc-05). I also wanted onboard usb for charging as chances of me losing a barrel jack to usb lead is high while I almost always have a spare micro usb lead handy.

  3. “A custom ATMEGA328P-powered board polls the controller’s SPI serial shift register in much the same way the original SNES would have.”

    There was no such thing as “SPI” back then. It’s just a regular “serial shift register”.

  4. Cool build, very neat and tidy. Idea for improvement/experiment, since ATMega328 is used, and it has capability for on-change interrupts on almost all pins, maybe that would work faster than polling while saving some battery life.

    1. Yeah that sounds like a good idea so I’d only have to send a packet to update button states to the receiver on button press and release. I also wanted to implement soft power control so I could nix the power switch and just require the user to press and hold a specific button to power up and that would allow a timeout powerdown so it doesn’t drain the batteries when left on.

  5. Neat ..

    .. I assume he’s using an HC-05 flashed with an RN-42 firmware set to GamePad HID profile ..
    .. hence my question: does anyone here know a way to have FULLY CUSTOM HID using the HC-05 ? I had some success quite recently with such device, but I’m still looking for a bluetooth custom HID profile ( & CDC & others if also possible ;p ).

    In case someone’s interested, here’s an Espruino GamePad ;P

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.