Skip to content

BT2N64 — Bluetooth to N64 Adapter

BT2N64 turns a Raspberry Pi Pico W or Pico 2 W into a wireless Bluetooth-to-N64 controller adapter. Pair any supported Bluetooth controller and play N64 games wirelessly with rumble support.

Features

  • Wireless Bluetooth controllers on real N64 hardware
  • Rumble pak emulation (rumble forwarded to BT controller)
  • Controller pak identification (games see a rumble pak)
  • 3 button mapping profiles (Default, FPS, Mario)
  • Cold boot detection (works from console power-on)
  • BOOTSEL button: click to scan for new devices, hold to clear all bonds

Supported Controllers

Pico W / Pico 2 W (Classic BT + BLE)

Controller Status
DualSense (PS5) Supported
DualShock 4 (PS4) Supported
DualShock 3 (PS3) Supported
Xbox One / Series Supported
Switch Pro Supported
8BitDo controllers Supported
NSO GameCube Supported
Generic BT HID Basic support

Hardware

Requirements

  • Raspberry Pi Pico W or Pico 2 W
  • N64 controller extension cable (cut one end) or custom wiring
  • 3 wires: Data, 3.3V, GND

Wiring

Pico W Pin N64 Controller Port
GPIO 2 Data
3V3 (OUT) 3.3V
GND GND

N64 Controller Port Pinout

Looking at the front of the console's controller port:

  ___________
 / 1   2   3 \
|  4   5   6  |
 \___________/

Pin 1: GND
Pin 2: Data
Pin 3: 3.3V
Pin 4: N/C
Pin 5: N/C
Pin 6: GND

Firmware Files

Board File
Pico W joypad_*_bt2n64_pico_w.uf2
Pico 2 W joypad_*_bt2n64_pico2_w.uf2

Installation

  1. Hold BOOTSEL button while connecting Pico W/2W via USB
  2. Drag and drop the .uf2 file to the RPI-RP2 (Pico W) or RP2350 (Pico 2 W) drive
  3. Drive auto-ejects when complete
  4. Connect to N64 controller port

Pairing

  1. Power on the N64 with the adapter connected
  2. The adapter automatically scans for controllers on boot
  3. Put your Bluetooth controller into pairing mode
  4. Once paired, the controller reconnects automatically on subsequent use
  5. Click BOOTSEL to start a 60-second scan for additional devices
  6. Hold BOOTSEL to disconnect all devices and clear all bonds

LED Status

The onboard LED indicates adapter status:

Pattern Meaning
Fast blink (100ms) N64 console not communicating (check wiring)
Slow blink (400ms) N64 OK, no Bluetooth controller connected
Very fast blink (50ms) N64 OK + BT connected, but no data flowing
Solid on N64 OK + BT connected + data flowing

Controller Profiles

Switch between optimized button mappings. Hold Select for 2 seconds, then press D-Pad Up/Down to cycle profiles. The controller rumbles to confirm.

Default Profile

Standard N64 mapping with right stick mapped to C-buttons:

BT Input N64 Output Notes
Cross/A (B1) A
Square/X (B3) B
Circle/B (B2) C-Down
Triangle/Y (B4) C-Left
L1/LB L
R1/RB R
L2/LT Z
R2/RT C-Right
Select C-Up
Start Start
Guide/Home Start
Right Stick C-buttons Threshold-based
Left Stick Control Stick
D-Pad D-Pad

FPS Profile

Optimized for GoldenEye, Perfect Dark, and other N64 shooters:

BT Input N64 Output Notes
Cross/A (B1) B Attack
Circle/B (B2) A Action
Square/X (B3) C-Down
Triangle/Y (B4) C-Up
R1/RB Z Shoot (easier reach)
L1/LB R Aim/targeting
L2/LT L
R2/RT Z Alternate shoot
Right Stick C-buttons Strafe/look

Mario Profile

Optimized for Super Mario 64 and platformers:

BT Input N64 Output Notes
Cross/A (B1) B Punch/attack
Circle/B (B2) A Jump
Square/X (B3) C-Down Camera
Triangle/Y (B4) C-Up Camera
L1/LB L Crouch camera
R1/RB R Shoulder camera
L2/LT Z Crouch/ground pound
R2/RT Z Alternate Z
L3 (left stick click) Walk modifier 50% stick sensitivity

Rumble

N64 rumble pak is emulated. When a game activates rumble, the vibration is forwarded to the Bluetooth controller. The adapter identifies itself as having a rumble pak inserted, so games that check for accessories will detect it.

Rumble intensity is scaled for Bluetooth controllers:

  • Left (heavy) motor: ~50% when N64 rumble is active
  • Right (light) motor: gentle vibration

Technical Details

Dual-Core Architecture

  • Core 0: Bluetooth stack (BTstack/CYW43), input processing, main loop
  • Core 1: Joybus protocol (timing-critical, runs entirely from RAM)

On Pico 2 W (RP2350), Core 0's CYW43 driver periodically locks flash for Bluetooth bonding storage. Core 1's joybus handler is fully RAM-resident to avoid flash contention.

N64 Joybus Protocol

  • Single-wire bidirectional protocol at 250kHz
  • Open-drain with pull-up resistor
  • Implemented via RP2040/RP2350 PIO state machine
  • Standard clock speed (no overclock needed, unlike GameCube)

Cold Boot Detection

The adapter detects N64 console power-on and responds to the PIF's initial controller probe. This works whether the adapter powers on with the console or is already running when the console starts.

Troubleshooting

N64 doesn't detect controller (fast LED blink):

  • Check wiring: Data (GPIO 2), 3.3V, GND
  • Ensure connections are solid (no loose wires)
  • Try pressing the N64 reset button

LED slow blink (no BT controller):

  • Put your controller into pairing mode
  • Click BOOTSEL to start a 60-second scan
  • Hold BOOTSEL to clear bonds and re-pair from scratch

Buttons not responding in game:

  • Verify the correct profile is active (try cycling with Select + D-Pad)
  • Check that the LED is solid (data flowing)
  • Some controllers may need specific BT pairing mode (Classic BT vs BLE)

Rumble not working:

  • Not all games use rumble pak
  • Verify with a known rumble game (e.g., Star Fox 64, Mario 64 Shindou)
  • Check that your BT controller supports vibration

Controller disconnects frequently:

  • Move closer to the adapter (BT range is ~10m)
  • Ensure controller battery is charged
  • Hold BOOTSEL to clear bonds and re-pair