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
- 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:
- ESP32‑S3 main board (custom carrier or DevKitC‑based)
- Receiver boards distributing power and signals
- 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
- Improved module-to-module communication protocol
- Magnetic pogo‑pin connectors for easier swapping
- Wireless mode using Bluetooth HID
- Additional module types (triggers, sliders, touchpads)
For the Enterprise Program at Michigan Tech there is a end of semester 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.
