🔌

Build a USB-to-USB Controller Adapter

Easy30–45 minutes💰 $17–20🧩 2 parts

🛒 Don't want to build? Buy a ready-made adapter and support Joypad.

Build a USB-to-USB Controller Adapter

What Is This?

The USB2USB adapter lets you plug any supported USB controller into one side and get a standard USB gamepad out the other. Think of it as a universal controller translator.

Why would you want this?

  • Use your favorite controller everywhere — Plug a DualSense into a PC that only expects Xbox, or a Switch Pro Controller into a PS3
  • Output as XInput, PS3, PS4, Switch, or keyboard/mouse — Cycle between modes with a double-click
  • Remap buttons via config.joypad.ai — no software to install
  • Works on actual Xbox 360 consoles — XInput mode authenticates via XSM3

This is the simplest Joypad OS build. If you go with the Feather RP2040 USB Host board, you don't even need to solder — just flash the firmware and plug things in.

Choose Your Board

You have two paths here:

Option A: Adafruit Feather RP2040 USB Host (No Soldering!)

This board has a built-in USB-A host port, so your controller plugs right in. The USB-C port connects to your PC (or console) as the output. Zero wiring.

Best for: First-timers, people who just want it to work.

Option B: Raspberry Pi Pico + USB-A Breakout (Budget Build)

The Pico is cheaper but you'll need to wire up a USB-A port yourself. Four wires, a bit of soldering. Still very beginner-friendly.

Best for: Tinkerers, budget builds, people who already have a Pico lying around.

You can also use a Waveshare RP2040-Zero ($6, USB-C, ultra-compact) — same wiring as Pico but with different GPIO pins.

Parts List

Option A — Feather USB Host (No Soldering)

Part Price Link
Adafruit Feather RP2040 USB Host $11.95 Adafruit
USB-C data cable ~$5 Any data-capable USB-C cable

That's it. Seriously.

Option B — Raspberry Pi Pico (Budget)

Part Price Link
Raspberry Pi Pico $4.00 Raspberry Pi
USB-A female breakout board $2.50 Adafruit
Micro-USB data cable ~$5 Must be a data cable
Jumper wires or 22–26 AWG wire ~$3 Any electronics supplier
Soldering iron + solder If you don't already have one

Wiring (Option B — Pico Only)

If you're using the Feather RP2040 USB Host, skip this section entirely. The USB-A port is built in and pre-wired.

You're connecting a USB-A female breakout board to the Pico so controllers can plug in.

USB-A Connector Pinout

  ┌───────────────────┐
  │ 1   2   3   4     │
  └───────────────────┘
   VBUS  D-  D+  GND
   (5V)

Pico Wiring

Pico Pin USB-A Pin Signal Wire Color (typical)
GPIO 16 (physical pin 21) Pin 3 D+ Green
GPIO 17 (physical pin 22) Pin 2 D- White
VBUS (physical pin 40) Pin 1 5V power Red
GND (physical pin 38) Pin 4 Ground Black

Waveshare RP2040-Zero Wiring

RP2040-Zero Pin USB-A Pin Signal Wire Color
GPIO 10 Pin 3 D+ Green
GPIO 11 Pin 2 D- White
5V Pin 1 5V power Red
GND Pin 4 Ground Black

Wiring Tips

  • ⚠️ Double-check D+ and D- — swapping them is the #1 mistake and everything will silently fail
  • Keep wires under 15cm (6 inches) — USB signal quality degrades with length
  • A breakout board with labeled pins is much easier than cutting a USB cable
  • No USB hubs — connect your controller directly (PIO-USB doesn't support hubs)

Flash the Firmware

Step 1: Download the UF2

Go to github.com/joypad-ai/joypad-os/releases and download the right file for your board:

Board Firmware File
Feather RP2040 USB Host joypad_*_usb2usb_feather.uf2
Raspberry Pi Pico joypad_*_usb2usb_pico.uf2
Waveshare RP2040-Zero joypad_*_usb2usb_rp2040zero.uf2

Step 2: Enter Bootloader Mode

  1. Unplug the board from your computer
  2. Hold down the BOOT button on the board
  3. While holding BOOT, plug the USB-C (or Micro-USB) cable into your computer
  4. Release BOOT after plugging in
  5. A drive named RPI-RP2 should appear on your computer

Trouble? Make sure you're using a data cable, not a charge-only cable. Try a different USB port. On macOS, check Disk Utility if the drive doesn't show up in Finder.

Step 3: Flash

  1. Drag and drop the .uf2 file onto the RPI-RP2 drive
  2. Wait a moment — the drive will automatically eject
  3. The board reboots with the new firmware

That's it! No special software, no command line.

Testing

  1. Connect the adapter to your PC via the USB-C (or Micro-USB) port — this is the output side
  2. Plug a USB controller into the USB-A port (built-in on Feather, or your wired breakout on Pico)
  3. Check that the adapter is recognized:
    • Windows: Open "Set up USB game controllers" (joy.cpl) — you should see "Joypad HID Gamepad"
    • macOS/Linux: Open a gamepad tester in your browser
  4. Press buttons and move sticks — they should show up in the tester
  5. Check LED status:
    • 🟢 Solid green = no controller connected
    • 🔵 Solid blue = 1 controller connected
    • 🟣 Purple = 2 controllers connected

Try Different Output Modes

Double-click the board button to cycle through USB output modes:

SInput → XInput → PS3 → PS4 → Switch → Keyboard/Mouse → SInput

Triple-click to reset back to SInput (default).

The mode is saved to flash, so it persists across power cycles.

Web Configuration

For advanced setup, connect the adapter and open config.joypad.ai in Chrome or Edge. From there you can:

  • Switch output modes
  • Create and edit button remapping profiles
  • Monitor controller inputs in real-time
  • Test rumble
  • Reboot into bootloader for firmware updates

Troubleshooting

Controller Not Detected

  • Check your cable — charge-only cables won't work. You need a data cable.
  • Verify wiring (Pico builds) — D+ and D- are almost certainly swapped if nothing works. Double-check GPIO 16 → D+ (green) and GPIO 17 → D- (white).
  • Try a different controller — some controllers may not be supported yet. Check the controller compatibility list.
  • No USB hubs — PIO-USB only supports direct connections.

RPI-RP2 Drive Doesn't Appear

  • Hold BOOT before connecting USB, not after.
  • Try a different USB cable (data-capable).
  • Try a different USB port on your computer.
  • Windows: Check Device Manager for "RP2 Boot" device.
  • macOS: Check Disk Utility for an unmounted drive.

Controller Connects but Input is Wrong

  • You may be in the wrong output mode. Triple-click the board button to reset to SInput.
  • Open config.joypad.ai to check your current mode and profile.
  • Some games expect XInput — double-click to cycle to XInput mode.

Controller Disconnects or Is Flaky

  • Shorten your wires (Pico builds) — USB signals degrade over distance.
  • Check for cold solder joints — reheat any connections that look dull or blobby.
  • High-power controllers (Xbox with rumble) may need more current. Try powering the Pico via VSYS with a separate 5V supply.

What's Next?


Estimated build time: 15 minutes (Feather, no soldering) or 30–45 minutes (Pico, with wiring). Difficulty: Easy.

More Build Guides

Need help with this build?

Join our community for build support. Get help on Discord →