Fully Wireless · Volume 3
The Hardware Routes — The ESP32 Port, the Nordic Boards, and the Pico W
What the ESP32-S3 port's gun and dongle actually do, read from its source; what Nordic nRF52840 and nRF54L15 boards would buy this build and what they would cost in firmware; why the Pico W's radio is not the shortcut it looks like; and the pick
3.1 Three Routes

The link comparison in Volume 2 left two links standing, ESP-NOW and Nordic’s proprietary modes, and one that tempts everyone, Bluetooth straight to the PC. Each comes with its own hardware, and the hardware is where the project’s earlier decisions bite: the Pico (D2), the private OpenFIRE fork (D10), the separate ESP32 track (D30), and the Nordic boards already on the bench (D38).
3.2 Route A: the ESP32-S3 Port as Released
Decision D25 is to try this route; Open-Source Firmware Vol 6, 6.12 introduces the port, the parts to buy (a dongle, an ESP32-S3 gun board) and the flashing and pairing steps, and Reference Electronics Vol 2 proposes buying one ESP32-S3-DevKitC-1 N16R8 for it (P-RE23). Not repeated here. Three things have changed or become clearer since:
- The port has grown a wireless pedal. A Waveshare ESP32-S3-Zero runs pedal firmware and pairs with the gun (not the dongle) during a 10-second window at the gun’s start-up, sending a keep-alive every 69 ms. It works only when the gun plays through the dongle.
- A second ready-made dongle is supported, the “ESP32-S3 Pocket Dongle S3” (GNPE, N16R8 variant in the port’s build list), alongside the LILYGO T-Dongle S3.
- The T-Dongle S3 is still sold out. LILYGO’s page (19 October 2026) lists it at $11.99 in variants with the 0.96 in LCD (K193), without (K194, K194-B) and with an external-antenna socket (K194-01), shipping only from China; its US and German warehouses show it unavailable. The DIY dongle on a Waveshare ESP32-S3-Zero or a DevKitC-1 remains the fallback.

