Print Profile(1)

Description
🚀 Smart RGB Acryllamp with Mechanical MX-Switches
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.
📐 Technical Specifications
- Acryl Slot Dimensions: 5mm x 92mm
- Control: ESP32-C3 SuperMini (Wi-Fi + Physical Switches)
- Power: 5V via USB-C
🛠 Bill of Materials (BOM)
- Your Acryl picture (5mm thick - you can get these on Amazon and Etsy)
- Microcontroller: 1x [ESP32-C3 SuperMini]
- LEDs: 1x [WS2812B RGB LED Strip] (10 LEDs total - Density 100 LED per meter))
- Switches: 2x [Mechanical MX Switches] (e.g., Cherry MX, Gateron, etc.)
- Wire: Thin 28-30 AWG wire (silicone wire recommended)
- 3D Printed Parts: Main Housing, Baseplate, Keyplate, ESP Retainer.
- Tools: Soldering iron, side cutters

🏗 Assembly Instructions
- Switch Prep: Press the round keycaps onto the MX switches.
- Keyplate Assembly: Press the MX switches into the Keyplate. Pay attention to the notches for a snap-fit.
- Soldering the ESP: Solder thin wires to the ESP32-C3.
- Attention: Keep your solder joints very far "inside" (towards the center of the board). This is important so the ESP can slide into the guide rail without the solder blobs colliding with the plastic walls.
- Retainer: Slide the ESP retainer onto the Baseplate.
- LED Strip: Solder wires to the LED strip and stick it into the dedicated groove (nut) on the Baseplate.
- Switch Wiring: Solder the remaining wires to the MX switches. Once soldered, seat the Keyplate into the Main Housing.
- Board Mounting: Carefully slide the ESP into its guide rail. Be very cautious with the solder joints and thin wires during this step.
- Cable Management: Neatly route the cables inside the housing. A small piece of tape helps keep them organized and prevent the risk of pinching during assembly at the end.
- Closing the Case: Press the Baseplate onto the Main Housing.
- Tip: Align and snap the single locking tab on the ESP-side first, then press down to snap the two tabs on the opposite side.

🔌 Wiring & Pinout
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.
Connection Table

| 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 |
💻 Software & Configuration (ESPHome)
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
You may create derivative works based on this object, provided that all such derivative works are published exclusively on the MakerWorld platform and include proper attribution to the original creator. You may not share, upload, host, distribute, or publish this object—or any derivative work of this object—on any other digital platform, marketplace, or distribution channel. Commercial use of this object and any derivative works is strictly prohibited. This includes, but is not limited to, selling, renting, sublicensing, or using the object in any context in which you receive monetary compensation or other financial benefits.








Comment & Rating (0)