I wanted a communication method with a decent range (~15m) so that the buzzers could talk to the PC from across the room. After some research into BLE, I realized the chips with the required range and ability to connect to multiple devices were too expensive (and fiddly to flash).
I decided on using WiFi with an ESP8266 for a few reasons:
1. It met the range requirements
2. I could repurpose the NodeMCUs for other projects
3. They're easy to program using the Arduino IDE
I had initially discarded RF since I was only aware of 433MHz chips without channel hopping. If 2 buzzers sent a message at the same time, the receiver could receive garbled data. Of course, I discovered the mutlichannel-supporting NRF24L01 only after the NodeMCUs had arrived.
My Windows desktop application already accepted mouse click input from multiple devices, so my initial thoughts were emulating a mouse HID device. Cursory googling indicated that it would be difficult to program from scratch, or to port libraries for. I ended up sending tiny messages over a websocket (to reduce latency compared to HTTP). A short button press indicates a 'buzz' and a long press >2s indicates team registration. There are more details on laptop-buzzer communication in the Buzzer code project log.
The major problem is the power consumption that the chip takes. At the moment, I'm planning to power it with 4 AA batteries (it runs at 3.3V, and the onboard regulator has a 1.5V dropoff, so I need 3.3 V exactly or a minimum 4.8V). This seems excessive for a simple buzzer. If the batteries turn out to have too low a capacity, the NodeMCU's micro usb port is exposed as an alternate power source. If you have ideas about how to reduce power consumption while preserving low latency communication to the laptop, please leave a comment.
If I were to do the project again, I'd use a low power Arduino and the NRF24L01+. For WiFi-enabled projects, I would buy the Wemos D1 Mini for its smaller size.
I 3D printed a simple box enclosure (.stl files below) and button cap to forego the 2-week wait on ordering large arcade buttons from AliExpress. There is a status LED at the top and a switch to turn the whole circuit off when not in use. I haven't been able to get my hands on a multimeter yet to measure power consumption, so this hopefully lets the system run for several 15-minute buzzer rounds.
Check out the build process under Instructions.