An open hardware project by pdulab

Project
Rapid Fire.

A complete ESP32-C3 firmware project for adding configurable continuous and burst R2 trigger behavior to a DualSense controller.

Current release v0.4.8 · ESP32-C3 Super Mini

Start here

New to modding?
Follow this order.

01

Two firing modes

Continuous rapid fire and configurable bursts, with separate rates for each mode.

02

Built-in dashboard

Tune settings, calibrate the trigger, and apply OTA updates from your phone or computer.

03

Made to disappear

OFF mode leaves the trigger input high impedance, preserving normal R2 behavior.

What you need

Small board.
Clean install.

01

ESP32-C3 Super Mini

02

1 kΩ series resistor

03

Insulated hookup wire

04

A DualSense controller

Wiring

One signal wire,
one shared ground.

Keep the required 1 kΩ resistor between the R2 signal pad and GPIO0.

DualSense R2 signal  ── 1 kΩ ── GPIO0
DualSense ground    ────────── GND
Controller positive ────────── 5V

Power note: Do not connect the controller battery positive wire and USB 5 V at the same time unless your board’s power path is verified safe. For USB testing, connect only the R2 signal and ground.

USB installer

Flash v0.4.8
right here.

This is the complete factory image. Use a desktop Chrome or Edge browser, a USB data cable, and an ESP32-C3 Super Mini. The installer will ask you to choose the board’s serial port.

Factory image · offset 0x0

Project Rapid Fire v0.4.8

Erases the board and installs the full firmware.

Latest

Not connected. Use Chrome or Edge over HTTPS.

1 Connect the board with USB, then select its COM port.

2 Click Install latest firmware.

3 Confirm the erase prompt and wait for “Done”.

4 Unplug/replug, then join R2-RapidFire.

If no port appears, use a data-capable cable. Hold BOOT while plugging in, release it, and try again. Web Serial requires HTTPS and Chrome or Edge.

Prefer a manual flash? Download the factory .bin and write it at offset 0x0 with esptool.

Using the firmware

What every
control does.

FIRE MODE

OFF

Pass-through mode. GPIO0 stays high impedance and the controller behaves normally.

CONTINUOUS

Repeats trigger pulses while R2 is held. Continuous SPS can be set from 1–40.

BURST

One physical pull starts a fixed burst of 1–10 shots at 1–12 SPS.

TUNING

Pulse width

Output pulse length, 5–200 ms. Start at 25–35 ms.

Press point

Trigger travel threshold, 5–100%. Hysteresis and debounce stabilize the input.

Saved settings

Changes are saved in non-volatile storage and survive reboot.

POWER & UPDATE

Auto-sleep

Default is 5 minutes. Set to 0 to disable. Sleep Now is also available.

Wireless update

Upload only a matching -ota.bin file from the dashboard. Keep power connected until reboot.

Reset

Reset trigger clears the firing state; Restore defaults returns factory settings.

First-time setup

Calibrate once.
Dial it in.

  1. 1

    Connect to the dashboard

    After boot, join Wi-Fi network R2-RapidFire using password 12345678. Open 192.168.4.1 in your browser.

  2. 2

    Calibrate the R2 trigger

    Select OFF. With R2 released, choose Capture released. Hold R2 fully down and choose Capture pressed, then choose Apply calibration.

  3. 3

    Choose a firing mode

    Start with 8–10 SPS and a 25–35 ms pulse width. Use Continuous for sustained firing or Burst for a fixed shot count.

  4. 4

    Update later over Wi-Fi

    Once running v0.4.2 or later, download the OTA image below and upload it through the dashboard—no USB required.

Firmware archive

Downloads for
every update path.

Avoid v0.4.4 and v0.4.6: they have known firing and sleep regressions. The factory image is for USB flashing; the OTA image is only for the dashboard update screen.