Build a DIY Busy Light with One RGB LED

Build a DIY Busy Light with One RGB LED

A busy light is a state machine you can see from across the room. This one has four moods, a huge word on a small screen, and a single LED that matches the word. It is a DIY busy light you can flash from a browser and cycle with one button.

The board is the Waveshare ESP32-C6-LCD-1.47 (Amazon B0DK5J6LX3): a 172×320 ST7789no touchno IMU. The color LED is a WS2812 on GPIO8BOOT is GPIO9. Backlight stays at 50%. The printable case and firmware are on the RGB busy lamp project.

Name the moods

The sketch does not store “the LED is red.” It stores a state name, and the name picks both the word and the color.

StateScreenLED
FREEfreegreen
FOCUSfocusamber
MEETINGmeetingred
AWAYawaydim blue

short press of BOOT walks to the next state. A hold of about 0.7 seconds flips portrait and landscape. The last state is saved in the board’s preferences (namespace busylamp, key state), so a power cycle does not forget that you were in FOCUS.

That pattern shows up everywhere. A traffic light, a game, and this lamp are the same shape: a short list of moods, and one input that moves you along the list.

One LED, any color

A WS2812 is three tiny LEDs in one package: red, green, and blue. You send it three numbers from 0 to 255. Green alone is FREE. Red alone is MEETING. Amber is red plus some green. Dim blue is a small blue number, not 255, so AWAY does not light the whole desk. The screen uses the same mix so the word and the glow agree.

You do not need Wi-Fi. Leave WIFI_SSID empty and the lamp stays offline. If you do fill in a 2.4 GHz network, a phone can change the mood with POST /state?set=focus (also freemeeting, or away). The published file ships with empty Wi-Fi strings. Put your own password in only on your computer, then flash. Do not publish a real password.

Flash it

Chrome or Edge, a data USB-C cable, and Flash to board on the project page. If the port is missing, hold BOOT, tap RESET, release BOOT.

Arduino IDE: ESP32C6 Dev Module, USB CDC On Boot, serial 115200. Commands match the states: freefocusmeetingaway, plus statushelp, and rotate.

Print the bezel in PLA or PETG at 0.2 mm. The opening is keyed to this exact slab, including the USB-C slot and the BOOT and RESET keepouts. Seat the board, close the shell, and the lamp is done.

Four words, one button, one LED. That is enough to teach states and color mixing without a breadboard.