RetroConnect (deprecated, see BlueRetro)
RetroConnect is a project that allows you to use wireless Bluetooth controllers on retro game consoles. The end goal is a single module that can be plugged into any console using a console-specific cable. Suddenly, the great pile of old controllers is reduced to a single favorite controller.
This project was developed in parallel to BlueRetro before either project went public. BlueRetro far surpasses this project with many more devices supported and a custom Bluetooth implementation that far outclasses this project.
- Supported input devices:
- Xbox One (XB1)
- PlayStation 4 (PS4)
- Supported output devices:
- Nintendo Entertainment System (NES)
- Super Nintendo Entertainment System (SNES)
- Sega Genesis (GEN)
- Sega Master System (SMS)
- Atari 2600 (2600)
- Atari 7800 (7800)
- Analog sticks map to D-pads
- Button combos to change output console
- Custom button remapping via text files
- Less than 1 frame of input lag at 60 FPS
- Use ESP32 with Bluetooth instead of using a Raspberry Pi middleman (in progress)
- Manufactured console adapters with standard USB-C plug (SNES cables created)
- 3D printed case
- Support for input devices: Switch Joycons, DualShock 3 / SixAxis, Wii, generic controllers
- Support for output devices: Saturn, Dreamcast, Nintendo 64, PlayStation 1/2, GameCube, Xbox, and more
- A web app UI for customizing the controller mappings
- Teensy 3.2 or ESP32 (or other compatible microcontroller)
- Raspberry Pi Zero W (or similar)
- Console-specific adapters that connect to Teensy/ESP32 pin headers
- Wires to connect the Teensy/ESP32 to the Raspberry Pi
Locate the desired .ino
file within the arduino
directory and open it using the Arduino IDE and upload it to your microcontroller. See readme in the arduino directory for IDE configuration specific to each console.
- Pull the git repo, compile with
make
. - Modify configs found in the
configs/
folder to suit your preferences - Run
sudo retroconnect
. Sudo is necessary on the very first run to disable the Raspberry Pi's Enhanced Retransmission Mode (ERTM) which breaks certain functionality of the Xbox One and PlayStation 4 controllers.
-
Teensy 3.2 wiring is noted at the top of each Arduino file.
-
Wire the RX0 line from the Teensy to the TX line of the Raspberry Pi. Wire the TX0 line from the Teensy to the RX line of the Raspberry Pi.
Execute the retroconnect
program. If a compatible Bluetooth controller is not detected, it will automatically scan for supported devices in sync mode. Once a suitable controller is connected, it will display your button inputs in the terminal and button inputs will be converted and forwarded to the target console.
- HOME + South Button = SNES mode (default)
- HOME + East Button = NES mode
- HOME + West Button = Sega Genesis mode
- HOME + Left Button = Atari 2600 mode
- HOME + Right Button = Atari 7800 mode
- HOME + DPAD-UP = Sega Master System mode
The following outlines the basic structure of our root
folder and git repository
root/
arduino/
<.ino files>
configs/
<.txt files>
src/
main.cpp
converter.cpp
include/
Constants.h
Converter.h
ConverterFactory.h
ControllerModels/
Controller.cpp
Input/
XboxController.cpp
...
Output/
SnesController.cpp
...
The root/
directory contains the following components:
src/
contains all Raspberry Pi source code.ControllerModels/
defines a controller's inputs/outputs and supported buttons and the abstract Controller class.include/
function definitions for converting one controller's model to another.
configs/
contains user-configurable mapping config files.arduino/
contains the Arduino code to be flashed to a Teensy 3.2 or other MCU.
- SNES Signal Reference
- NES Signal Reference
- Genesis Signal Reference
- Atari / SMS Signal Reference
- Scholars-Mate, DerfJagged, BenThrasher5, BigScooter, and TheCoolMichael for initial project creation (XB1/PS4 to NES/SNES)
- Thanks to Pavel Glushkov (pashutk) for help with ESP32 Bluetooth handling
- Thanks to Ownasaurus for massive help fixing Genesis 6 Button Mode on Teensy
Like it? Give us a tip on PayPal!