Free · open · kit-first

ESP32 projects you can actually build.

A free directory of hardware builds for Hi Bot Code makers. Default assumption: an ELEGOO ESP32 Super Starter Kit — plus USB cable and Arduino IDE.

Before you solder (or breadboard)

One board. One kit. Open tools.

The ESP32 is a tiny computer with Wi‑Fi and Bluetooth built in. You write code on a laptop, upload it over USB, and the board runs that program forever (until you upload something new). This listing stays free and open — no account, no paywall, remix anything you like.

When a project could go many ways, we pick parts that ship in a typical ELEGOO ESP32 Super Starter Kit: LEDs, buttons, resistors, buzzers, DHT11, OLED, ultrasonic, servo, stepper, PIR, IR remote, RFID, joystick, relay / motor driver, breadboards, and jumper wires.

ToolsArduino IDE 2.x · ESP32 board package · USB‑C cable from the kit
SafetyPower off before rewiring. RC522 and most logic sensors want 3.3V — not 5V. Motors/servos need the kit 5V rail + shared GND.
ESP32 pinsWith Wi‑Fi on, use ADC1 for pots/analog sensors (GPIO 32–39). ADC2 conflicts with Wi‑Fi. Avoid strapping pins (0, 2, 12, 15) for critical inputs if boot is flaky.
MindsetSerial Monitor is your friend. Blink first. Then sensors. Then Wi‑Fi.

Kit note: Exact bag contents vary by kit revision. If something is missing, swap for the closest part (passive buzzer ↔ active buzzer, single‑digit display ↔ OLED) and note the change in your build log. The IMU bag may say GY‑6500 — verify silicon with WHO_AM_I before loading an MPU‑6050‑only library.

Pick a rung

Four levels, fifteen builds

Start where you are. Intro is “get the board talking.” Beginner is wiring + simple code. Intermediate combines sensors and actuators. Advanced leans on Wi‑Fi, RFID, and systems thinking.

Intro

GET THE BOARD ALIVE

Do these once. Skip nothing. Every later project assumes Serial works and you can upload without panic.

Intro 01

Board install & Blink

Prove the pipeline: IDE → USB → ESP32 → LED toggles.

Kit parts

ESP32 board · red LED · 220Ω resistor · breadboard · jumpers · USB‑C cable

Skills

Board manager URL · COM/port select · digitalWrite · delay

  1. In Arduino IDE, add the ESP32 boards package and select your exact ESP32 Dev Module.
  2. Wire LED anode → GPIO (e.g. 2) through 220Ω; cathode → GND.
  3. Upload the Blink example; watch on‑board and external LEDs if both are set up.
  4. Open Serial Monitor at 115200 and print “alive” once in setup().
Stretch

Change the blink rate with a constant at the top of the sketch so classmates can tweak it in one place.

Intro 02

Button → LED

Read an input cleanly and drive an output only when you mean to.

Kit parts

Push button · 10kΩ pull‑down (or use INPUT_PULLUP) · LED · 220Ω

Skills

digitalRead · debounce idea · INPUT_PULLUP

  1. Wire button between GPIO and GND; use INPUT_PULLUP (pressed = LOW).
  2. When pressed, light the LED; when released, turn it off.
  3. Print button state to Serial only when it changes (edge detect).
Stretch

Toggle mode: one press latches LED on, next press offs it — still ignoring bounce.

Beginner

5 PROJECTS · INPUTS & OUTPUTS

Simple loops, one idea per project. Great classroom pace: one build per session.

Beginner 01

RGB mood lamp

Mix red, green, and blue with PWM so the color responds to a pot.

Kit parts

RGB LED · three 220Ω resistors · 10k pot · breadboard

Skills

analogRead · ledc / analogWrite PWM · mapping 0–4095 → 0–255

  1. Wire common‑cathode RGB to three PWM‑capable GPIOs through resistors.
  2. Read the pot on an ADC pin; map the value into a hue or brightness.
  3. Sweep three channels so turning the knob changes color smoothly.
Stretch

Add a button that freezes the current color as a “favorite.”

Beginner 02

Photoresistor night light

Lights turn on when the room gets dark — no clock needed.

Kit parts

Photoresistor · 10kΩ · white/yellow LED · 220Ω

Skills

Voltage divider · threshold · hysteresis (optional)

  1. Build a divider: 3.3V → photoresistor → ADC → 10k → GND.
  2. Print raw ADC values while covering/uncovering the sensor; pick a threshold.
  3. When dark, LED on; when bright, LED off.
Stretch

Use two thresholds so the light does not flicker at the edge of darkness.

Beginner 03

Passive buzzer alarm

Play tones — then a short melody when a button is held.

Kit parts

Passive buzzer · button · (optional) LED

