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:


Emulate Nintendo Switch Controllers over Bluetooth.

Tested on Ubuntu 19.10, and with Raspberry Pi 3B+ and 4B Raspbian GNU/Linux 10 (buster)


Emulation of JOYCONR, JOYCONL and PRO_CONTROLLER. Able to send: - button commands - stick state - ~~nfc data~~ (removed, see #80)


  • Install dependencies

Ubuntu: Install the

sudo apt install python3-dbus libhidapi-hidraw0

Arch Linux Derivatives: Install the

(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:
    sudo pip3 install .
  • Consider to disable the bluez "input" plugin, see #8

Command line interface example

  • Run the script

    sudo python3 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.


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




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.