Skip to content

Repository files navigation

logo

PyPI - Python VersionPyPI - Implementation

Python driver for Nintendo Switch Joy-Con

We are referring to dekuNukem/Nintendo_Switch_Reverse_Engineering

Install

pip install joycon-python hidapi pyglm

Usage

Quick status check

cd joycon-python/
python -m pyjoycon.joycon

or use as module

frompyjoyconimportJoyCon, get_R_idjoycon_id=get_R_id()
joycon=JoyCon(*joycon_id)
joycon.get_status()

Status values

{
'battery': {
'charging': 0,
'level': 2
},
'buttons': {
'right': {
'y': 0,
'x': 0,
'b': 0,
'a': 0,
'sr': 0,
'sl': 0,
'r': 0,
'zr': 0
},
'shared': {
'minus': 0,
'plus': 0,
'r-stick': 0,
'l-stick': 0,
'home': 0,
'capture': 0,
'charging-grip': 0
},
'left': {
'down': 0,
'up': 0,
'right': 0,
'left': 0,
'sr': 0,
'sl': 0,
'l': 0,
'zl': 0
}
},
'analog-sticks': {
'left': {
'horizontal': 0,
'vertical': 0
},
'right': {
'horizontal': 2170,
'vertical': 1644
}
},
'accel': {
'x': 879,
'y': 1272,
'z': 549
},
'gyro': {
'x': -354,
'y': -7,
'z': 281
}
}

You need cython-hidapi to use Bluetooth / HID connection in Python.

Alternatively, you can use hid instead if cython-hidapi fails to find your JoyCons.

If you are on Linux you most likely will need to add udev rules for switch devices to make it work. These rules will work just fine.

Gyroscope

We have a specialized class which tracks the gyroscope for you, and exposes this tracked state in a simplified manner:

frompyjoyconimportGyroTrackingJoyCon, get_R_idimporttimejoycon_id=get_R_id()
joycon=GyroTrackingJoyCon(*joycon_id)
foriinrange(20):
print("joycon pointer: ", joycon.pointer)
print("joycon rotation: ", joycon.rotation)
print("joycon direction:", joycon.direction)
print()
time.sleep(0.05)

Button events

We have a specialized class which tracks the state of the JoyCon buttons and provides changes as events. Here is an example of how it could be used with pygame:

frompyjoyconimportButtonEventJoyCon, get_R_idimportpygamejoycon_id=get_R_id()
joycon=ButtonEventJoyCon(*joycon_id)
...
while1:
pygame.time.wait(int(1000/60))
...
forevent_type, statusinjoycon.events():
print(event_type, status)
...
pygame.display.flip()

Combining multiple JoyCon helper classes

importpyjoyconclassMyJoyCon(
pyjoycon.GyroTrackingJoyCon,
pyjoycon.ButtonEventJoyCon,
): pass

Environments

  • macOS Mojave (10.14.6)
  • Python (3.7.4)
  • hidapi (0.7.99.post21)

About

driver for Joy-Con (Nintendo Switch)

Resources

Stars

187 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages