More actions
No edit summary |
|||
(One intermediate revision by the same user not shown) | |||
Line 2: | Line 2: | ||
|title=Nintendo Switch Remote Control | |title=Nintendo Switch Remote Control | ||
|image=nintendoswitchremotecontrol.png | |image=nintendoswitchremotecontrol.png | ||
|description=Remote play system for the Nintendo Switch | |description=Remote play system for the Nintendo Switch. | ||
|author=javmarina | |author=javmarina | ||
|lastupdated=2022/04/24 | |lastupdated=2022/04/24 | ||
|type= | |type=Remote Play and Streaming | ||
|version=pre-release | |version=pre-release | ||
|license=MIT | |license=MIT |
Latest revision as of 03:05, 20 October 2024
Nintendo Switch Remote Control | |
---|---|
General | |
Author | javmarina |
Type | Remote Play and Streaming |
Version | pre-release |
License | MIT License |
Last Updated | 2022/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:
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).