Design files and resources for building a wireless N64 controller

Overview

wireless-n64-controller

This project and its documentation is a Work-In-Progress. I'm still working on writing everything down and working out kinks in the design files and prototypes.

The idea is to publish the design files and software I used to upgrade a cheap, wired N64 controller to a wireless, Bluetooth controller. Hopefully these published files can assist others in completing similar projects.

Motivation

When this project was started, no original-form-factor N64 wireless controllers were available for purchase. There were some two-handle controllers, inspired by N64 original controllers, but none with the original three-handle setup.

The main goal of this project was to upgrade an existing, cheap three-handle N64 wired controller to use bluetooth, so it could be used with a PC and/or Raspberry Pi.

Building your own

Detailed building instructions TODO.

Note: this project requires soldering and some basic understanding of electriconics and circuits. I also assume you already have soldering equipment and some ~30 gauge wire to wire up components.

Steps

  1. Purchase the base parts. See the BOM for more details and links.

    • Base N64 controller you plan to modify. I'm not sure how standardized N64 controller internals are, so it is probably a good idea to confirm the measurements of your controller match up with the spacing of the PCB mounting/securing holes.
    • ESP32 microcontroller
    • AAA terminals
    • LiPo battery
    • LiPo battery charging board
  2. Print the PCB.

  3. Print the battery pak pieces. Alternatively, you could skip using a battery pak and directly wire a battery to the power-in on the PCB or microcontroller.

  4. Program the microcontroller.

  5. Solder the microcontroller and aux boards/wires to the PCB.

  6. Assemble the N64 controller.

  7. Have fun! (optional)

Debugging

Note: make sure you disconnect the battery before plugging a USB cable into the microcontroller. If you do not do this, you could permanently damage the controller or worse, whatever is on the other end of the USB cable, e.g. your PC.

At any point, you can remove the PCB + microcontroller from the N64 controller and monitor or reprogram the microcontroller. TODO add debugging details.

Components

Microcontroller

An ESP32 microcontroller is used to:

  1. read the raw button presses from the button hardware in the controller

  2. convert that into a USB HID report

  3. send the report via Bluetooth LE to a connected client, e.g. PC

It is also capable of a few other things like: tracking battery level, resetting Bluetooth connections, etc.

PCB

A custom PCB was built to replace the existing controller PCB, mainly to a) make space for the ESP32 dev board I used and b) reduce the amount of soldering required.

Battery Pak

A 3d-printed battery pack that fits into the controller "pak" port was used to supply power to the controller, since it can no longer pull power from the controller cable.

This "pak" fits a small lithium polymer battery as well as charging circuitry, and connects to the controller via typical AAA spring-terminals. The "pak" was designed to fit a 6mm x 40mm x 50mm battery, but could of course fit smaller batteries with adequate padding or adhesives.

Performance

