April 15, 2026
Description
Make your boring Acryl picture lamp smart and colorful with this printed ESP base! This project is designed for Home Assistant via ESPHome, giving you full smart home control and automation possibilities.
Standalone & Offline Capable: Even though this is a Smart Home project, the lamp is fully functional offline. Once the initial setup with ESPHome is complete, you can use the physical mechanical switches to toggle power and cycle through colors without needing a Wi-Fi connection or Home Assistant server afterwards.
Follow the diagram and table below to ensure everything is connected correctly.
Attention: Since the SuperMini only has one easily accessible GND pin, pre-twist the ground wires from the LED strip and both switches together before soldering them to the GND pad.
| Component | ESP32-C3 Pin | Connection Type |
|---|---|---|
| LED Strip VCC | 5V / VBUS | Power Supply |
| LED Strip GND | GND | Common Ground |
| LED Strip Data | GPIO 8 | Data Signal |
| Switch 1 (Power) - Pin A | GPIO 2 | Digital Input |
| Switch 1 (Power) - Pin B | GND | Common Ground |
| Switch 2 (Color) - Pin A | GPIO 3 | Digital Input |
| Switch 2 (Color) - Pin B | GND | Common Ground |
Use the code below in your ESPHome dashboard. Adjust the WIFI and encryption key according to your setup.
esphome:
name: acryllamp
friendly_name: AcrylLampesp32:
board: esp32-c3-devkitm-1
framework:
type: arduino# Speicher für den aktuellen Farb-Index (0 bis 9)
globals:
- id: color_index
type: int
restore_value: no
initial_value: '0'# Logger für Fehlerdiagnose
logger:# Home Assistant Anbindung
api:
encryption:
key: "yourencryptionkey"ota:
- platform: esphome
password: "yourotapassword"wifi:
ssid: !secret wifi_ssid
password: !secret wifi_passwordap:
ssid: "Acryllamp Fallback Hotspot"
password: "yourpassword"captive_portal:
# LED Konfiguration
light:
- platform: neopixelbus
type: GRB
variant: WS2812
pin: GPIO8
num_leds: 10
name: "Acryl Lamp LEDs"
id: led_strip
effects:
- addressable_rainbow:
name: "Regenbogen"
- flicker:
name: "Flackern"# Taster Konfiguration
binary_sensor:
# Taster 1 an GPIO 2: AN / AUS
- platform: gpio
pin:
number: GPIO2
mode: INPUT_PULLUP
inverted: true
name: "Power Button"
on_press:
then:
- light.toggle: led_strip# Taster 2 an GPIO 3: FARBWECHSEL (10 Farben)
- platform: gpio
pin:
number: GPIO3
mode: INPUT_PULLUP
inverted: true
name: "Color Cycle Button"
on_press:
then:
- lambda: |-
// Zähler erhöhen und bei 10 zurücksetzen
id(color_index) += 1;
if (id(color_index) >= 10) {
id(color_index) = 0;
}
- light.control:
id: led_strip
state: ON
# Magenta ist bei Index 3 dabei {1.0, 0.0, 1.0}
red: !lambda |-
float c[10][3] = {
{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {1.0, 0.0, 1.0},
{1.0, 1.0, 0.0}, {0.0, 1.0, 1.0}, {1.0, 0.5, 0.0}, {0.5, 0.0, 1.0},
{1.0, 0.8, 0.6}, {1.0, 1.0, 1.0}
};
return c[id(color_index)][0];
green: !lambda |-
float c[10][3] = {
{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {1.0, 0.0, 1.0},
{1.0, 1.0, 0.0}, {0.0, 1.0, 1.0}, {1.0, 0.5, 0.0}, {0.5, 0.0, 1.0},
{1.0, 0.8, 0.6}, {1.0, 1.0, 1.0}
};
return c[id(color_index)][1];
blue: !lambda |-
float c[10][3] = {
{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}, {1.0, 0.0, 1.0},
{1.0, 1.0, 0.0}, {0.0, 1.0, 1.0}, {1.0, 0.5, 0.0}, {0.5, 0.0, 1.0},
{1.0, 0.8, 0.6}, {1.0, 1.0, 1.0}
};
return c[id(color_index)][2];
License:
MakerWorld Exclusive License