joycontrol

by mart1nro

mart1nro / joycontrol

Emulate Nintendo Switch Controllers over Bluetooth

480 Stars 108 Forks Last release: Not found GNU General Public License v3.0 116 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

joycontrol

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 JOYCONR, JOYCONL and PRO_CONTROLLER. Able to send: - button commands - stick state - ~~nfc data~~ (removed, see #80)

Installation

  • Install dependencies

Ubuntu: Install the

dbus-python
and
libhidapi-hidraw0
packages
bash
sudo apt install python3-dbus libhidapi-hidraw0

Arch Linux Derivatives: Install the

hidapi
and
bluez-utils-compat
(AUR) packages
  • 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:
    bash
    sudo pip3 install .
    
  • Consider to disable the bluez "input" plugin, see #8

Command line interface example

  • Run the script

    bash
    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.

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.
  • ...

Resources

NintendoSwitchReverse_Engineering

consolepairingsession

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.