wirecraft

Ambient · ESP32 DevKit

Sunset Mood Lamp

A ESP32 DevKit build with 5 components. Reads: Button, Potentiometer, Light sensor. Drives: NeoPixel, LED.

5 parts · 13 connections · 10 steps

Wiring

Mini Map
power
ground
data
signal
analog

Parts

PartRefsQtyEst.
WS2812B NeoPixel ring (8 px)NeoPixel1$3.80
Tactile push buttonButton1$0.10
10 kΩ potentiometerPotentiometer1$0.50
LED (5 mm) + 220 Ω resistorLED1$0.15
Photoresistor (LDR) + 10 kΩ dividerLightSensor1$0.40
Plus: breadboard, jumper wires, USB cable≈ $4.95

Prices are rough hobby-market estimates. Click a part for wiring notes and specs.

Firmware

src/main.cpp
1// Mood Lamp
2// Generated by Wirecraft for the ESP32 DevKit (ESP32-WROOM-32)
3// Prompt: A mood lamp with a NeoPixel ring, a button to cycle colors and a knob for brightness
4//
5// Wiring, parts and step-by-step assembly live alongside this file.
6
7#include <Arduino.h>
8#include <Adafruit_NeoPixel.h>
9
10#define NEOPIXEL_PIN 4
11#define NEOPIXEL_COUNT 8
12#define BUTTON_PIN 5
13#define POTENTIOMETER_PIN 32
14#define LED_PIN 13
15#define LIGHTSENSOR_PIN 33
16
17Adafruit_NeoPixel neoPixel(NEOPIXEL_COUNT, NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800);
18bool buttonPressed = false;
19int potentiometerValue = 0;
20int lightSensorLevel = 0;
21
22void setup() {
23 Serial.begin(115200);
24 neoPixel.begin();
25 neoPixel.setBrightness(60);
26 neoPixel.show();
27 pinMode(BUTTON_PIN, INPUT_PULLUP);
28 pinMode(LED_PIN, OUTPUT);
29 Serial.println(F("Mood Lamp ready."));
30}
31
32void loop() {
33 // --- Read sensors ---
34 buttonPressed = (digitalRead(BUTTON_PIN) == LOW);
35 potentiometerValue = analogRead(POTENTIOMETER_PIN);
36 lightSensorLevel = analogRead(LIGHTSENSOR_PIN);
37
38 delay(50);
39}
40
platformio.ini
1; PlatformIO project for Mood Lamp
2[env:esp32dev]
3platform = espressif32
4board = esp32dev
5framework = arduino
6monitor_speed = 115200
7lib_deps =
8 adafruit/Adafruit NeoPixel@^1.12.0
9

Assembly

  1. 1

    Lay out your workbench

    Gather the ESP32 DevKit, a half-size breadboard, and a bundle of male-to-male jumper wires. Keep the parts list open — every component below gets its own spot on the breadboard. Don't plug in USB power until the last wire is placed.

  2. 2

    Seat the board and power rails

    Run a red jumper from the ESP32 DevKit's 3V3 (or VIN for 5 V parts) pin to the breadboard's + rail, and a black jumper from GND to the − rail. Every component's power and ground will tap these rails.

  3. 3

    Wire the NeoPixel

    Place the WS2812B NeoPixel ring (8 px) on the breadboard. Power first: VCC → + rail, GND → − rail. Then signals: DIN → GPIO4. Tip: Add a 330 Ω resistor on DIN and a 470 µF cap across power for happy pixels.

  4. 4

    Wire the Button

    Place the Tactile push button on the breadboard. Power first: GND → − rail. Then signals: SIG → GPIO5. Tip: Legs on the same side are connected in pairs — wire diagonally opposite corners to be safe.

  5. 5

    Wire the Potentiometer

    Place the 10 kΩ potentiometer on the breadboard. Power first: VCC → + rail, GND → − rail. Then signals: WIPER → GPIO32. Tip: Outer legs to VCC and GND, middle leg (wiper) to the analog pin.

  6. 6

    Wire the LED

    Place the LED (5 mm) + 220 Ω resistor on the breadboard. Power first: CATHODE → − rail. Then signals: ANODE → GPIO13. Tip: The longer leg is the anode (+). The resistor can go on either leg.

  7. 7

    Wire the Light sensor

    Place the Photoresistor (LDR) + 10 kΩ divider on the breadboard. Power first: VCC → + rail, GND → − rail. Then signals: SIG → GPIO33. Tip: LDR to VCC, 10 kΩ to GND, read the midpoint. Brighter light = higher reading.

  8. 8

    Double-check before power

    Trace every wire against the diagram once more — 13 connections in total. The classic mistakes: swapped power and ground, and off-by-one rows on the breadboard. Thirty seconds of checking saves a component.

  9. 9

    Flash the firmware

    Open the exported folder in VS Code with the PlatformIO extension (free), plug in the ESP32 DevKit over USB, and hit Upload. PlatformIO fetches the libraries listed in platformio.ini automatically. Prefer the Arduino IDE? Copy src/main.cpp into a new sketch and install the same libraries from the Library Manager.

  10. 10

    Bring it to life

    Open the Serial Monitor at 115200 baud — you should see "Mood Lamp ready." Then start customizing the loop; the sketch is organized so every component's code is easy to find.