A compact and reliable wireless buzzer system built using ESP32-C3, tailored for competitive quiz settings. Designed for simplicity, affordability, and fast response tracking with up to 5 players, this system highlights who buzzed in first — all displayed through a GUI.
Created for better accommodating interactive icebreaker sessions and quiz games for missionary trips in Chiang Rai, Thailand.
Supported by the Charis Evangelical Free Church.
| Category | Tools Used |
|---|---|
| Hardware | Seeed Studio Xiao Beetle ESP32-C3, 100mm Arcade Buttons, WS2812B 5V LED, Lithium-Ion Battery 3400mAH, 3D Print |
| Firmware | C++ with ESP-NOW |
| Communication | Peer-to-Peer communication through ESP-NOW Wi-Fi stack |
| Diplay App | Simple desktop GUI (e.g. Python + dearpygui + zmq) |
| Tools | PlatformIO, Fusion360 (for CAD) Git |
The system consists of five wireless buzzers (based on Seeed Studio Xiao Beetle ESP32-C3) and one master controller, communicating over Wi-Fi. A desktop GUI handles visual display and control through USB serial connection to the master controller.
- Buttons are turned on manually and wait for acknowledgment (ACK) from the controller.
- Once acknowledged, the buzzer lights up and blinks, and registration is reflected on the GUI.
- PC GUI shows button connection statuses and can trigger the switch to GAME MODE once any number of buttons are registered.
- When ready, the host presses RESET on the GUI to prepare for a new round.
- Players press their buzzer as fast as they can.
- The controller determines the first valid press and sends the result to the GUI.
- GUI plays an animation (MP4) corresponding to the winning button.
Option 1 (Current)
- All devices use Wi-Fi STA mode
- Pros: Lower power consumption
- Cons: Button MAC addresses are hardcoded in the controller
Option 2 (Planned/Flexible)
- Buttons act as Wi-Fi AP, controller scans
- Pros: No need to hardcode MACs
- Cons: Slightly higher power usage
- Powered by lithium-ion battery
- On boot, attempts connection and waits for ACK
- Upon successful press and ACK:
- LED blinks to confirm registration
- Master notifies PC app of readiness
- ESP-NOW handles basic collision handling using a back-off strategy if multiple buttons press at the same time
- Communicates with the GUI via USB serial (pySerial)
- Responsibilities:
- Tracks registered buttons during setup
- Sends winner data during gameplay
- Receives commands (e.g. RESET, START GAME)
- Shows each button's status (connected, pressed)
- Displays winner information
- Triggers MP4 animation per button ID from a configurable file path
- Sends RESET commands to controller and updates all button LEDs accordingly
wireless_buzzer_system/
├── code/
│ ├── buzzer_button/ # Slave ESP32 firmware (C++ + ESPHome)
│ ├── buzzer_controller/ # Master ESP32 firmware (C++ + ESPHome)
│ ├── buzzer_gui/ # PC GUI display logic
│ └── Instruction.txt # Instructions for how to set up the system
├── pcb/ # Electronic schematic and PCB design files
├── case/ # 3D printable STL files
├── assets/ # Images
└── README.md- Built in ~1 month as a two-person team:
- Hardware + firmware: primary focus (me)
- Enclosure design + assembly: partner
- Fairness tuning not implemented due to time constraint (players are within similar distances)
- System tuned for simplicity and practical use over perfection
