📶

Build a Bluetooth-to-USB Controller Adapter

Easy15–30 minutes💰 $11–14🧩 2 parts

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

Build a Bluetooth-to-USB Controller Adapter

What Is This?

BT2USB turns a Raspberry Pi Pico W (or Pico 2 W) into a wireless Bluetooth-to-USB adapter. Pair your PS5, Xbox, Switch Pro, or other Bluetooth controller and it shows up as a standard USB gamepad on your PC, Mac, console, or anything with a USB port.

Why would you want this?

  • Use wireless controllers on systems that don't support them — older PCs, retro mini consoles, MiSTer FPGA, arcade cabinets
  • Low-latency wired output from wireless controllers — great for competitive play
  • Multiple output modes — XInput, PS3, PS4, Switch, keyboard/mouse
  • No drivers needed — just plug in and it works
  • Under $10 and zero soldering — this might be the cheapest and easiest DIY adapter you'll ever build

Why the Pico W?

The Pico W (and Pico 2 W) have built-in Bluetooth — both Classic BT and BLE. That means they can talk to basically every wireless controller out there:

Controller Supported?
DualSense (PS5) ✅ Classic BT
DualShock 4 (PS4) ✅ Classic BT
DualShock 3 (PS3) ✅ Classic BT
Xbox One / Series X|S ✅ BLE
Switch Pro Controller ✅ Classic BT
Switch 2 Pro Controller ✅ Classic BT
Wii U Pro Controller ✅ Classic BT
NSO GameCube Controller ✅ Classic BT
Google Stadia ✅ BLE
8BitDo controllers ✅ Various
Generic BT HID gamepads ✅ Basic

Note: ESP32-S3 and nRF52840 boards also run BT2USB, but they only support BLE — meaning no PS3, PS4, PS5, or Switch Pro over Classic BT. Stick with the Pico W for the widest compatibility.

Parts List

Part Price Link
Raspberry Pi Pico W $6.00 Raspberry Pi / Adafruit
Micro-USB data cable ~$5 Any data-capable cable

Or if you want the newer board:

Part Price Link
Raspberry Pi Pico 2 W $7.00 Raspberry Pi
USB-C data cable ~$5 Any data-capable cable

Total: $6–12. That's it. No breakout boards, no wiring, no soldering.

Wiring

There is no wiring. 🎉

The Pico W handles everything through its built-in Bluetooth radio and its USB port. The USB port acts as the output — plug it into whatever you're playing on.

Flash the Firmware

Step 1: Download the UF2

Go to github.com/joypad-ai/joypad-os/releases and grab the right file:

Board Firmware File
Pico W joypad_*_bt2usb_pico_w.uf2
Pico 2 W joypad_*_bt2usb_pico2_w.uf2

Step 2: Enter Bootloader Mode

  1. Unplug the Pico W from your computer
  2. Hold the BOOTSEL button (the small white button on the board)
  3. While holding BOOTSEL, plug the USB cable into your computer
  4. Release BOOTSEL
  5. A drive named RPI-RP2 (Pico W) or RP2350 (Pico 2 W) appears on your computer

Step 3: Flash

  1. Drag and drop the .uf2 file onto the drive
  2. The drive auto-ejects when flashing is complete
  3. The Pico W reboots and is immediately ready to pair

Pairing Your Controller

  1. Plug the adapter into your PC, console, or device via USB
  2. Put your Bluetooth controller into pairing mode:
    • PS5 DualSense: Hold Share + PS button until the light bar flashes rapidly
    • PS4 DualShock 4: Hold Share + PS button until the light bar flashes
    • PS3 DualShock 3: Press the PS button (must be unplugged from USB)
    • Xbox: Hold the pair button (small button on top) until the Xbox button flashes
    • Switch Pro: Hold the sync button on top of the controller
    • 8BitDo: Check your 8BitDo's manual — usually hold Start or a specific button combo
  3. The adapter automatically scans for controllers on boot — no button press needed
  4. Once paired, the controller reconnects automatically every time you power it on

Pairing Multiple Controllers

BT2USB can pair multiple Bluetooth controllers simultaneously. All inputs are currently merged into a single USB output — great for co-op games that support it, or for building a copilot/accessibility setup.

Testing

  1. Open a gamepad testergamepad-tester.com works great in Chrome
  2. You should see the adapter listed as a connected gamepad
  3. Press buttons on your Bluetooth controller — they should show up immediately
  4. Test sticks, triggers, and D-pad

Output Modes

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

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

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

Your selected mode saves to flash and persists across power cycles.

Web Configuration

Open config.joypad.ai in Chrome or Edge while the adapter is connected for:

  • Output mode switching
  • Button remapping profiles
  • Real-time input monitoring
  • Rumble testing
  • Bluetooth bond management (view/clear pairings)

Note: Web config is accessible in default (SInput) mode. If you've switched modes, triple-click to return to default first.

Troubleshooting

Controller Won't Pair

  • Make sure the controller is actually in pairing mode (not just powered on)
  • The adapter scans automatically on boot. Try unplugging and replugging the adapter, then put the controller in pairing mode
  • Click BOOTSEL once to trigger a 60-second scan for new devices
  • Hold BOOTSEL to clear all saved bonds and start fresh
  • Move the controller closer to the adapter — within a few feet for initial pairing

Controller Pairs but Disconnects

  • Charge your controller — low battery causes disconnection
  • Move closer to the adapter — Bluetooth range is about 10 meters (30 feet)
  • Hold BOOTSEL to clear bonds and re-pair from scratch
  • Some controllers (Xbox especially) may need to be in a specific BT mode

No USB Device Detected by Computer

  • Make sure you're using a data cable, not a charge-only cable
  • Try a different USB port
  • Reflash the firmware — the flash may not have completed properly

Buttons Are Mapped Wrong

  • You may be in the wrong output mode. Triple-click BOOTSEL to reset to SInput
  • Open config.joypad.ai and check/edit your button mappings
  • Some games expect XInput — double-click to switch modes

RPI-RP2 Drive Doesn't Appear During Flashing

  • Hold BOOTSEL before connecting the cable, not after
  • Try a different USB cable (must be data-capable)
  • Try a different USB port
  • On macOS, check Disk Utility for an unmounted drive

What's Next?


Estimated build time: 15 minutes (just flashing, zero soldering). Difficulty: Easy.

More Build Guides

Need help with this build?

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