What Is This?
BT2USB turns a Raspberry Pi Pico W (or Pico 2 W) into a wireless Bluetooth-to-USB adapter. Pair a supported PS5, Xbox, Switch Pro, or other Bluetooth controller and it shows up as a standard USB gamepad on a PC, Mac, console, or other device that accepts a USB gamepad.
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 — SInput, XInput, PS3, PS4, Switch, and more
- No drivers needed — just plug in and it works
- Zero soldering, zero wiring — this might be the 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 — and a native USB port. That means one board handles both the wireless input and the USB output, with nothing to wire up. It supports a wide range of wireless controllers, including:
| Controller | Supported |
|---|---|
| DualSense (PS5) | ✅ Rumble |
| DualShock 4 (PS4) | ✅ Rumble + touchpad |
| DualShock 3 (PS3) | ✅ Rumble |
| Switch Pro Controller | ✅ Rumble |
| Switch 2 Pro Controller | ✅ |
| Wii U Pro Controller | ✅ |
| NSO GameCube Controller | ✅ |
| Xbox One / Series (Bluetooth mode) | ✅ |
| Google Stadia | ✅ |
| Generic Bluetooth 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
This build requires no soldering and no wiring. You only need two things:
| Part | Notes |
|---|---|
| Raspberry Pi Pico W (~$6) | Or a Raspberry Pi Pico 2 W |
| Micro-USB data cable | Must be data-capable, not charge-only |
Both the Pico W and Pico 2 W use a Micro-USB connector. That's it — no breakout boards, no wiring, no soldering.
Flash the Firmware
Step 1: Download the UF2
Go to the JoypadOS releases page and grab the right file for your board:
| Board | Firmware File |
|---|---|
| Pico W | joypad_*_bt2usb_pico_w.uf2 |
| Pico 2 W | joypad_*_bt2usb_pico2_w.uf2 |
Optional — build from source: If you'd rather build it yourself, run
make bt2usb_pico_w(ormake bt2usb_pico2_w) from the JoypadOS repo and flash the resulting.uf2.
Step 2: Enter Bootloader Mode
- Unplug the Pico W from your computer
- Hold the BOOTSEL button (the small white button on the board)
- While holding BOOTSEL, plug the USB cable into your computer
- Release BOOTSEL
- A drive named
RPI-RP2appears on your computer
Note: On the Pico 2 W the bootloader drive may mount under a different name — flash the
.uf2onto whichever drive appears.
Step 3: Flash
- Drag and drop the
.uf2file onto the drive - The drive auto-ejects when flashing is complete
- The Pico W reboots and is immediately ready to pair
Pairing Your Controller
The adapter automatically enters pairing/scan mode on boot — no button press needed.
- Plug the adapter into your PC, console, or device via USB
- 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 (Bluetooth mode): Hold the pair button (small button on top) until the Xbox button flashes
- Switch Pro / Switch 2 Pro: Hold the sync button on top of the controller
- The adapter discovers and pairs the controller automatically
- Once paired, the controller reconnects automatically every time you power it on — the bond is saved to the adapter's flash
Pairing Multiple Controllers
BT2USB supports up to 4 Bluetooth connections across 4 player slots. All inputs are merged into a single USB output — great for co-op games that support it, or for building a copilot/accessibility setup.
Rumble
Rumble is forwarded from the host back to the Bluetooth controller, so force feedback works through the adapter on controllers that support it.
Testing
- Open the Joypad controller tester — it works great in Chrome or any modern browser
- You should see the adapter listed as a connected gamepad
- Press buttons on your Bluetooth controller — they should show up immediately
- Test sticks, triggers, and D-pad
Output Modes
The default USB output mode is PS4. To cycle through the available modes (SInput, XInput, PS3, PS4, Switch, and more), hold SELECT + D-pad Up or Down for about 2 seconds.
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
- Real-time input monitoring
- Rumble testing
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 back in pairing mode
- Move the controller closer to the adapter for initial pairing
Controller Pairs but Disconnects
- Charge your controller — low battery causes disconnection
- Keep the controller within normal Bluetooth range of the adapter
- Some controllers (Xbox especially) need to be in the correct Bluetooth 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. Hold SELECT + D-pad Up/Down to cycle to the mode your game expects (many games expect XInput)
- Open config.joypad.ai and check/edit your button mappings
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?
- USB2USB Guide — Build the wired USB version (adds a USB-A host port for wired controllers too)
- BT2N64 Guide — Use Bluetooth controllers on a real N64 console
- Controller Archive — Full list of supported controllers and their BT pairing instructions
- Web Configurator — Customize everything
- Community Discord — Share your build, get help
Estimated build time: 10–15 minutes (just flashing and pairing, zero soldering). Difficulty: Easy.