Skills

ledcWriteTone (or Arduino‑ESP32 core v3 tone()) · note arrays · non‑blocking timing basics

  1. Drive the passive buzzer from a PWM pin (not the active one if you want melodies). Prefer ledcWriteTone — classic AVR tone() is unreliable on older ESP32 cores.
  2. Write a function playNote(freq, ms) and test a C major scale.
  3. On button hold, play a 4‑note “door chime.”
Stretch

Encode a secret doorbell pattern: three short presses unlock a victory beep.

Beginner 04

DHT11 climate reporter

Read temperature and humidity and print a clean Serial dashboard.

Kit parts

DHT11 module · jumpers (data · VCC · GND)

Skills

DHT library · delay between reads · Serial formatting

  1. Install a DHT library compatible with ESP32; wire data to a free GPIO.
  2. Every 2 seconds, print Temp: xx.x C | Humidity: yy%.
  3. Add simple alerts: “too hot” / “too dry” when thresholds are crossed.
Stretch

Drive a status LED green/amber/red based on comfort ranges you define.

Beginner 05

Pot → servo pointer

Turn a knob; the servo mirrors the angle like a volume needle.

Kit parts

SG90 servo · 10k pot · separate 5V for servo if your kit PSU allows

Skills

ESP32Servo · map · power awareness

  1. Power the servo from the kit’s 5V rail; share GND with the ESP32.
  2. Read pot → map 0–4095 to 0–180 → servo.write(angle).
  3. Sweep slowly so the horn does not slam into hard stops.
Stretch

Add a soft‑start: first 2 seconds always ease from 90° to the pot angle.

Intermediate

5 PROJECTS · SENSE + ACT

Now sensors decide actuators. Expect longer wire lists and small state machines.

Intermediate 01

Ultrasonic parking assistant

Beep faster as you approach a wall — optional OLED distance readout.

Kit parts

HC‑SR04 ultrasonic · two resistors for Echo divider · passive/active buzzer · 0.96" OLED (I2C) · LED

Skills

pulseIn · voltage divider on Echo · I2C OLED · rate from distance

  1. Power the HC‑SR04 at 5V. Wire Trig to a GPIO. Echo is 5V — do not feed it straight into the ESP32. Use a resistor divider (e.g. 1k + 2k) so Echo at the pin is ≤3.3V.
  2. Trigger a pulse, then measure with pulseIn (prefer this over NewPing on ESP32). Convert to cm; print to Serial and OLED.
  3. Map distance bands to beep intervals: far = slow, near = frantic, <10 cm = solid tone + red LED.
Stretch

Draw a simple bar graph on the OLED instead of only numbers.

Intermediate 02

PIR hallway lamp

Motion turns on a light for N seconds, then fades the LED out with PWM.

Kit parts

HC‑SR501 PIR · LED + 220Ω (PWM pin) or relay‑driven load · buzzer optional

Skills

Polling · millis() timers · ledc PWM fade · false‑trigger filtering

  1. Power the PIR at 5V; read its digital out on a GPIO (output is typically 3.3V‑safe).
  2. On rising edge, start a 15‑second “occupied” window and drive the LED at full brightness (LEDC / analogWrite).
  3. Retrigger extends the window. When the timer expires, fade duty cycle down to 0 over ~1 second — don’t just snap off.
Stretch

Log motion events with timestamps over Serial like a tiny security journal.

Intermediate 03

Joystick pan & tilt (one axis)

Joystick X or Y drives a servo; dead zone keeps it still at center.

Kit parts

Joystick module · SG90 servo · OLED optional for angle

Skills

Dual ADC (prefer ADC1 pins) · dead zone · clamping

  1. Read VRx/VRy; find center values at rest and store them as offsets.
  2. Ignore small deltas inside a dead zone; map remaining range to servo angle.
  3. Hold a button on the joystick base to return to 90° home.
Stretch

Map the unused joystick axis to Serial/OLED as a second “virtual” tilt readout (same single SG90). A true pan‑tilt mount needs a second servo — extra part, not in the default kit bag.

Intermediate 04

IR remote → device modes

Decode kit remote buttons; each button picks a device mode.

Kit parts

IR receiver · remote · RGB LED or buzzer · OLED optional

Skills

IRremote library · hex codes · mode enum / switch

  1. Print every received IR code until you map number keys 0–4.
  2. Mode 0 = off, 1 = red, 2 = green, 3 = blue, 4 = party blink.
  3. Ignore repeats; only act on fresh key presses.
Stretch

Remember the last mode in RTC memory / Preferences so power cycles restore it.

Intermediate 05

Thermistor smart fan

When temperature rises, spin the DC fan via L293D (or transistor).

Kit parts