The port’s own reference build, PICON-AS (Volume 1, 1.6), recommends the DevKitC-1 for the gun because it has “the most powerful antenna”; the DevKitC-1 carries Espressif’s ESP32-S3-WROOM-1 module with its PCB antenna, while the Waveshare ESP32-S3-Pico it names as the alternative has “a smaller antenna and less range”. That difference matters again in Volume 6, because only the module has an FCC grant of its own.
3.3 What Reading the Port’s Source Found
The README describes the dongle in a sentence. The source, read on 19 October 2026 (dongle/src/main.cpp, shared_lib/OpenFIRE_Wireless/ESP32/OpenFIRE_Wireless.cpp, shared_lib/TinyUSB_Devices/TinyUSB_Devices.cpp), says rather more:
- The dongle takes on the gun’s USB identity. “The dongle dynamically adopts the identity (VID, PID, and Manufacturer) previously sent by the lightgun, acting as an invisible hardware proxy”: it calls
setID()with the gun’s vendor and product IDs and copies its manufacturer and product strings. Its USB serial number is the gun’s radio MAC address as 12 hex digits, “so that the same COM port is always mapped for each lightgun”. This answers the question left open in Open-Source Firmware Vol 6, 6.12: a dongle paired with a stock gun enumerates as vendor 0xF143, “OpenFIRE”, and MiSTer and the App will find it. It also means decision D24 applies to the dongle exactly as to the gun (Volume 6). - It does not enumerate until a gun has paired.
setup()blocks in the pairing routine, then waits up to 12 s for a wireless pedal, and only then starts USB. A PC sees nothing when the dongle is plugged in alone, and a replugged dongle starts pairing from scratch, which is why the README says to power-cycle the gun after it. - Newest report wins. A radio task (priority 15) stores the latest mouse, keyboard and gamepad report; a USB task (priority 10) on the same core sends whichever is pending, in rotation, each time the HID endpoint frees. A report superseded before it was sent is never sent. That is the right behaviour for position data (Volume 1, 1.4).
- The dongle’s USB poll is 1 ms, the same as a cabled gun (
TinyUSBDevices.begin(1)sets the poll interval). - The PC-to-gun serial path is polled every millisecond, buffered (200 bytes) and flushed to the radio, so a burst of MAMEHooker commands is not lost at the dongle.
- The radio settings of Volume 2, 2.3: fixed 12 Mbps 802.11g, 17 dBm, power saving off, encryption off, channel 1 to 13 chosen by the dongle at plug-in, country set to “IT” on the gun.
- No sleep. No use of the ESP32’s light- or deep-sleep calls was found in the gun firmware; a battery gun stays fully awake until switched off (Volume 5).
None of this is a defect for a bench trial. Items 2, 6 and 7 are things a kit would want different.
3.4 Route B: the Nordic Boards
Nordic Bluetooth LE boards are already on hand from other work (D38); the models are not yet confirmed, and the nRF54L15 family is the likely set. What matters for this build is which chip does what, because the two most likely parts are not interchangeable:
Table 1 — Nordic Bluetooth LE boards are already on hand from other work (D38); the models are not yet confirmed, and the nRF54L15 family is the likely set. What matters for this build is which chip does what, because the two most likely parts are not interchangeable
| nRF54L15 | nRF52840 | |
|---|---|---|
| CPU | 128 MHz Arm Cortex-M33, plus a 128 MHz RISC-V coprocessor | 64 MHz Cortex-M4F |
| Memory | 1.5 MB non-volatile, 256 KB RAM | 1 MB flash, 256 KB RAM |
| Radio | Bluetooth LE (Channel Sounding), 802.15.4, proprietary 2.4 GHz up to 4 Mbps | Bluetooth LE, 802.15.4, ANT, proprietary 2.4 GHz at 1 and 2 Mbps |
| Transmit power | +8 dBm (CSP), +7 dBm (QFN) | +8 dBm |
| Radio current | TX 4.8 mA at 0 dBm, RX 3.4 mA (3 V) | TX 4.8 mA at 0 dBm, RX 4.6 mA (product specification 1.8) |
| USB | None | USB 2.0 full-speed device |
| Supply | 1.7 to 3.6 V | 1.7 to 5.5 V |
| SCI minimum interval | 750 µs (Novel Bits) | 875 µs (Novel Bits; not in Nordic’s SCI sample list) |
Sources: Nordic product pages and the nRF52840 product specification v1.8 feature list (19 October 2026). Nordic’s product briefs give somewhat higher radio currents for the nRF52840 under other conditions; the figures above are the specification’s.
The finding that decides the architecture: the nRF54L15 has no USB. Nordic’s page lists high-speed USB only on the nRF54LM20A and B. So an nRF54L15 can be the gun’s radio, but not the dongle: the PC end needs an nRF52840 (full-speed USB, plenty for HID), an nRF5340, or an nRF54LM20.
The boards a builder meets:
Table 2 — The boards a builder meets
| Board | Chip | Use here | Notes |
|---|---|---|---|
| nRF52840 Dongle (PCA10059) | nRF52840 | The PC-side dongle | USB-powered; “there is no debug support on the Dongle, only support for programming the device and communicating through USB” (Nordic); 15 GPIOs on castellations; Nordic staff on Nordic’s forum have described it as a development tool, compliant but not certified. Price to be read at order time (distributor pages refused automated reading on 19 October 2026) |
| nRF54L15 DK | nRF54L15 | Gun-side development; can emulate the nRF54L10 and L05 | Has an on-board debugger; about $39 at distributors by a search summary, not confirmed on a seller’s page |
| Seeed XIAO nRF54L15 | nRF54L15 | The gun-side radio in a build or kit | $9.99 (Seeed, 19 October 2026, in stock); thumb-sized XIAO format; ceramic antenna plus a switchable external antenna socket; on-board battery charging; its USB-C reaches the nRF54L15 through a small bridge chip (a SAMD11 appears on its debug pins), so it is a programming port, not a HID device; FCC ID Z4T-XIAONRF54L15, single modular, “Device meets SAR Exclusion for Portable use” (Volume 6) |
| nRF54LM20 DK | nRF54LM20 | A future single-chip dongle with SCI and high-speed USB | In Nordic’s nRF Desktop as “mouse, LLPM dongle, or HID SCI dongle” |

3.5 Route B’s Architecture: a Radio Bridge Behind the Pico

