mart1nro/joycontrol
mart1nro/joycontrol has 1,369 GitHub stars and 277 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-08 06:28 UTC. Last push 2022-03-22.
Emulate Nintendo Switch Controllers over Bluetooth
What you can do
- button commands
- nfc data (removed, see #80)
Measured star growth
- in 24h
- 0
- in 7 days
- Collecting history
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
Originaljoycontrol
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
- nfc data (removed, see #80)
Installation
- Install dependencies
Ubuntu: Install the dbus-python and libhidapi-hidraw0 packages
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:
sudo pip3 install .
- Consider to disable the bluez "input" plugin, see #8
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.
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.
- ...
Thanks
- 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
Resources
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
560,910 starspublic-apis/public-apis
A collective list of free APIs
497,158 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
442,262 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,175 stars