Easy-to-Build Wireless Quiz Buzzer System With ESP8266-01
by yannickresch in Circuits > Arduino
41 Views, 0 Favorites, 0 Comments
Easy-to-Build Wireless Quiz Buzzer System With ESP8266-01
Commercial quiz buzzer systems are often surprisingly expensive, especially if you need multiple wireless player stations. At the same time, many low-cost trivia game buzzers available online already include large illuminated buttons and built-in sound effects, making them perfect for a DIY solution.
In this project, I will show you how to turn these inexpensive trivia buzzers into a fully wireless quiz buzzer system using ESP8266 modules and ESP-NOW communication. Each buzzer operates independently and communicates directly with the others, so no central receiver or Wi-Fi network is required.
When a player presses their buzzer, all other buzzers are instantly locked out to ensure fair gameplay. The winning buzzer remains illuminated and can reset the game by holding the button for three seconds. New buzzers automatically discover and pair with existing ones when powered on. This makes the system highly scalable, with a theoretically unlimited number of players.
The result is a easy-to-build, reliable, and affordable wireless quiz buzzer system that is ideal for classroom quizzes, family game nights, pub quizzes, or homemade game shows.
This guide is highly detailed and explains each step clearly, so no ambiguities should remain. With good Arduino knowledge and soldering experience, the project can be completed in one afternoon. If you are less experienced or issues occur, it may take a full weekend.
Tip: Start by building the setup with a single buzzer first to ensure everything works correctly before scaling up to multiple units, to avoid repeating the same mistakes across all devices.
Supplies
For a 4-Player System
- 4 × cheap game buzzers from AliExpress or Amazon (about €2–3 per buzzer)
- 4 × ESP8266-01 WiFi modules (about €2 per piece, cheaper in bulk; recommended: buy a 5-pack so you have a spare in case one gets damaged.)
- 4 × DC DC Step Up Boost Converter 0.8-3.3V to 3.3V (e.g. ~€8 for 10 pieces https://www.amazon.de/Converter-0-8-3-3V-LAOMAO-Spannungswandler-Netzteil/dp/B0B92YYMP8)
- 8 × AA batteries
- Jumper wires
Make sure to use buzzers that look identical to the ones shown in this tutorial, as the internal PCB layout may differ between models. The correct model can be identified by two features: it uses two AA batteries (not AAA), and the screws on the bottom are visible. Other models may work too, but this has not been tested. You can find them individually or as a set of 4 or 8 pieces. For example https://de.aliexpress.com/item/1005009294604797.html or https://www.amazon.com/YTZRLO-Buzzers-Jeopardy-Buttons-Classroom/dp/B0FHWBLRK6.
Total cost for four buzzers: 20-30€ (additional shipping costs may apply)
Tools
- USB-to-Serial programmer for flashing the ESP8266 modules (I modified it according to https://makeradvisor.com/esp8266-esp-01-usb-serial-programmer/ which connects GPIO0 and GND via a button to put the ESP8266-01 into serial programming mode. For even easier operation one can add a second button as described here: https://www.instructables.com/ESP-01-Programmer-Hack-the-Easy-One-/ )
- Soldering iron
- Wire cutters
- Cross-head screwdriver
- (Multimeter recommended for troubleshooting, but not necessary)
Flash the ESP8266-01 Modules
Flash buzzer.ino onto each ESP8266-01 module. Here is a good guide on how to do this using a USB programmer: https://makeradvisor.com/esp8266-esp-01-usb-serial-programmer/. The ESP8266-01s module should also work, although I believe entering flash mode is handled slightly differently.
Things to pay attention to:
- In case you use another USB-to-Serial adapter make sure it's set to 3.3V (in case it also supports 5V).
- Pull GPIO0 to ground to make the ESP8266-01 go into programming mode.
- The blue LED on the ESP8266-01 indicates that a flashing operation is in progress and turns off after successful flashing.
If you encounter any issues in the course of this project, a debug version of the script is available as buzzer_debug.ino. Flash it the same way, insert the ESP into your USB programmer, open the Serial Monitor at 115200 baud, and you will see live output whenever a peer is discovered or a buzzer is triggered.
Modify the Buzzer Controller Board
The buzzer units normally light up and produce a sound for a few seconds when the button is pressed. In order to be able to control the LED via the ESP, the original trigger circuit needs a small modification.
- Open the buzzer by removing the four screws on the back.
- Inspect the original wiring to get a basic understanding of how the buzzer circuit works.
- Carefully cut the copper trace on the PCB between the LED and the IC using a utility knife or the tip of a sharp screwdriver. Apply light pressure and go over the same spot several times instead of forcing it at once. Be careful not to slip and accidentally damage nearby components or traces
- Turn on and trigger the buzzer to verify that the connection is fully cut (you should only hear the sound, and the LED should no longer turn on). Alternatively, you can use a multimeter to check that the connection between the LED and the IC is fully disconnected.
Wiring
All connections to the ESP8266-01 module use female jumper wires, while the remaining connections are soldered.
- Remove the batteries before soldering!
ESP8266-01 module connections:
- The RST and TX pins are not required. To allow easy insertion and removal of the ESP module, it is recommended to insert two additional female connectors into these pins and tape all eight connectors together to form a single larger connector, as shown in the figure.
- The ESP module is powered by a step-up boost converter to provide a stable 3.3V supply, even if the battery voltage drops during discharge. The EN (enable) pin must also be set to 3.3V for the board to operate.
- GPIO3 (RX) is used as a digital output to trigger the buzzer sound via Buzz_1. This pin is normally the serial receive line but can also be used as a general-purpose I/O.
- GPIO0 is connected to BTN2 and BTN3, which pull the pin to GND when pressed. If GPIO0 is low during boot, the ESP enters flash mode. So do not press the buzzer while powering on; if it happens, just restart the device.
- GPIO2 is soldered to Buzz_LED to allow separate control of the LED.
The GPIO pin assignment is intentional, as GPIO3 is the only pin that is not HIGH during boot and therefore does not unintentionally trigger the buzzer sound. Swapping GPIO0 and GPIO2 to avoid accidentally entering flash mode provides no benefit, since GPIO2 must also be HIGH during boot, and triggering the buzzer at startup will still cause unwanted behavior.
Further notes:
- PWR_GND (battery negative) is connected to BTN1, BTN4, Buzz_V-, BOOST_GND, and ESP_GND. (For simplicity, BTN4 is soldered directly onto Buzz_V-.)
- PWR_VCC is routed through switch SW1 & SW2 to Buzz_V+. Buzz_V+ is also connected to Buzz_K on the PCB. Through Buzz_K, the step-up boost converter is powered at BOOST_V1. The stable 3.3V outputs at BOOST_V0 which is connected to the 3V3 Pin of the ESP-module (Yes, on the boost converter V1 is the input and VO is the 3.3V output.)
- The speaker SP1 & SP2 remains directly connected to the buzzer controller board at Buzz_SP1 & Buzz_SP2.
Assembly
- The ESP module fits best in the position shown in the image.
- Aligning the cables neatly can be a bit fiddly.
- Note that the screw holes have different spacings, so only one position is possible.
- The transparent plastic piece must be rotated correctly so that its cutout aligns with the protrusion on the other ring.
How the Communication Works
Each buzzer operates independently and communicates directly with the others using ESP-NOW, a lightweight peer-to-peer protocol by Espressif that works without any router or Wi-Fi network.
TL;DR
- Fast blinking: searching for other buzzers — wait until all units are powered on.
- Slow single flash every 2 seconds, synchronized across all paired units: ready to play.
- On button press: sound plays and LED stays on — this unit won the round, all others are locked out.
- LED off (others): another buzzer was pressed first — this unit is locked out.
- Hold the winning buzzer for 3 seconds to reset all units. Once the button has been released for 3 seconds, the winning buzzer resumes blinking in sync with the others.
Pairing
When a buzzer powers on, it immediately sends a HELLO broadcast to all nearby devices. Any already-running buzzer that receives this responds with a HELLO_ACK, and both units register each other as peers. While searching for peers, the LED blinks rapidly. Once the first peer is found, it switches to the slow single flash and the unit is ready.
During Play
When a player presses their button, their buzzer immediately sends a "pressed" message to all registered peers. All other buzzers lock out instantly and turn off their LED, ensuring only the first press counts. The winning buzzer makes a sound and keeps its LED on.
Resetting
The player holding the winning buzzer presses and holds the button for 3 seconds to reset. A "reset" message is sent to all peers, their LEDs resume the slow blinking, and the system is ready for the next round. To prevent an accidental immediate re-trigger, the winning buzzer additionally waits until the button has been released for 3 seconds before accepting a new press.
LED Sync
All paired buzzers blink in sync. To maintain this after the variable-length reset wait, each unit recalculates its blink phase based on how much time has passed since the reset was sent.
Closing Remarks
- The components and script are optimized for low power consumption, which is also why the LED blinking is very short. Deep sleep is not possible, since the buzzers must remain ready at all times. I am not exactly sure how long a battery charge lasts, but it should be more than sufficient for a gaming afternoon, and the batteries can be replaced quickly if needed.
- If more than 10 buzzers are used, #define MAX_PEERS 10 must be increased. However, too many peers may eventually cause memory or stability issues on the ESP8266, but I’m not sure at what point this would actually become a problem.
- I cannot give a precise range specification. In a large room and even through a wall, I have not experienced any issues so far.
- I cannot specify exactly how fast the other buzzers are locked, but it is extremely fast. I have not yet been able to trigger two buzzers at the same time.
- The project could be easily extended with a master unit, for example connected directly to a quiz presentation system. It could register who pressed first or enable different game modes. Feel free to add your own extensions and build on top of it!
Enjoy your quiz night!