The idea is to change as little of the gun as possible. The fork already assembles the three HID reports and parses serial commands; at the bottom of the stack it hands bytes to TinyUSB. Route B adds a second transport underneath:
- In the fork: when VBUS is absent at start-up, send the same report bytes, framed, over a UART to the radio bridge, and read serial commands back from it. The Pico already senses VBUS on GPIO24, the same signal Wireless Power Only Vol 3, 3.3 uses to fix TinyUSB’s forced pull-up; a battery Pico gun needs that fix anyway. The traffic is small: 209 updates a second of at most three reports of roughly 10 to 20 bytes is a few kilobytes a second, under a tenth of a 1 Mbaud UART. One spare UART pair is needed on the carrier; whether the kit-camera board has two free pins was not checked against Reference Electronics Vol 2’s pin budget, and it is the first thing to check.
- On the gun-side Nordic part: take frames from the UART, keep only the newest of each report type, and send it, with a sequence number, by ESB (on demand) or LLPM (at each 1 ms event). Serial bytes from the PC arrive in ESB acknowledgement payloads or LLPM notifications and go out on the UART.
- On the dongle: receive, present a composite USB device (three HID report IDs with OpenFIRE’s descriptors, plus a CDC-ACM serial port), and copy the gun’s identity strings and product ID as the ESP32 port’s dongle does, so that player numbers stay with guns.
Nordic’s SDK supplies the starting points: the ESB transmitter and receiver samples, the LLPM sample (which builds for both the nRF52840 Dongle and the nRF54L15 DK), and nRF Desktop, which already implements a HID dongle with bonding, four LLPM connections and USB HID (Volume 2, 2.6). What none of them has is OpenFIRE’s report descriptors and the serial bridge.
This is not the “stock OpenFIRE plus a second microcontroller for the extras” that Our Firmware Vol 6 rejected (FW-8). That option put features on a co-processor and failed because the features live in the main loop. Here the second processor carries only bytes; every feature stays in the fork.
The alternative, a Nordic-only gun (OpenFIRE ported to run on the nRF54L15 itself, no Pico), would save a chip and some current. It is a port of about 10,000 lines to Zephyr plus new camera drivers, which FW-8 already weighed and rejected for a rewrite, and it would leave the fork. Not proposed.
3.6 What the Nordic Boards Buy, and What They Cost
What they buy the project, against the ESP32 route:
Table 3 — What they buy the project, against the ESP32 route:
| Route A, ESP32-S3 port | Route B, Pico fork + Nordic | |
|---|---|---|
| Firmware the gun runs | The port, pre-release, not the fork (D30) | The fork (D10), plus a small bridge |
| Fixes made in the fork (aiming, calibration, sequencing) | Not present unless ported | Present |
| Pico pin map, carrier, kit camera route | Replaced by an ESP32-S3 board | Kept; one UART added |
| Radio and controller power | ~0.30 to 0.38 W more than a Pico gun (Volume 5) | ~0.01 W more |
| Idle and sleep | Receiver always on; no sleep in the port | Radio can sleep between reports; system-off in microamps |
| Latency the link adds | ~0.8 ms mean (Volume 4) | ~0.8 ms (ESB) or ~1.3 ms (LLPM) mean |
| Channel use | One Wi-Fi channel, 4.6 % per gun | ESB: chosen by the application; LLPM: hopping |
| FCC position for a hand-held kit | Module grant excludes portable use without new approval; bare-chip boards have no grant read | XIAO nRF54L15 grant: single modular, SAR-excluded for portable use |
| Firmware to write before the first shot | None | A fork transport, a bridge and a dongle |
| Cost of boards, as of 19 October 2026 | Dongle $5.49 to $11.99; gun board $8.99 to $9.99 (Open-Source Firmware Vol 6) | XIAO nRF54L15 $9.99; nRF52840 Dongle at order time |
So the Nordic boards are not the faster route to a wireless gun; they are the better-founded route to a wireless kit. Their immediate value is as test equipment: with two Nordic boards and Nordic’s own samples, the link’s latency and loss can be measured on the ADP3450 this week, without writing any light-gun code (Volume 6, test W5). If the numbers are as Volume 4 predicts, route B is worth its firmware; if the ESP32 trial then shows the link is good enough to play on, the project knows which link to build for the kit.
3.7 Route C: the Pico W and Pico 2 W
The RP2040 and RP2350 have no radio. Raspberry Pi’s answer is the Pico W and Pico 2 W, which add an Infineon CYW43439: Wi-Fi 4 on 2.4 GHz and Bluetooth 5.2, Classic and LE, central and peripheral, on an SPI link to the microcontroller “typically” at 33 MHz (Pico 2 W datasheet). Adafruit lists the Pico 2 W at $7.00 (product 6087, out of stock on 19 October 2026). The arduino-pico core offers KeyboardBLE, MouseBLE and JoystickBLE with “the same API as their USB versions”, at a cost of “around 80KB of flash and 20KB of RAM”.
It looks like the shortcut: the same board family, one chip more, no dongle. It is not, for four reasons:
- OpenFIRE ships its Pico W builds with Bluetooth off (
-noBT) because of a known issue in which “TinyUSB/Serial fails to initialize properly” with Bluetooth enabled (Reference Electronics Vol 2). The port’s shared USB library contains a Classic Bluetooth HID path for the Pico W, but it is compiled out. - Bluetooth HID to the PC has no serial path and a host-chosen interval of 7.5 ms or more (Volume 2, 2.4).
- The wireless chip takes over pins the fork uses. On the Pico 2 W, GPIO23 to GPIO25 and GPIO29 run the wireless chip; VBUS sense moves from GPIO24 to the wireless chip’s own WL_GPIO2, and the LED to WL_GPIO0. The fork’s debug event pin, GP25 on a Pico (FW-6), is the wireless chip-select on a W, and the VBUS-sense fix of Wireless Power Only Vol 3 would have to read the sense line through the wireless chip. These are not header pins on either board, so the carrier’s pin map survives; the firmware’s assumptions do not.
- Its FCC grant assumes 20 cm. The Pico 2 W’s grant (FCC ID 2ABCB-PICO2W) is a single-modular grant that requires the antenna “to provide a separation distance of at least 20 cm from all persons” (Volume 6). A gun is held.
The Pico 2 W could still be the gun side of a dongle link (Bluetooth LE to a Nordic dongle), but then it competes with a $9.99 XIAO nRF54L15 that draws less, has a portable grant, and is the platform the dongle’s firmware is written for anyway.
3.8 Why This, and Why Not the Others
Criteria: answers the D25 question soonest; keeps the fork (D10) and the Pico (D2) for the finished gun; adds little power; a legal path for a hand-held kit (D11); firmware effort.
Table 4 — 3.8 Why This, and Why Not the Others
| Option | Verdict | Why | Why not |
|---|---|---|---|
| Route A: ESP32-S3 port + dongle | Run now, as the D25 trial (D30) | Works today with nothing written; answers “is a radio good enough to play on” | Not the fork; pre-release; ~0.35 W more; channels 12 and 13; no portable grant on the module or boards read |
| Route B: Pico fork + XIAO nRF54L15 bridge + nRF52840 dongle | Proposed as the kit route; bench the link first with Nordic samples (WL-2) | Keeps the fork and the pin map; ~0.01 W radio; ESB’s ACK payload carries force feedback; a module with a portable grant; uses the boards on hand | Three pieces of firmware to write; no existing light-gun code |
| Route B with an nRF54LM20 dongle | Later | One chip with SCI and high-speed USB; in nRF Desktop as an SCI dongle | Newer part; nothing gained over an nRF52840 at full speed for HID |
| A Nordic-only gun (OpenFIRE ported to nRF54L15) | Rejected | One chip fewer | A port of the whole firmware; leaves the fork (FW-8) |
| Route C: Pico W / Pico 2 W Bluetooth to the PC | Rejected | No dongle; same board family | Bluetooth disabled in OpenFIRE’s W builds; no serial; host interval; pin assumptions; 20 cm grant condition |
| Pico 2 W as the gun side of a dongle link | Rejected | Same family as the Pico | A XIAO nRF54L15 is cheaper to own in power and certification and matches the dongle’s platform |
Sources
- Alessandro Satanassi, OpenFIRE-Firmware-ESP32:
dongle/src/main.cpp,dongle/README.md,dongle/platformio.ini,pedal/README.md,shared_lib/OpenFIRE_Wireless/ESP32/OpenFIRE_Wireless.cpp,shared_lib/TinyUSB_Devices/TinyUSB_Devices.cpp— https://github.com/alessandro-satanassi/OpenFIRE-Firmware-ESP32 (read 2026-10-19). - LILYGO, T-Dongle S3 — https://lilygo.cc/products/t-dongle-s3 (read 2026-10-19).
- Nordic Semiconductor, nRF54L15, nRF52840 and nRF52840 Dongle product pages; nRF52840 Product Specification v1.8 — https://www.nordicsemi.com/ (read 2026-10-19).
- Seeed Studio, XIAO nRF54L15 product page and wiki — https://www.seeedstudio.com/XIAO-nRF54L15-p-6493.html, https://wiki.seeedstudio.com/xiao_nrf54l15_sense_getting_started/ (read 2026-10-19).
- FCC ID Z4T-XIAONRF54L15 grant summary — https://fccid.io/Z4T-XIAONRF54L15 (read 2026-10-19).
- Raspberry Pi, Raspberry Pi Pico 2 W Datasheet — https://datasheets.raspberrypi.com/picow/pico-2-w-datasheet.pdf (read 2026-10-19).
- Adafruit, Raspberry Pi Pico 2W, product 6087 — https://www.adafruit.com/product/6087 (read 2026-10-19).
- Mohammad Afaneh, Novel Bits, Bluetooth LE Shorter Connection Intervals: A Hands-On Guide with the nRF54L15, 16 December 2025 (read 2026-10-19).
- Nordic Semiconductor DevZone threads 39464 and 41155 on nRF52840 Dongle certification (forum; secondary).
Comments (0)