Skip to content

Controller List

This is a full list of devices and controllers that we currently support. For the full setup guide, see Getting Started.

Terminology:

  • Device - A microcontroller such as an ESP32, Arduino, Teensy, etc...
  • Controller - A game controller such as the Nintendo Pro Controller or Joycon.
  • Setup or Controller Setup - A setup where a "device" is emulating a "controller" for automation.

Controller Setups

This table lists all the device and controller combinations that we support in this project.

Device Type Supported Controllers Setup Difficulty
(Scale 1-10)
Guides
Raspberry Pi Pico W
Raspberry Pi Pico 2 W
(USB Mode)
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
1 Guide
ESP32 NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
3 Windows
Mac
Video Tutorial
ESP32-S3 HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
NS1: Wired Pro Controller (coming soon)
NS1: Wired Left Joycon (coming soon)
NS1: Wired Right Joycon (coming soon)
3 Windows
Video Tutorial
CFW: sys-botbase 3 NS1: Wired Pro Controller 2 Guide
Raspberry Pi Pico W
Raspberry Pi Pico 2 W
(UART Mode)
HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
NS1: Wired Pro Controller (coming soon)
NS1: Wired Left Joycon (coming soon)
NS1: Wired Right Joycon (coming soon)
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
5 Guide
Raspberry Pi Pico W
Raspberry Pi Pico 2 W
(Advanced UART Mode)
HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
NS1: Wired Pro Controller (coming soon)
NS1: Wired Left Joycon (coming soon)
NS1: Wired Right Joycon (coming soon)
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
10 Guide

Deprecated Setups:

These are older setups that are still supported, but no longer recommended for new users.

Device Type Supported Controllers Setup Difficulty
(Scale 1-10)
Guides
Arduino Uno R3 NS2: Wired Controller
(compatible with Switch 1)
6 Guide
Arduino Leonardo NS2: Wired Controller
(compatible with Switch 1)
6 Guide
Pro Micro NS2: Wired Controller
(compatible with Switch 1)
7 - (Mini Grabber)
9 - (Hammer Header)
Mini-Grabbers
Hammer Headers
Teensy 2.0
Teensy++ 2.0
NS2: Wired Controller
(compatible with Switch 1)
7 - (Mini Grabber)
9 - (Hammer Header)
Mini-Grabbers
Hammer Headers
CFW: sys-botbase 2 NS1: Wired Pro Controller 2 Guide

Setup Comparison Table:

Setup Supported Controllers Price (per Unit) Setup Difficulty
(Scale 1-10)
Notes:
Raspberry Pi Pico W
(USB Mode)
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
Single: $8
Volume: $7
1 Upgradable to UART mode.
ESP32 NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
Single: $10
Volume: $4
3 Unresolved Bugs:
- Issue 800
- Issue 694
ESP32-S3 HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
Single: $15
Volume: $8
3 Best wired setup by far.
Workhorse for most seasoned users.
Raspberry Pi Pico W
(UART Mode)
HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
Single: $19
Volume: $10
5 Vulnerable to power glitching.
Exposed pins can be annoying.
Raspberry Pi Pico W
(Advanced UART Mode)
HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon
Single: $30+
Volume: $12
10 Best final product.
Hardest to build.
Arduino Uno R3 NS2: Wired Controller Single: $20 6 Vulnerable to power glitching.
Arduino Leonardo NS2: Wired Controller Single: $25 6 Vulnerable to power glitching.
Teensy 2/Teensy++ 2
(Mini Grabbers)
NS2: Wired Controller (discontinued) 7 Vulnerable to power glitching.
Final product is bulky and fragile.
Teensy 2/Teensy++ 2
(Hammer Headers)
NS2: Wired Controller (discontinued) 9 Vulnerable to power glitching.
Pro Micro
(Mini Grabbers)
NS2: Wired Controller Single: $25
Volume: $10
7 Vulnerable to power glitching.
Final product is bulky and fragile.
Pro Micro
(Hammer Headers)
NS2: Wired Controller Single: $25
Volume: $8
9 Vulnerable to power glitching.

Device Types

A "device" is a microcontroller or development board that we will use to implement a game controller.

Image Description
ESP32

Supported Controllers:
- NS1: Wireless Pro Controller
- NS1: Wireless Left Joycon
- NS1: Wireless Right Joycon

The ESP32 is a microcontroller that supports Bluetooth. It is one of the few microcontrollers that supports Bluetooth Classic (BTC) since the world has moved onto Bluetooth LE (BLE). Thus it is (almost) uniquely suited to implement the Switch 1 wireless controllers which are also BTC.

The USB port on it is a built-in UART intended for debugging, but we hijack it as the main line of communication with CC to eliminate the need for an external UART. This makes it super convenient since a single USB adapter turns it into fully wireless dongle that allows your computer full control of your Switch without the hassle of any cables at all.

