SGP Official store ↗
Blog / Projects / ESP32

ESP32 projects for beginners: 10 builds that teach you something

An ESP32 is a tiny computer with Wi-Fi and Bluetooth built in. The best way to learn it is one small, finished project at a time. Here are ten, in order of difficulty, and each one leaves you with a real skill you will use again.

Published 19 Oct 2026Read 12 minLevel BeginnerTopic ESP32
ESP32-S3 dual-core MCU Wi-Fi 2.4G Bluetooth LE GPIO pins ADC inputs USB-C I2C/SPI/UART PERIPHERALS AROUND ONE CHIP
FIG 1 — One ESP32 chip gives you Wi-Fi, Bluetooth LE, dozens of GPIO pins, analog inputs and USB in a single part. Every project below uses one of these blocks.

You learn embedded electronics by finishing things, not by reading datasheets. Each project here is small enough to complete in an evening and teaches exactly one new idea: a radio, a sensor, a display, low-power sleep or over-the-air updates. Do them in order and by the end you can build most hobby gadgets from scratch.

01What you need before you start

Very little. An ESP32 board, a USB-C cable and the free Arduino IDE with the Arduino-ESP32 core installed (board manager URL from Espressif). The examples here use core version 3.x, the current generation. A few projects add a cheap sensor or display; the rest run on a bare board.

A note on pinsPin numbers differ between boards. When a sketch says LED = 2, check your board's pinout and change it to match. Some ESP32-S3 boards use an addressable RGB LED instead of a plain one.

02The 10 projects at a glance

Here is the whole path. Difficulty is relative to the one before it, not an absolute scale.

#ProjectWhat you learnDifficulty
1Blink / RGB fadeToolchain, GPIO, timingEasy
2Wi-Fi web server for an LEDJoin Wi-Fi, serve a page, handle a clickEasy
3DHT22 temperature dashboardRead a digital sensor, auto-refresh a pageEasy
4BLE beacon scannerBluetooth LE advertising, RSSIMedium
5Deep-sleep battery sensorLow power, wake timers, battery lifeMedium
6OLED clock over NTPI2C display, network time, time zonesMedium
7Web-controlled servoPWM, driving a motor from a browserMedium
8Sound-level meterAnalog or I2S audio, simple DSPMedium
9Captive-portal config pageAccess point, DNS trick, saving settingsHarder
10OTA firmware updateFlashing over Wi-Fi, versioningHarder

03Projects 1–2: lights and a web page

1. Blink or RGB fade. The classic first step. Toggle the onboard LED once a second, then fade an RGB LED through colors. You learn the build-and-flash cycle, how a GPIO pin drives a load, and how delay() and millis() handle timing. On an ESP32-S3 with an addressable LED, the Adafruit_NeoPixel library drives it in a few lines. Parts: board only.

2. Wi-Fi web server to control an LED. This is the project that makes the ESP32 click for most people. The board joins your Wi-Fi, serves a tiny web page, and a link on that page turns the LED on and off. Now your gadget has a user interface that any phone on the network can open, with no app to install. Parts: board only.

wifi_led.ino · Arduino-ESP32 3.x
#include <WiFi.h>
#include <WebServer.h>

const char* SSID = "your-wifi";
const char* PASS = "your-password";
const int   LED  = 2;            // change to your board's LED pin

WebServer server(80);

void sendPage() {
  bool on = digitalRead(LED);
  String html = "<h1>ESP32 LED</h1><p>LED is ";
  html += on ? "ON" : "OFF";
  html += "</p><a href='/toggle'>Toggle</a>";
  server.send(200, "text/html", html);
}

void setup() {
  Serial.begin(115200);
  pinMode(LED, OUTPUT);
  WiFi.begin(SSID, PASS);
  while (WiFi.status() != WL_CONNECTED) delay(300);
  Serial.println(WiFi.localIP());   // open this address in a browser

  server.on("/", sendPage);
  server.on("/toggle", []() {
    digitalWrite(LED, !digitalRead(LED));
    server.sendHeader("Location", "/");
    server.send(303);            // redirect back to the page
  });
  server.begin();
}

void loop() {
  server.handleClient();
}

Flash it, open the Serial Monitor at 115200 baud, note the IP address it prints, and type that address into a browser on the same network. Every time you learn a new sensor later, you can show its value on a page like this one.

04Projects 3, 4 & 8: read the world

3. DHT22 temperature and humidity dashboard. Wire a DHT22 to one GPIO and 3.3 V, read it with the DHT library, and show temperature and humidity on a web page that refreshes itself every few seconds. You learn how a one-wire digital sensor works and how to turn live data into a simple dashboard. Parts: DHT22, one pull-up resistor. Difficulty: easy.

