ESP32-S3 HID Bridge

Firmware that turns an ESP32-S3 into USB gamepads, keyboard, and mouse for Sunshine.

Community project, not affiliated with LizardByte, Espressif, Microsoft, Sony, or Nintendo.

Sunshine sends input to the board over USB serial. The board presents it as standard USB devices. It has two slots: keyboard and mouse share one, and each gamepad takes one. At most one gamepad can be Xbox.

Flash

  1. Use Chrome or Edge on a desktop.
  2. Connect the board's native USB port with a data cable.
  3. If no port shows up, hold BOOT while plugging in.
  4. Click Install and select the port.
  5. Replug the board when done.
This browser can't flash devices. Use Chrome or Edge on a desktop. Flashing requires https. Firmware 0.2.0 · status LED on GPIO21 · other builds

Not supported: octal-flash boards (e.g. DevKitC-1 N32R8V) and boards whose only USB port is a CH340/CP2102 serial chip.

Boards

Any ESP32-S3 board with native USB and quad flash, for example:

BoardFlashLinks
Seeed Studio XIAO ESP32S38 MBstore
Waveshare ESP32-S3-Zero4 MBstore · docs
LilyGO T-Dongle-S316 MBstore · wiki
Adafruit QT Py ESP32-S34 MBstore
Espressif ESP32-S3-DevKitC-1 (use the USB port)8–16 MBsellers · docs

Sunshine

  1. Install a build from the esp32-bridge branch.
  2. Plug in the board, then start Sunshine. It selects ESP32-S3 USB Bridge automatically (Configuration → Input → Gamepad Backend).
  3. On first connection the LED blinks fast. Press BOOT to pair.

Pairing

The board only accepts input from paired programs (up to four). Changes below must be confirmed with BOOT. Holding BOOT for 10 seconds removes all pairings.

Close Sunshine first; the serial port can only be open in one program.

Troubleshooting

ProblemFix
No port when flashingHold BOOT while plugging in; try another cable.
Sunshine doesn't use the boardPlug it in before starting Sunshine; check the gamepad backend setting.
Log says the board is not pairedPress BOOT while the LED blinks fast. With four pairings, remove one above.
Connect reports "update the firmware"Flash firmware 0.2.0 or later.
Pads drop for a second when a client joinsExpected: device changes re-enumerate the board.
Second gamepad missingBoth slots are in use.