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.
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.
- In Arduino IDE, add the ESP32 boards package and select your exact ESP32 Dev Module.
- Wire LED anode → GPIO (e.g. 2) through 220Ω; cathode → GND.
- Upload the Blink example; watch on‑board and external LEDs if both are set up.
- Open Serial Monitor at 115200 and print “alive” once in
setup().
StretchChange 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.
- Wire button between GPIO and GND; use
INPUT_PULLUP (pressed = LOW).
- When pressed, light the LED; when released, turn it off.
- Print button state to Serial only when it changes (edge detect).
StretchToggle 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.
- Wire common‑cathode RGB to three PWM‑capable GPIOs through resistors.
- Read the pot on an ADC pin; map the value into a hue or brightness.
- Sweep three channels so turning the knob changes color smoothly.
StretchAdd 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.
- Build a divider: 3.3V → photoresistor → ADC → 10k → GND.
- Print raw ADC values while covering/uncovering the sensor; pick a threshold.
- When dark, LED on; when bright, LED off.
StretchUse 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.
- 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.
- Write a function
playNote(freq, ms) and test a C major scale.
- On button hold, play a 4‑note “door chime.”
StretchEncode 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.
- Install a DHT library compatible with ESP32; wire data to a free GPIO.
- Every 2 seconds, print
Temp: xx.x C | Humidity: yy%.
- Add simple alerts: “too hot” / “too dry” when thresholds are crossed.
StretchDrive 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.
- Power the servo from the kit’s 5V rail; share GND with the ESP32.
- Read pot → map 0–4095 to 0–180 →
servo.write(angle).
- Sweep slowly so the horn does not slam into hard stops.
StretchAdd a soft‑start: first 2 seconds always ease from 90° to the pot angle.
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.
- Connect to classroom Wi‑Fi (or SoftAP if school policy blocks STA).
- Create
/ that returns HTML with temperature and humidity.
- Add
/json for machine‑readable values — useful for later dashboards.
StretchAuto‑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.
- 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).
- On match: green LED + unlock servo 90→0; after 3 s, re‑lock. Servo still needs 5V + shared GND.
- On miss: red LED + short buzz; OLED shows “DENIED.”
StretchEnrollment 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.
- Mount (or tape) the ultrasonic on the stepper shaft so it pans left‑right.
- Step through ~180°, pause, measure with a level‑safe Echo divider +
pulseIn, record angle→distance.
- Print CSV to Serial so you can paste into a spreadsheet as a polar map later.
StretchIf 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.
- 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.
- Convert accel axes into approximate pitch and roll.
- Draw a horizon line on OLED; beep if |tilt| exceeds a safe angle.
StretchLog 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.”
- Define states: IDLE · OCCUPIED · ALARM · QUIET HOURS.
- OLED always shows temp/humidity; PIR flips OCCUPIED; ALARM if motion during quiet hours.
- Expose
/ and /status over Wi‑Fi so a phone can check the room without Serial.
StretchWrite 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.