The $4 Raspberry Pi Pico is fast becoming the glue for retro projects and this project from David Pagels brings retro Nintendo controllers to Nintendo's popular Switch console via USB and in a recent update, Bluetooth.
David Pagels Retro-Pico-Switch project is deliciously simple: Use your old Nintendo 64 and Gamecube controllers with a Nintendo Switch. No configuration is necessary; Just download a UF2 file from the releases page, set your Pico W ready for flashing, drag and drop the UF2 on to the Pico and then it reboots as a Bluetooth device. The only slightly difficult part of the project is connecting the controller to the Pico. Thankfully there are pinout references that can be used to map the controller pins to the Pico. The N64 controller interface has just three pins. Pin 1 connects to a 3.6V power source, pin 2 is for data, and pin 3 is GND. The software is looking for a connection between pin 2 (data) and GPIO 18 of the Pico. A 1 Kilo Ohm resistor is used between pin 2 and 1 to pull the data pin high, ensuring consistent data transmission. The Gamecube pinout is a little more involved, with seven pins, but pin 2 (red wire) is data, pin 6 (blue wire) is 3.3V and pin 7 (black wire) is Ground. The remaining pins are for the rumble feedback.
To give the project a clean aesthetic, there is a 3D printable enclosure for the Nintendo 64 controller interface. The 3D printable parts are small and easy to print, with the best 3D printers. Playing the recent Metroid Prime remaster with an original Gamecube controller would be an epic blast of nostalgia.
Pagels' attention to detail sees the Switch's home button mapped to a combination of the L, R and Start buttons, and dynamic scaling is used for each axis of the joystick to account for the reduced range that older analog controllers had. The project benefits from a recent update to the Pico SDK which brought Bluetooth support to the board's Infineon CYW43439 wireless chip. Bluetooth support was introduced to the Raspberry Pi Pico W via SDK 1.5.0 in February 2023. Bluetooth support has yet to be made officially available for MicroPython and CircuitPython and this is why Pagels' project uses the C SDK.
As a neat bonus, the project can also be used on other machines. This makes it an ideal input for a spot of retro emulation with real controllers. Four player Goldeneye and Diddy Kong Racing would really benefit from the N64 controller.
You can download the code, and learn more about this great project via Pagels' GitHub repository. Sure, Nintendo sells versions of the N64 controller that are compatible with the Switch by default, but what fun is that?