guide
The Beacon: An on-air light that knows when you are in a meeting — Build Guide
Wire an ESP32 and LED strip to your calendar or mute state. The household knows to stay out without asking.
BUILD-06
The Beacon
Devs At Home is a participant in the Amazon Services LLC Associates Program, an affiliate advertising program. We earn from qualifying purchases. This never affects what we recommend or what we say about it.
An ESP32 microcontroller drives an addressable LED strip that changes colour based on your calendar status or microphone mute state. The household sees whether you are in a meeting before opening the door, and the build takes three evenings if you have soldered before.
You mount the strip inside a diffuser, run power from a phone charger, and connect the board to your network. The light pulls status from a webhook tied to your calendar or conferencing software and updates in near real-time.
Key points
- The ELEGOO 3PCS ESP-32 Dev Boards run the firmware that polls your calendar or mute state and drives the LED strip.
- The BTF-LIGHTING WS2812B ECO RGB LED Strip is an addressable strip where each LED can be controlled independently for colour and brightness.
- A webhook from Google Calendar, Outlook or Zoom sends meeting state to the ESP32 over your local network every ten to thirty seconds.
- The build requires basic soldering to connect the LED strip to the board and wire in a stable power supply from the component kit.
- Mount the strip inside a frosted jar, lampshade or acrylic tube so the light diffuses rather than showing individual LEDs.
- The firmware fits in Arduino IDE or ESPHome depending on whether you prefer C++ or YAML configuration.
What you are building and why it is worth one weekend
You wire an ESP32 microcontroller to an addressable LED strip and programme it to change colour when your calendar shows you busy or your microphone mutes. The light sits outside your office door or on a shelf visible from the hallway. Red means in a meeting. Green means interruptible. Amber means on a call but can be interrupted if it matters.
The alternative is the door opening mid-standup or a partner shouting a question during a client call. A manual switch requires you to remember to flip it, and you will not. This version knows.
Three evenings covers it if you have soldered before. One to wire and test the hardware. One to set up the webhook and flash the firmware. One to mount it in a diffuser and tune the colours.
The parts list: what each item in the kit cart does
| Component | What it does | Quantity needed |
|---|---|---|
| ELEGOO 3PCS ESP-32 Dev Boards | Runs the firmware, connects to Wi-Fi, drives the LED strip | One board |
| BTF-LIGHTING WS2812B ECO RGB LED Strip | The light itself; individually addressable RGB LEDs | 20-30 LEDs, cut to fit your diffuser |
| REXQualis Electronics Component Fun Kit w/Power Supply Module | Breadboard for testing, jumper wires, resistors, and a stable 5V power supply | Power module, wires, one 470Ω resistor |
The ESP32 has Wi-Fi built in, enough GPIO pins to control the strip, and runs on 5V. The WS2812B strip needs 5V as well and draws roughly 60mA per LED at full white, so thirty LEDs need 1.8A. The component kit includes a power module that supplies 5V at up to 3A, which covers the board and the strip with headroom.
The resistor goes between the ESP32 data pin and the strip's data input to protect against voltage spikes. The jumper wires connect power, ground and data. You will solder these connections after testing on the breadboard.
What you supply yourself, honestly
A USB-C cable and a phone charger that outputs at least 2A at 5V. The ESP32 can be programmed over USB, and you can power the whole setup from the same cable during testing. For the final install, the power module from the component kit runs from a barrel jack adapter or you keep using the USB cable if it reaches.
A diffuser that hides the individual LEDs. A frosted glass jar works. So does a lampshade with a white interior, an acrylic tube sold for under-cabinet lighting, or a 3D-printed enclosure if you have access to a printer. The strip mounts inside with double-sided tape. The diffuser needs to fit where the household will see it without blocking a doorway.
Solder and a soldering iron. Flux if the solder does not have it in the core. A breadboard is in the component kit for testing, but the final build needs soldered connections or the strip will flicker when someone walks past.
The build, in numbered phases sized to an evening each
Evening one: wire and test the hardware
Cut the LED strip to length. The strip has cut marks every three LEDs where you can cut without damaging the circuit. Twenty LEDs fit in a standard jar. Thirty LEDs suit a longer tube. More LEDs draw more current but do not make the light noticeably brighter once diffused.
Insert the ESP32 into the breadboard. Connect the strip's 5V wire to the 5V pin on the board, ground to ground, and the data wire to GPIO pin 25 through the 470Ω resistor. The resistor limits current into the data line and prevents damage if the strip sends a spike back.
Plug the USB cable into the ESP32 and power it from your laptop. The board's onboard LED should light. Open Arduino IDE and install the FastLED library from the library manager. Load the example sketch called Blink and modify it to drive the strip. Set the LED count to match your strip length and the data pin to 25.
Upload the sketch. The strip should cycle through colours. If nothing happens, check the wiring and confirm the strip's data direction arrow points away from the ESP32. The strip is directional; data flows one way.
Evening two: set up the webhook and flash the firmware
You need a webhook that sends your meeting state to the ESP32. Google Calendar and Outlook both support webhooks through their APIs, or you can use a service like Zapier or IFTTT to bridge the calendar to a webhook endpoint. The webhook sends a POST request to the ESP32's local IP address with a JSON payload containing your status.
The firmware listens on a simple HTTP server. When it receives a POST, it parses the JSON and changes the LED colour. Red for busy, green for free, amber for tentative or in a call but interruptible. The ESP32 connects to your Wi-Fi network using credentials you hard-code in the sketch or load from a configuration file.
Write or adapt the firmware. The FastLED library handles the LED control. The WiFi library connects to your network. The WebServer library creates the HTTP endpoint. The firmware polls the webhook endpoint every thirty seconds as a fallback if the webhook push fails, or you can rely entirely on pushes if your webhook service is reliable.
Flash the firmware to the ESP32. Open the serial monitor and watch it connect to Wi-Fi. Note the IP address it receives. Test the webhook by sending a POST request from your terminal using curl or from a browser-based API testing tool. The light should change colour.
Evening three: mount it and tune the colours
Solder the connections you tested on the breadboard. Solder the resistor to the data wire, then solder that to GPIO 25. Solder 5V and ground. Use heat-shrink tubing over each joint to prevent shorts. Test again before mounting.
Mount the strip inside your diffuser using the adhesive backing. Coil it if the strip is longer than the diffuser's interior, but keep the LEDs evenly spaced so the light diffuses uniformly. Route the wires out through a hole or gap.
Connect the power supply. If using the power module from the component kit, connect its 5V output to the strip's 5V input and the ESP32's 5V pin. Connect all grounds together. If using a USB cable, plug it into a charger and run it to the ESP32.
Tune the colours in the firmware. Full brightness white is harsh and draws maximum current. Most people prefer 30-50% brightness for red, green and amber. Adjust the RGB values until the colours are distinct through the diffuser when you stand in the hallway.
Where this build actually stalls, and how to get unstuck
The strip does not light. Check the data direction arrow. The strip only works in one direction and the arrow is small. If the strip is backwards, desolder and flip it or cut a new section and start over.
The light flickers or changes colour randomly. The breadboard connections are loose or there is electrical noise on the data line. Solder the connections. Add a 1000µF capacitor across the power supply if the power module is far from the strip.
The webhook does not reach the ESP32. Your router may be blocking local HTTP traffic or the ESP32's IP address changed. Set a static IP in your router's DHCP settings tied to the ESP32's MAC address. Check the router's firewall rules.
The firmware will not compile. The FastLED library version may conflict with the ESP32 board package version in Arduino IDE. Update both to the latest stable versions. If that fails, try the WebServer example from the ESP32 board package first to confirm the toolchain works, then add FastLED.
The colours look wrong through the diffuser. White diffusers shift colours toward blue. Amber diffusers make red and green look muddy. Test the diffuser material with a torch before mounting the strip, or adjust the RGB values in firmware to compensate.
Safety, etiquette and the cleanup that keeps you allowed to do this again
The 5V supply is low voltage but the current is enough to heat a short circuit. Do not leave bare wire ends touching. Use heat-shrink or electrical tape over every solder joint. Mount the power supply and ESP32 inside an enclosure or at least away from anything flammable.
The LED strip draws 60mA per LED at full white. Thirty LEDs at full brightness draw 1.8A. The power supply and wiring need to handle that without heating. If the wires get warm to the touch, use thicker wire or reduce the brightness in firmware.
Do not mount the light where it blinds someone walking past. Red at 50% brightness in a dark hallway is surprisingly bright. If housemates complain, dim it further or angle the diffuser toward the door rather than the hallway.
Turn it off when you finish for the day or the household will assume you are in meetings at midnight. Add a schedule to the firmware that dims the light after working hours or turns it off entirely.
Clean up the workspace. Solder flux leaves residue that attracts dust and can corrode connections over months. Wipe the board with isopropyl alcohol after soldering. Put the spare components back in the kit so you can find them for the next project.
Ways to take it further once the base build works
Add a button to the ESP32 that manually overrides the colour for the next fifteen minutes. Useful when the calendar is wrong or you need to mark yourself busy without scheduling a fake meeting. Wire a momentary switch to a GPIO pin and add a debounce check in firmware.
Integrate with your microphone mute state instead of your calendar. Some conferencing tools expose mute state through their APIs or you can run a script on your machine that posts to the ESP32 whenever mute toggles. This is more accurate than a calendar for calls that run over or start late.
Use multiple colours for different meeting types. Purple for one-on-ones. Blue for standups. Red for client calls. The webhook payload includes the calendar event title so you can parse it in firmware and map keywords to colours.
Drive multiple strips from one ESP32. The board has enough GPIO pins to control three or four strips independently, so you can put one light at the office door and another in the kitchen or at the top of the stairs. Each strip connects to a different GPIO pin.
Add a web interface to the ESP32 so you can change colours or check status from a browser without reflashing firmware. The WebServer library supports serving HTML pages with forms that POST back to the device.
Common questions
Can this run on ESPHome instead of Arduino IDE?
Yes. ESPHome is a YAML-based firmware framework for ESP32 that integrates with Home Assistant. You define the LED strip, the HTTP endpoint and the colour logic in a YAML file, then ESPHome compiles and flashes it for you. The setup is shorter if you are already running Home Assistant, longer if you are not.
Does the ESP32 need to be on the same network as your work laptop?
No. The ESP32 connects to your home Wi-Fi. The webhook comes from your calendar provider's servers over the internet to your home network, then to the ESP32's local IP. Your work laptop can be on a VPN or a separate network. The webhook does not depend on the laptop being reachable.
How much does this add to your electricity bill?
The ESP32 draws roughly 0.5W when idle. The LED strip draws 60mA per LED at full brightness, which is 1.8W for thirty LEDs at full white. At typical usage with 50% brightness and the light red or green rather than white, expect around 1W for the strip. Running 24 hours a day, that is 1.5W total, or roughly 1.1 kWh per month. Electricity cost depends on your rate.
What happens if your Wi-Fi drops or the webhook stops working?
The ESP32 will try to reconnect to Wi-Fi automatically. While disconnected, the light stays at the last colour it received. If the webhook stops sending updates, the firmware's fallback polling will continue to request status every thirty seconds until the webhook resumes. You can add a timeout to the firmware that turns the light amber if no update arrives for five minutes, signalling that the system is stale.
Can you use a different microcontroller instead of an ESP32?
An ESP8266 works and costs less, but it has fewer GPIO pins and less memory. An Arduino Uno does not have Wi-Fi built in so you would need a separate Wi-Fi module. A Raspberry Pi Pico W has Wi-Fi and works, but the toolchain is different and the power draw is higher. The ESP32 is the easiest option for this project.
How do you integrate this with Zoom or Microsoft Teams?
Zoom and Teams do not expose real-time mute state through a public API that a third-party device can poll. You can run a script on your machine that watches for mute key presses or monitors the application's accessibility API, then posts the state to the ESP32. Another option is to trigger the light based on your calendar status rather than your actual mute state, which is less accurate but does not require a script running on your machine.
Does the LED strip need to be weatherproof?
Not unless you are mounting it outdoors or in a bathroom. The WS2812B strip is available in weatherproof and non-weatherproof versions. The non-weatherproof version is easier to solder and cheaper. If you mount it inside a diffuser in a dry room, weatherproofing is unnecessary.
How long does the build take if you have never soldered before?
Add a fourth evening to practice soldering on scrap wire before attempting the live connections. The solder joints on this project are straightforward but you will ruin the strip if you hold the iron on too long or blob solder across adjacent pads. Watch a soldering tutorial and practice until you can make a shiny joint that does not move when you tug the wire.
Who this build suits and who should skip it
Build this if the door opens during standups often enough to be a problem, and if you have soldered before or are willing to learn. The parts cost is low enough that failure is cheap, and the build teaches you enough about ESP32 and webhooks to apply it elsewhere.
Skip it if your calendar is unreliable or you work somewhere with scheduled events that do not match actual meeting time. The light is only as accurate as the data it receives. Skip it if you share the workspace and cannot dedicate a visible spot to the light. Skip it if you do not have a phone charger and USB cable to spare, because buying those separately makes the build less worthwhile.