4. BLE beacon scanner. Switch from Wi-Fi to the other radio. The ESP32 listens for Bluetooth Low Energy advertisements from nearby phones, fitness bands and beacons, and prints each device's address and signal strength (RSSI). You learn how BLE advertising works and how RSSI drops with distance — the same idea behind phone "nearby device" features. Keep it defensive: scan only your own devices, and never try to connect to or interfere with hardware that is not yours. Parts: board only. Difficulty: medium.

8. Sound-level meter. Feed a microphone into the ESP32, either an analog electret module on an ADC pin or a digital I2S mic, sample it fast, and compute a rolling loudness level that you show as a bar. You learn basic sampling and that a "sound level" is a short-term average, not a single reading. It is a gentle on-ramp to real signal processing. Parts: electret or I2S microphone. Difficulty: medium.

Reading analog pinsThe ESP32 ADC is usable but not laboratory-grade: it is non-linear near the rails and needs calibration for precise voltages. For a relative "louder/quieter" meter that does not matter. For accurate measurements, use a sensor with a digital interface instead.

05Projects 6 & 7: a display and some motion

6. OLED clock synced over NTP. Connect a small SSD1306 OLED over I2C (two wires plus power), join Wi-Fi, ask a public NTP server for the time, set the ESP32's clock and draw the time on the screen. You learn I2C, network time and why time zones and daylight saving need a little care. The result is a genuinely useful desk clock that never drifts. Parts: SSD1306 OLED. Difficulty: medium.

7. Web-controlled servo. Combine the web server from project 2 with a hobby servo. A slider on the page sets the angle; the ESP32 generates the PWM signal that moves the horn. You learn pulse-width modulation and the habit of powering a motor from its own supply rather than the board's 3.3 V rail. Parts: SG90 servo, separate 5 V supply. Difficulty: medium.

PowerNever run a servo or a string of LEDs from the ESP32's 3.3 V pin. Motors pull current spikes that brown out the chip and cause random resets. Give them their own supply and join the grounds.

06Projects 5, 9 & 10: deploy like a product

The last three turn a desk experiment into something you can actually install and leave running.

5. Deep-sleep battery sensor. A sensor that reports once a minute does not need to stay awake. Read the value, send it, then call esp_deep_sleep with a wake timer. The board wakes, works for a second and sleeps again. A bare ESP32 module drops to tens of microamps asleep, so the battery lasts far longer. You learn the single most important idea in battery electronics: do the work, then sleep. Parts: any sensor, a battery. Difficulty: medium.

9. Captive-portal config page. Hard-coding your Wi-Fi password into every sketch is painful. Instead, make the ESP32 start its own access point and a small web page where you type the network name and password, which it saves to flash. A DNS redirect pops that page up automatically when you join, the way hotel and airport Wi-Fi logins appear. You learn access-point mode, non-volatile storage and a realistic setup flow. Parts: board only. Difficulty: harder.

10. OTA firmware update. Walking a USB cable to a board hidden behind a wall gets old fast. With the ArduinoOTA library the ESP32 accepts new firmware over Wi-Fi, so it shows up as a network target in the IDE. You learn how over-the-air updates work and why version numbers and a safe fallback matter once a device is out of reach. Parts: board only. Difficulty: harder.

07Which board should you buy?

Any ESP32 or ESP32-S3 dev board runs all ten projects. For a first board, two things genuinely help: native USB (so you do not fight driver issues) and an onboard LED and button (so projects 1, 2 and 9 need no wiring at all). ESP32-S3 boards add more memory and USB features, which make the OTA and captive-portal builds smoother.

If you would rather not breadboard anything, a finished pocket board gets you to the Wi-Fi, BLE, deep-sleep, captive-portal and OTA projects with zero wiring.

08FAQ

Do I need to know C++ to start with the ESP32?

No. The Arduino-ESP32 core lets you start with short sketches and copy-paste examples. You pick up the C++ you need as you go, and you can also use MicroPython if you prefer Python.

What is the difference between an ESP32 and an Arduino Uno?

The ESP32 is far faster, has much more memory, and includes Wi-Fi and Bluetooth built in. An Arduino Uno has none of those radios. For any project that talks to a phone, a browser or the internet, the ESP32 is the better starting point.

How much power does an ESP32 use on a battery?

With Wi-Fi active it can draw well over 100 mA in bursts, which drains a small battery in hours. In deep sleep a bare module drops to tens of microamps, so a sensor that wakes briefly every few minutes can run for months on the right battery.

Can I run these projects without a breadboard?

Yes. Any of the lights, Wi-Fi, BLE, deep-sleep, captive-portal and OTA projects need no wiring at all on a board that already has an LED and USB-C, such as the SGP Card Mini. You only need to wire parts for the sensor, display and servo builds.

SGP Lab — written by the team that designs and builds SGP hardware in Europe. We test every example on our own boards before publishing.

SGP devices are sold only at our official store.

sgpstore.net ↗