The ESP32 also supports BLE which is what the Switch 2 wireless controllers use. So it has the potential to implement the Switch 2 wireless controllers in the future.
ESP32-S3

Supported Controllers:
- HID: Keyboard
- NS1: Wired controller
- NS2: Wired controller
- NS1: Wired Pro Controller (coming soon)
- NS1: Wired Left Joycon (coming soon)
- NS1: Wired Right Joycon (coming soon)

The ESP32-S3 is the by far the best wired controller setup. It has both USB OTG and USB UART as separate ports. The USB OTG can be programmed as a game controller while the USB UART elminates the need for the external UART that was needed by the AVR8 setups (Arduino/Teensy). Thus ESP32-S3 is the perfect replacement for those older setups. Ease of setup is very important as it lowers the technical bar of entry for new users.

The ESP32-S3 also supports Bluetooth, but only Bluetooth LE (BLE). So while it cannot implement the Switch 1 wireless controllers, it does give us future ambitions of supporting the Switch 2 wireless controllers.
Pico W



Pico 2 W
Raspberry Pi: Pico W and Pico 2 W

Supported Controllers:
- HID: Keyboard
- NS1: Wired Controller
- NS2: Wired Controller
- NS1: Wired Pro Controller (coming soon)
- NS1: Wired Left Joycon (coming soon)
- NS1: Wired Right Joycon (coming soon)
- NS1: Wireless Pro Controller
- NS1: Wireless Left Joycon
- NS1: Wireless Right Joycon

The Raspberry Pi Pico W is unique in that it can support every single controller. However, accessing the wired controllers is more difficult as it requires more setup.

The large (silver) chip is a Bluetooth module that supports both BTC and BLE. This allows it to implement wireless controllers. Meanwhile, the USB port on it is USB OTG which allows it to implement the wired controllers. But unlike the ESP32-S3, it does not have a 2nd USB port to use as a UART connection to the computer.

Therefore we have programmed two operating modes for the Pico W:
- USB Mode
- UART Mode

In USB mode, the USB port acts as a serial port that can be plugged directly into the computer. This makes it functionally the same as the ESP32 with only wireless controller support.

In UART mode, the USB port becomes a wired controller plugged into the console. This unlocks all the remaining (wired) controllers. However, you need to wire up an external UART to UART1 in order for it to communicate with the computer. Thus this setup is similar to that of the Teensy 2 and Pro Micro with the added bonus of the wireless controller support.

Both operating modes use the same firmware binary. On boot, it starts in USB mode. It automatically switches to UART mode when it sees valid traffic on UART1.
Arduino Uno R3

Supported Controllers:
- NS2: Wired controller

The Arduino Uno R3 is one of the original boards that spearheaded the Nintendo Switch automation community. However, its ATmega16U2 AVR8 CPU is very weak with only 512 bytes of ram and 12KB of usable program memory.

This controller is only suitable for emulating the basic wired controllers. It doesn't even have enough memory to hold multiple controller implementations the way that some of the newer controllers can.
Arduino Leonardo

Supported Controllers:
- NS2: Wired controller

The Arduino Leonardo uses an ATmega32U4 AVR8 CPU. It has significantly more ram and program memory at 2.5KB and 32KB respectively. This was the last addition to the AVR8 microcontroller line up and was chosen because it was easier to setup a serial connection than the Teensy or Pro Micro boards.

Being an AVR8 processor, it shares codebase with the Arduino Uno R3 and thus we only support a single wired controller type on it.
Pro Micro

Supported Controllers:
- NS2: Wired controller

The Pro Micro uses an ATmega32U4 AVR8 CPU and is functionally the same as the Arduino Leonardo and Teensy 2.0. This was added to our lineup because it was the cheapest microcontroller of this type in volume. Thus it became the work horse for many people with multiple Switches.
Teensy 2.0

Supported Controllers:
- NS2: Wired controller

The Arduino Uno R3 is one of the original boards that spearheaded the Nintendo Switch automation community.

The Teensy 2.0 uses an ATmega32U4 AVR8 CPU and is functionally the same as the Arduino Leonardo and Pro Micro. This (along with the Teensy++ 2.0) was by far the best board during the microcontroller-only automation era due to the easy-to-use button to put the board into flash mode. It began to fall out of use in the computer-control era due to the difficulty of setting up a serial connection on it.
Teensy++ 2.0

Supported Controllers:
- NS2: Wired controller

The Teensy++ 2.0 is the same as the Teensy 2.0, but with an upgraded AT90USB1286 CPU which has much more ram and program memory.

This extra ram and program memory was never put to use in this project. So it is functionally the same as the Teensy 2.0 along with all its advantages and drawbacks.

