A simplified WiFi-controlled RGB LED busy sign built with ESP32. Perfect for indicating your availability status in offices, streaming setups, or home workspaces.
- Simple HTTP Control: Send color commands via HTTP GET requests
- Hardcoded WiFi: No setup required - just edit credentials in code
- Local HTML Interface: Beautiful web-based color picker that runs locally
- Digital RGB LED: On/off control for red, green, and blue channels
- Hex Color Support: Direct hex color input (e.g., #FF0000 for red)
- Live Preview: See colors in your browser before sending to device
- Auto-Reconnection: Automatically reconnects to WiFi if connection is lost
- ESP32-WROVER-E development board
- 1x RGB LED strip with common anode configuration
- Jumper wires
- Breadboard (optional)
- 5V power supply (for high-power LEDs, optional)
-
Edit WiFi Credentials: Open
rgb_busy_sign/rgb_busy_sign.inoand update:const char* ssid = "YOUR_WIFI_SSID"; const char* password = "YOUR_WIFI_PASSWORD";
-
Hardware: Follow the WIRING_GUIDE.md for detailed connection instructions
-
Upload Code: Upload
rgb_busy_sign/rgb_busy_sign.inoto your ESP32 using Arduino IDE -
Get IP Address: Open Serial Monitor (115200 baud) to see the device's IP address
-
Open Control Interface: Open
index.htmlin your web browser -
Enter IP Address: In the HTML interface, enter your ESP32's IP address
-
Control Colors: Use the digital color buttons to control your sign!
The ESP32 listens for simple HTTP GET requests:
http://ESP32_IP_ADDRESS/?color=#RRGGBB
Examples:
- Red:
http://192.168.1.100/?color=#FF0000 - Green:
http://192.168.1.100/?color=#00FF00 - Blue:
http://192.168.1.100/?color=#0000FF - Yellow:
http://192.168.1.100/?color=#FFFF00 - Off:
http://192.168.1.100/?color=#000000
Note: This implementation uses digital control - each color channel is either fully ON (255) or OFF (0).
The included index.html file provides:
- IP Address Input: Enter your ESP32's IP address (saved automatically)
- Individual Channel Controls: Toggle red, green, blue channels independently
- Digital Color Combinations: One-click access to 8 common color combinations
- Live Visual Feedback: See your color selection highlighted
- HTTPS Warning: Alerts when mixed content issues may occur
You can also control the sign from command line:
# Set to red
curl "http://192.168.1.100/?color=#FF0000"
# Set to green
curl "http://192.168.1.100/?color=#00FF00"
# Turn off
curl "http://192.168.1.100/?color=#000000"This implementation supports 8 digital color combinations:
| Color | Hex Code | RGB State | Typical Use |
|---|---|---|---|
| Red | #FF0000 | R:ON G:OFF B:OFF | Busy/Do Not Disturb |
| Green | #00FF00 | R:OFF G:ON B:OFF | Available/Free |
| Blue | #0000FF | R:OFF G:OFF B:ON | In Meeting |
| Yellow | #FFFF00 | R:ON G:ON B:OFF | Away/Break |
| Magenta | #FF00FF | R:ON G:OFF B:ON | Recording/Streaming |
| Cyan | #00FFFF | R:OFF G:ON B:ON | Available for Chat |
| White | #FFFFFF | R:ON G:ON B:ON | General Lighting |
| Off | #000000 | R:OFF G:OFF B:OFF | Sign Disabled |
ESP32 Pin → LED Strip Connection
GPIO32 → LED Red (-)
GPIO33 → LED Green (-)
GPIO14 → LED Blue (-)
3.3V → LED Strip (+)
See WIRING_GUIDE.md for complete wiring diagrams and power considerations.
Set LED color using hex color code.
- Parameter:
color- 6-digit hex color code (with or without #) - Response: Plain text confirmation with digital RGB states
- Example:
/?color=#FF0000sets LEDs to red (digital ON)
Returns current LED status in JSON format.
- Response:
{"red":true,"green":false,"blue":false,"ip":"192.168.1.100"}
Without parameters, shows a simple help page with usage examples.
- Microcontroller: ESP32-WROVER-E
- Control Method: Digital GPIO (ON/OFF only)
- RGB Channels: 3 (Red: GPIO32, Green: GPIO33, Blue: GPIO14)
- WiFi Mode: Station (STA) - connects to existing network
- Protocol: HTTP GET requests
- Power: 3.3V from ESP32 (low power) or external 5V supply
Edit these definitions in the Arduino code:
#define RED_PIN 32 // Change GPIO numbers as needed
#define GREEN_PIN 33
#define BLUE_PIN 14If using common cathode LEDs, change the logic in updateLEDs():
// Change from:
digitalWrite(RED_PIN, currentColor.red ? LOW : HIGH);
// To:
digitalWrite(RED_PIN, currentColor.red ? HIGH : LOW);Update your network credentials in the code:
const char* ssid = "YourNetworkName";
const char* password = "YourPassword";LEDs not lighting up:
- Check power connections
- Verify GPIO pin wiring
- Ensure LEDs are common anode type
- Try setting to white first:
?color=#FFFFFF
WiFi connection issues:
- Check network name and password in code
- Ensure network is 2.4GHz (ESP32 doesn't support 5GHz)
- Check serial monitor for connection status
Can't control from HTML interface:
- Verify ESP32 IP address in serial monitor
- Enter correct IP in the HTML interface
- Ensure device and computer are on same network
- Check for HTTPS mixed content warnings
Colors appear inverted:
- Code assumes common anode LEDs
- For common cathode, modify GPIO logic in code
HTTP requests not working:
- Test with curl or browser first:
http://IP_ADDRESS/?color=#FF0000 - Check firewall settings
- Verify ESP32 is responding (check serial monitor)
rgb_busy_sign/rgb_busy_sign.ino- ESP32 Arduino codeindex.html- Local web interface for controlling colorsWIRING_GUIDE.md- Hardware connection instructionsREADME.md- This documentation
This project is open source. Feel free to modify and distribute according to your needs.
Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests.