More actions
Joycontrol | |
---|---|
General | |
Author | mart1nro |
Type | Remote Play and Streaming |
Version | 2020 |
License | GPL-3.0 |
Last Updated | 2020/12/19 |
Links | |
Download | |
Website | |
Source | |
Emulate Nintendo Switch Controllers over Bluetooth.
Tested on Ubuntu 19.10, and with Raspberry Pi 3B+ and 4B Raspbian GNU/Linux 10 (buster).
Features
- Emulation of JOYCON_R, JOYCON_L and PRO_CONTROLLER.
- Able to send:
- button commands
- stick state
Installation
Install dependencies:
- Ubuntu:
- Install the
dbus-python
andlibhidapi-hidraw0
packages sudo apt install python3-dbus libhidapi-hidraw0
- Install the
- Arch Linux Derivatives:
- Install the
hidapi
andbluez-utils-compat
(AUR) packages
- Install the
Clone the repository and install the joycontrol package to get missing dependencies:
- (Note: Controller script needs super user rights, so python packages must be installed as root).
- In the joycontrol folder run:
sudo pip3 install .
Consider to disable the bluez "input" plugin, see #8.
User guide
Command line interface example
Run the script:
sudo python3 run_controller_cli.py PRO_CONTROLLER
- This will create a PRO_CONTROLLER instance waiting for the Switch to connect.
Open the "Change Grip/Order" menu of the Switch:
- The Switch only pairs with new controllers in the "Change Grip/Order" menu.
- Note: If you already connected an emulated controller once, you can use the reconnect option of the script (-r "<Switch Bluetooth Mac address>"). This does not require the "Change Grip/Order" menu to be opened. You can find out a paired mac address using the "bluetoothctl" system command.
After connecting, a command line interface is opened. Note: Press <enter> if you don't see a prompt.
- Call "help" to see a list of available commands.
- If you call "test_buttons", the emulated controller automatically navigates to the "Test Controller Buttons" menu.
Resources
Known issues
- Some bluetooth adapters seem to cause disconnects for reasons unknown, try to use an usb adapter instead.
- Incompatibility with Bluetooth "input" plugin requires a bluetooth restart, see #8.
- It seems like the Switch is slower processing incoming messages while in the "Change Grip/Order" menu. This causes flooding of packets and makes pairing somewhat inconsistent. Not sure yet what exactly a real controller does to prevent that. A workaround is to use the reconnect option after a controller was paired once, so that opening of the "Change Grip/Order" menu is not required.
Credits
- Special thanks to https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering for reverse engineering of the joycon protocol.
- Thanks to the growing number of contributers and users.