Controller Types

A "controller" (not to be confused with the microcontrollers above) refers to a game controller that will be emulated for the purpose of controlling the game console.

Image Description
HID: Keyboard

This is a standard HID keyboard over USB. While it can't be used to play a Nintendo Switch, it is useful for typing in text fields. Thus it provides the fastest method for Fast Code Entry.

This uses the standard 8-byte HID keyboard report that allows for up to 6 keys to be held at once.
Switch 1: Wired Controller

This is the standard 3rd party "officially licensed" wired controller. Most wired controllers from Horipad and PowerA fall into this category.

This controller type only supports the standard buttons/joystick and do not support rumble or gyro. It also does not support custom colors in its icon when connected to the Switch.

These use the standard 8-byte HID report type with 14 buttons, a dpad, and two joysticks with 8-bit precision.
Switch 2: Wired Controller

This is the same as the Switch 1 wired controller, except that they add the GL, GR, and C (gamechat) buttons for the Switch 2. This controller type is backwards compatible with the Switch 1 such that pressing the new buttons simply do nothing on the Switch 1.

These also use the standard 8-byte HID report type with 17 buttons, a dpad, and two joysticks with 8-bit precision. Due to the button field having only 16 bits, the 17'th button (the C button) instead uses an unused bit in the dpad byte.
Switch 1: Wired/Wiress Pro Controller

This is the official pro controller from Nintendo. In addition to all the features of the 3rd party wired controllers above, it also supports gyro, rumble, NFC, console wake up, and custom icon colors. (Though we currently only support rumble and console colors.)

This controller exists in two variants, wired and wireless. Wireless is supported by the ESP32 and the Pico W. Wired is currently only supported sys-botbase, but will soon be coming to the ESP32-S3 and the Pico W (UART).

This controller uses Nintendo's proprietary 48-byte HID report 0x30.
Switch 1: Wired/Wireless Joycons

These are the official joycons from Nintendo and supports the same set of features as the Pro Controller (minus fewer buttons/joysticks). Joycons are important to this project because they are required for some games such as Pokémon Let's Pikachu and Eevee (LGPE).

While wired joycons do not (officially) exist, the protocol for it does. Thus joycons can also be either wired or wireless. Wireless is supported by the ESP32 and Pico W controllers. Wired is not yet supported, but will soon be coming to the ESP32-S3 and the Pico W (UART).

These use Nintendo's proprietary 48-byte HID report 0x30.

Controller Performance Classes

For the purposes of program compatibility, each setup/device + controller combination is placed into one of 3 performance categories:

  • Wired
  • Wireless
  • sys-botbase 2

Programs that are speed-critical will have separate execution paths optimized for each performance category. (i.e. date spam, Fast Code Entry...)

Wired:

Wired controllers are by far the most stable with a button timing accuracy of < 1ms (typically ~100us). They are not prone to random disconnects and can connect to the Switch from almost anywhere. This makes them the best suited for automation.

Device Controller
ESP32-S3
Pico 1/2 W (UART mode)
HID: Keyboard
NS1: Wired Controller
NS2: Wired Controller
NS1: Wired Pro Controller (coming soon)
NS1: Wired Left Joycon (coming soon)
NS1: Wired Right Joycon (coming soon)
Arduino Uno R3
Arduino Leonardo
Pro Micro
Teensy 2.0
Teensy++ 2.0
NS2: Wired Controller
sys-botbase 3 (sbb3) NS1: Wired Pro Controller

Wireless:

Wireless controllers are less stable and usually have timing variation on the order of 2-10ms. While they are clean and easy to setup with no additional cabling, wireless controllers are generally less reliable since they are prone to random disconnects and high latencies from wireless interference. Nintendo's complicated (and proprietary) wireless protocol means that 3rd party implementations (including this project) are typically less than perfect and prone to compatibility issues.

The main issue with wireless is that it can only reliably connect to the Switch inside the grip menu. So if you get disconnected outside of the grip menu and are unable to reconnect, you will need another controller or physical access to navigate back to the grip menu to re-pair the controller. For this reason, wireless controllers are less suited for remotely controlled automation.

Device Controller
ESP32
Pico 1/2 W (both modes)
NS1: Wireless Pro Controller
NS1: Wireless Left Joycon
NS1: Wireless Right Joycon

sys-botbase 2:

This category exists simply because sys-botbase 2 (sbb2) is extremely unstable with timing variations upwards of 150ms along with massive throughput issues due to backpressure. As a result, many programs written for the above wired and wireless controllers do not work on sbb2.

With the launch of sys-botbase 3 (sbb3), this setup has been deprecated.

Device Controller
sys-botbase 2 (sbb2) NS1: Wired Pro Controller

Discord Server: