Nintendo Switch Remote Control Switch

From GameBrew
Nintendo Switch Remote Control
Nintendoswitchremotecontrol.png
General
Authorjavmarina
TypeRemote Play and Streaming
Versionpre-release
LicenseMIT License
Last Updated2022/04/24
Links
Download
Website
Source

Remote play for the Nintendo Switch via WebRTC (with video streaming). Pro Controller emulation in AVR firmware.

This project uses the LUFA library and reverse-engineering of the Pro Controller for Nintendo Switch for remote control of the console. It consists on three main parts:

  • GUI: Java project with two programs, client and server.
    • The client takes input from a real controller, keyboard or a Discord bot and sends it to the server over WebRTC.
    • The server receives the input and sends it to an AVR microcontroller which acts as a controller. The MCU is plugged into the Switch dock and the console recognizes it as a Pro Controller. If you have a USB-C adapter, you should also be able to use this in handheld mode/Switch Lite.
    • Finally, the server sends a real-time video and audio stream acquired from an HDMI capture card, over WebRTC (the technology used for Stadia and Google Meet).
  • Firmware: firmware that runs on the microcontroller. The server PC sends the received commands to the microcontroller via UART. When the Switch requests HID reports, the microcontroller sends them. It uses the LUFA library.
  • Small Python code for fast prototyping (python folder).

The goal of this project is to provide a way to play Switch games remotely (two computers), or control the console locally or automate tasks (one computer).

User guide

Prerequisites:

  • A LUFA-compatible microcontroller such as the Teensy 2.0++, Arduino UNO R3, or the Arduino Micro
  • A USB-to-UART (TTL) adapter. Popular ones are based on FTDI and CH340 chip. Can be easily found online.
  • An HDMI capture card compatible with libuvc (in general, any with USB output). Device quality can dramatically affect streaming performance.
  • A PC with Java and JDK installed (Java 11 or newer required).

Hardware diagram:

nintendoswitchremotecontrol2.png

Note: if you're using a FTDI-based serial adapter, you need to reduce the latency timer value.

Additional information can be found on the specific README files.

The README inside the gui folder contains information about the Java project, required setup and steps, known issues and instructions for configuring a Discord bot.

Inside firmware folder there are instructions for compiling and flashing the firmware for different boards, as well as a list of changes made to the original code.

Credits

Acknowledgments:

  • devopvoid for his work on the webrtc-java project.
  • mzyy94 for his work on Pro Controller emulation using a Raspberry Pi.
  • wchill for the SwitchInputEmulator project. My firmware was initially based on his work.
  • progmem for the Switch-Fightstick repository, which itself is the base of wchill work and created the opportunity to control the Switch with a LUFA-compatible MCU.
  • ItsDeidara author of the CommunityController repository and host of the namesake Twitch channel. Gave some tips for hardware configuration and some of the serial port code is based on his work.
  • abcminiuser, who created the LUFA library (Lightweight USB Framework for AVRs).

External links

Advertising: