https://github.com/aprocryphan/arduino-ps-hid
An open-source adapter that converts a standard PlayStation 1/2 controller into a modern Xinput/HID gamepad, using an Arduino Nano ESP32 for low-latency translation
https://github.com/aprocryphan/arduino-ps-hid
Last synced: 11 months ago
JSON representation
An open-source adapter that converts a standard PlayStation 1/2 controller into a modern Xinput/HID gamepad, using an Arduino Nano ESP32 for low-latency translation
- Host: GitHub
- URL: https://github.com/aprocryphan/arduino-ps-hid
- Owner: Aprocryphan
- License: gpl-3.0
- Created: 2025-07-24T13:33:58.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-07-26T14:29:41.000Z (11 months ago)
- Last Synced: 2025-07-29T12:29:56.828Z (11 months ago)
- Language: C++
- Size: 16.6 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Arduino-PS-HID
An open-source adapter that converts a standard PlayStation 1/2 controller into a modern Xinput/HID gamepad, using an Arduino Nano ESP32 for low-latency translation
## Setup
PlayStation controllers use a proprietary, SPI-like digital protocol. This project acts as a bridge to translate this protocol into the modern Xinput standard without needing to buy a commercial adapter.
---
### PS1 - Dualshock 1
A PS1 controller has 9 pins and is very similar to a PS2 controller
```(Picture of head on PS1 controller port with pins labelled)```
```(picture of top down PS1 controller port)```
### PS2 - Dualshock 2
A PS2 controller has 9 pins, and unlike a PS1 controller, the buttons are pressure sensetive and actually produce an analogue output that is then converted to the digital protocol.
```(Picture of head on PS2 controller port with pins labelled)```
```(picture of top down PS2 controller port)```
### Method 1 - Sacrificial Extender
Buy a cheap PS1/2 controller extender, the only function of this, is that it provides the signals we need in wire form without being so juvinile. Cut the extender and strip the wires to expose the conductive core, solder the ends and place into a breaboard.
### Method 2 - Dupont Wires
Using female Dupont wires, you can carefully connect them directly to the pins of the controller's plug. Then, place the male end of the wires into a breadboard using the pin configuration set up in `Config.h`.
> [!WARNING]
> WARNING: DO NOT FORCE THESE WIRES ONTO YOUR CONTROLLER PORT, YOU MIGHT SNAP THE PINS
> [!WARNING]
> WARNING: MAKE SURE THAT YOUR MICROCONTROLLER SUPPORTS 5V CIRCUIT LOGIC
> [!NOTE]
> The GPIO pins on the Arduino can be changed in the `Config.h` file.
## Thank yous
Libraries:
1. [Arduino PS2X By Bill Porter](https://github.com/madsci1016/Arduino-PS2X)
2. [Arduino Xinput](https://github.com/dmadison/ArduinoXInput)