Using a modular, reconfigurable hardware architecture to create a customizable USB HID game controller.
The Open Source Modular Controller project is a fully modular and customizable gaming input system. Users can freely rearrange joysticks, buttons, and future input modules on a set of interchangeable receiver boards to build a layout that fits their gameplay style, ergonomic needs, or accessibility requirements.
The controller connects over USB and is recognized as a standard Human Interface Device (HID) with no additional drivers required.
The current prototype includes:
- A functional ESP32‑S3‑based main controller
- Hot-swappable joystick and button modules
- Receiver boards that can be placed anywhere in the 3D‑printed shell
- USB HID communication via TinyUSB
The system operates as a recognized USB gamepad on Windows. Some hardware issues were identified and corrected in updated revisions.
The repository is organized as follows:
- Firmware – ESP32‑S3 code handling HID communication and module input processing.
Link: Firmware - Software – PC‑side utilities or test scripts (coming soon).
- Hardware – KiCad project files, schematics, PCBs, and 3D‑printed shell models.
Link: Hardware - Documentation – Assembly instructions, diagrams, semester report, and testing notes.
Link: Documentation
- Modular input modules (buttons, joystick, future sensors)
- Repositionable input layout using multiple receiver boards
- ESP32‑S3 native USB HID support
- Open‑source hardware and firmware
- 3D‑printable ergonomic controller shell
Core system components include:
- Receiver boards distributing power, signals, and micro-controller
- Module boards for inputs (joystick/button)
- 3D‑printed enclosure with heat‑set inserts for secure mounting
USB HID enumeration and report handling are implemented using TinyUSB. Modules communicate through standardized connectors to the controller board.
A full BOM including the ESP32‑S3 boards, connector sets, resistors, capacitors, PCBs, wire, and 3D‑printed components is provided in the documentation.
BOM
- Arduino IDE
- KiCad
- OnShape (frame design)
- GitHub Desktop
- Cura slicer
- 3D printer
- Soldering iron
- Hot air station
- Multimeter
- Tweezers
- Gather materials (refer to BOM).
- Order PCBs (Gerber files included).
- 3D print shell and module housings.
- Clean and prepare boards.
- Solder components (headers, ESP32 module, connectors, buttons/joysticks).
- Upload firmware via Arduino IDE.
- Install modules into the shell.
- Test controller.
- On‑board processing for more advanced input mapping
- PCB adjustment and testing
- Wireless mode using Bluetooth HID
- Additional module types (battery, gyroscope, sliders, touchpads)
For the Enterprise Program at Michigan Tech there is a end of semester and project report for the project to summarize the progress of the project. Link
This project is supported by the Open Source Hardware Enterprise at Michigan Technological University.