Thermistor · resistors · DC motor + fan blade · L293D · DHT11 optional for comparison

Skills

Analog sensing · motor driver · fail‑safe “off when cold”

  1. Build the thermistor divider; convert ADC toward an approximate °C (kit formula ok).
  2. Above threshold → motor forward via L293D; below → stop.
  3. Show status on Serial (and OLED if you have it free).
Stretch

Three speeds: off / half PWM / full — driven by temperature bands.

Advanced

5 PROJECTS · SYSTEMS & WI‑FI

Multiple modules, clearer product goals, and the ESP32’s radio. Plan wiring before you power on.

Advanced 01

Wi‑Fi climate web page

Serve a tiny HTML page from the ESP32 showing live DHT11 readings.

Kit parts

DHT11 · ESP32 Wi‑Fi (built‑in) · OLED optional mirror

Skills

WiFi.h · WebServer · mDNS optional · HTML string response

  1. Connect to classroom Wi‑Fi (or SoftAP if school policy blocks STA).
  2. Create / that returns HTML with temperature and humidity.
  3. Add /json for machine‑readable values — useful for later dashboards.
Stretch

Auto‑refresh the page every 5 seconds with a meta refresh or tiny JS fetch.

Advanced 02

RFID door latch (servo)

Only enrolled cards unlock a servo latch; OLED shows status.

Kit parts

RC522 RFID (3.3V only) · kit card/tag if included · SG90 servo · OLED · buzzer · LED

Skills

SPI · 3.3V power · UID compare · access list · timeout re‑lock

  1. Power the RC522 from 3.3V (5V can damage it). Wire SPI; print UIDs until you capture your “key” card (confirm a card/keyfob is in the box — some kits skim this).
  2. On match: green LED + unlock servo 90→0; after 3 s, re‑lock. Servo still needs 5V + shared GND.
  3. On miss: red LED + short buzz; OLED shows “DENIED.”
Stretch

Enrollment mode: hold a boot button to add the next scanned UID to flash (Preferences).

Advanced 03

Stepper + ultrasonic scanner

Sweep a stepper turret, sample distance each angle, plot a crude radar on Serial/OLED.

Kit parts

28BYJ‑48 stepper · ULN2003 driver · ultrasonic · OLED

Skills

Stepper library · coordinated motion · data logging

  1. Mount (or tape) the ultrasonic on the stepper shaft so it pans left‑right.
  2. Step through ~180°, pause, measure with a level‑safe Echo divider + pulseIn, record angle→distance.
  3. Print CSV to Serial so you can paste into a spreadsheet as a polar map later.
Stretch

If any reading < 15 cm, freeze, buzz, and reverse direction.

Advanced 04

IMU tilt dashboard

GY‑6500 (often MPU‑6500 silicon) pitch & roll on the OLED with a virtual horizon.

Kit parts

GY‑6500 module · 0.96" OLED · optional buzzer for tip‑over

Skills

I2C · WHO_AM_I · accel math · complementary filter (light) · graphics

  1. Talk to the IMU over I2C at the default address. Read WHO_AM_I first — many kits ship MPU‑6500 (not MPU‑6050). Pick a 6500‑aware library or raw register reads; Adafruit MPU6050‑only code may fail.
  2. Convert accel axes into approximate pitch and roll.
  3. Draw a horizon line on OLED; beep if |tilt| exceeds a safe angle.
Stretch

Log a 10‑second “maneuver” to Serial as CSV for science lab graphs.

Advanced 05

Room guard kit mashup

Combine PIR + DHT + OLED + buzzer + Wi‑Fi status page into one “classroom monitor.”

Kit parts

PIR · DHT11 · OLED · buzzer · LED · Wi‑Fi · (optional) relay for a desk lamp

Skills

State machine · multi‑sensor poll rates · SoftAP/STA web UI

  1. Define states: IDLE · OCCUPIED · ALARM · QUIET HOURS.
  2. OLED always shows temp/humidity; PIR flips OCCUPIED; ALARM if motion during quiet hours.
  3. Expose / and /status over Wi‑Fi so a phone can check the room without Serial.
Stretch

Write a one‑page lab report: wiring photo, state diagram, and what broke first.

Classroom tip: advanced builds pair well — one student owns sensors, one owns UI/Wi‑Fi, then integrate. Keep a shared wiring diagram on paper before anyone reaches for the breadboard.

Ship one build. Then level up.

Pick a project, finish the stretch goal, and take a photo of your breadboard. Share it in class or on the Showcase when you connect the hardware story to a web project.

Attribution: This directory is free and open for teaching and remixing. ELEGOO is a third‑party kit maker — we are not affiliated; kit contents are a practical default so classrooms stay on one BOM. Prefer local purchase options that fit your school’s purchasing rules.