December 23, 2025

Lag vs. swag: controller edition

Show HN: I wrote a small lib to turn a USB gamepad into a Bluetooth one

Old wired controller goes wireless — fans cheer while the “lag police” show up

TLDR: A tiny ESP32 project turns a wired USB gamepad into a Bluetooth controller, sparking cheers for the clean design and code and a chorus asking about lag. Fans love the open-source fix for old gear, while some admit they bought new controllers and now wish they’d waited.

A tiny ESP32 board just pulled off a party trick: it lets your dusty wired gamepad pretend to be a Bluetooth controller. The project’s creator plugs a USB controller into a pocket-sized board and—boom—your phone, tablet, or PC sees it as wireless. That’s when the crowd split. One faction showed up sirens blazing: “but what’s the latency?” Atmanactive’s two-word challenge became the thread’s rallying cry for the lag police.

Meanwhile, the hype squad rolled in. Fans called it “a clever and practical hack,” and loved that the code separates reading the controller from sending it over Bluetooth Low Energy—plain English: the wiring and the wireless don’t tangle, so it’s easier to support different controllers. Code nerds swooned over how readable it is, even for folks who don’t write C++ anymore. Newcomers asked where to start, hinting this might be a gateway build for people priced out of pricier boards.

Then there’s the confession we all felt: one user bailed on DIY and bought a new controller, now sheepishly circling back to try the open-source adapter they wished existed. Verdict? It’s cable-cutter wish fulfillment with one big cliffhanger—will the lag be a boss fight or a non-issue

Key Points

  • bt-gamepad firmware converts wired USB HID gamepads to Bluetooth LE gamepads using an ESP32-S3 board.
  • Hardware requirements include a Seeed Studio XIAO ESP32S3, a USB-C OTG adapter (or powered USB hub), and optionally a 3.3V UART adapter for debugging.
  • Users flash and develop via USB-C; at runtime, the board acts as a USB Host and pairs as a BLE controller with phones/tablets/PCs.
  • The PlatformIO project provides build, flash, and monitor commands, with default and development environments plus a custom 4MB partition table.
  • Architecture decouples USB HID parsing and BLE report generation through a normalized GamepadState, with a clear code module layout.

Hottest takes

"... and the latency is?" — atmanactive
"This is a clever and practical hack!" — schappim
"I ended up buying a new controller instead" — gkhartman
Made with <3 by @siedrix and @shesho from CDMX. Powered by Forge&Hive.