Rough performance numbers for the initial prototype controller are:

  1. battery lifetime - using a ~1500 mAh lithium polymer battery, I expect the controller to last about ~15 hours of continuous use; I'm less sure about low-power mode lifetime, but probably a few weeks (longer if you just detach the battery).

  2. controller latency - over 100 sequential button presses had a latency of between 2 and 13 ms (plus an additional ~2 ms for current software's polling interval - can reduce this using interrupts instead of polling, though chances are analog/jostick inputs will always suffer this extra latency)

    To measure approximate latency, I setup a second ESP32 which was:

    • a BLE client subscribed to the gamepad reports

    • running a GPIO interrupt to detect the button press

    Then, the second ESP32 recorded the time the button-interrupt was received as well as the time the BLE button-press-report was received. Got the approximate latency by subtracting the interrupt time from the BLE report time.

You might also like...
gr-nrf24-sniffer is a tool to receive and decode wireless traffic from nRF24L01(+) modules

gr-nrf24-sniffer What is this? gr-nrf24-sniffer is a tool to receive and decode wireless traffic from nRF24L01(+) modules (or older nRF24xxx) using GN

Firmware, mechanical and electrical design files for the Inline Filament Diameter Estimator, Lowcost (InFiDEL).
Firmware, mechanical and electrical design files for the Inline Filament Diameter Estimator, Lowcost (InFiDEL).

Inline Filament Diameter Estimator, Lowcost (InFiDEL) Originally created by Thomas Sanladerer A cheap, yet precise filament diameter sensor, intended

WT32-ETH01 LAN 8720 RJ45 wired  Wireless-tag
WT32-ETH01 LAN 8720 RJ45 wired Wireless-tag

WT32-ETH01 LAN 8720 RJ45 ESP32 wired Wireless-tag WT32-ETH01 +/-7 Dollar ESP32 with Ethernet jack https://www.google.com/search?q=WT32-ETH01 Buy it fr

A wireless control for an RGB LED based on emotions found in discord messages.

Sample project (See the README.md file in the upper level 'examples' directory for more information about examples.) This is the simplest buildable ex

Wgeo, or "wi-fi geolocator", is a cross-platform C/C++ library for wifi-based device geolocation, utilising public wireless access point location databases

wgeo Wgeo, or "wi-fi geolocator", is a cross-platform C/C++ library for wifi-based device geolocation, utilising public wireless access point location

Building and Executing Position Independent Shellcode from Object Files in Memory

PIC-Privileges Building and Executing Position Independent Shellcode from Object Files in Memory. This is a pingback to the blogpost I wrote at https:

A set of very empty header files that can be used when building apps with Cosmopolitan

cosmo-include A set of very empty header files that can be used when building apps with Cosmopolitan Why? When you build an application with Cosmopoli

Resources and forum for the Chinese community, maintained and moderated by CoinSummer & PL.

Awesome Filecoin 请注意:本文中的链接并非全部是官方链接,部分链接是第三方链接,有些甚至是收费链接,请大家注意区分。 1. Website 1.1 浏览器 FilFox - 6Block 团队开发的 Filecoin 浏览器 Filscan - IPFS原力团队开发的 Filecoi

Current and past resources for the UNSW courses I have tutored.

James' tutoring resources The home for the code/solutions/etc. from my tutorials, as well as any other resources as I see fit. Table of contents Cours

Comments
  • "Lite" revision

    Major update:

    • Use Lolin32 lite ESP32 board instead of Devkit v1 board (cheaper and no external boost converter)
    • Update PCB files
    • Add notes and links for jst headers
    • Update images
    opened by sfraint 0
Releases(v0.4)
  • v0.4(Jan 16, 2022)

    Noteworthy changes in this version include:

    Hardware

    • Using ESP32 Lolin32 lite board (built-in LiPo power conversion, replacing the more common devkit v1-style board)
    • PCB revamp - supporting new ESP32 board plus updated pin usage

    Software

    • Analog stick calibration
    • Framework for "soft" buttons - useful for emulators, when you want to have dedicated menu, pause, save, etc.
    • Framework for battery level measurement

    Documentation

    • Initial build instructions
    Source code(tar.gz)
    Source code(zip)
  • v0.3(Nov 13, 2021)

    This is the first published version of the wireless N64 controller project.

    It uses the common ESP32 devkit v1 style board with a 5V boost converter for power.

    Source code(tar.gz)
    Source code(zip)
Owner
Spencer Fraint
Spencer Fraint
Code for our ECE445/ME470 design: Wireless Charging Table with Automatic Alignment

Qi Wireless Charging Table with Automatic Alignment Code for ECE445/ME470 Senior Design Project SP21 at ZJUI. Team 24: Kaiwen Cao, Tianyi Han, Tingkai

Zikai Liu 2 May 1, 2022
Wireless remote controller for Klipper 3D printers

StacKlipper Wireless remote controller for Klipper 3D printers Description StacKlipper is a remote controller for Klipper (Moonraker installed) 3D pri

null 19 Dec 5, 2022
Documenting and preserving the N64, combining official datasheets and homebrew research together

N64-documentation A repository where I try to document everything about the Nintendo 64 to the best of my ability. All the official and homebrew Ninte

Derek 10 Nov 2, 2022
A web based N64 Emulator

N64 Wasm Thanks for checking out N64 Wasm! An N64 emulator that runs in the browser. It is a port of the excellent RetroArch ParaLLEl Core to WebAssem

Neil Barkhina 482 Dec 24, 2022
C/C++ Application to solve irrigation rotation whatever two-turn rotation or three-turn rotation, longitudinal section design, hydraulic calculations, and design of hydraulic structures like weirs and tail escape.

Irrigation works C/C++ Application to solve irrigation rotation whatever two-turn rotation or three-turn rotation, longitudinal section design, hydrau

Mohamed Jamal Ghayyad 1 Jun 24, 2022
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.

N.A.G.E.K.I. A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control. 中文版

NanaNana 39 Dec 8, 2022
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.

N.A.G.E.K.I. PLEASE CHECK Main Project A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Us

NanaNana 11 Dec 30, 2021
custom esp8266 controller for driving the pwm led controller

room8266 custom esp8266 controller for driving the pwm led controller designed to drive this: https://github.com/austinscreations/PWM-LED-Controller t

null 1 Nov 1, 2021
Bluetooth Joystick : A wireless joystick with ESP-32 microcontroller and Dual Axis Joystick Module using the Bluetooth connectivity.

BluetoothJoystick Bluetooth Joystick : A wireless joystick with ESP-32 microcontroller and Dual Axis Joystick Module using the Bluetooth connectivity.

null 9 Feb 24, 2022
My new zigbee project. Wireless temperature and humidity mini sensor with electronic ink display 2.13 inches, low power consumption, compact size, enclosure with magnets.

My new zigbee project. Wireless temperature and humidity mini sensor with electronic ink display 2.13 inches, low power consumption, compact size, enclosure with magnets. The device use SHTC3 sensors, chip CC2530, battery CR2477.

Andrew Lamchenko 20 Nov 20, 2022