From the workshop: Arduino Uno R3 Development Board (ATmega328P) With USB Cable

View product
All articles
Technology

📡25 ESP32 Project Ideas for Students (Beginner to Advanced, with Parts & Diagrams)

Twenty-five ESP32 project ideas for students, grouped beginner to advanced with parts and skills, plus expanded India-focused builds: monsoon rain alert with code, soil monitor, RFID attendance, air quality and energy monitor.

TThinking Robot Team 12 min read
ESP32 board with a rain sensor, soil sensor, RFID reader and OLED display for student IoT projects
In this article (19)

These ESP32 project ideas for students run from beginner to advanced, each with its key parts and the skill it teaches. Several tackle everyday Indian problems: the first monsoon rain, a thirsty balcony plant, the electricity bill, classroom attendance and winter smog.

The best first ESP32 projects are a Wi-Fi LED switch, a DHT22 weather web page and a monsoon rain alert: each needs an ESP32 board and only a few parts, and teaches Wi-Fi from day one. Then add one new skill per project: a dashboard, a display, a motor or a battery.

25 ESP32 project ideas in three columns: beginner 1–8, intermediate 9–17, advanced 18–25, with five India-focused ideas highlightedStart in the left column and move right one skill at a time

Why the ESP32 is a good board for student projects

The ESP32 is a low-cost Espressif microcontroller with Wi-Fi and Bluetooth built in. The common ESP32-WROOM-32 module has a dual-core Xtensa LX6 processor at up to 240 MHz, 520 KB of SRAM, 2.4 GHz Wi-Fi (802.11 b/g/n) and Bluetooth v4.2 (Classic and BLE), according to the ESP32 datasheet. You program it in the Arduino IDE with the Arduino-ESP32 core.

Still choosing a board? Read best ESP32 board for beginners in India and ESP32 vs ESP8266.

Pin rules to know before you start

RuleWhy it matters
All GPIOs are 3.3 VA 5 V sensor output needs a voltage divider or level shifter
GPIO34–39 are input-only, with no internal pull-upsFine for sensors; cannot drive an LED or use INPUT_PULLUP
ADC2 pins stop working for analogRead when Wi-Fi is onPut analog sensors on ADC1: GPIO32–39
GPIO6–11 connect to the on-module flashNever use them
GPIO0, 2, 5, 12 and 15 are strapping pinsAvoid parts that pull them high or low at reset; GPIO12 is the riskiest
10 GPIOs support capacitive touchMake touch buttons with just a wire or foil

Upload problems? See ESP32 not detected on COM port. Rebooting when Wi-Fi starts? See ESP32 brownout detector triggered.

Beginner ESP32 project ideas (1–8)

#ProjectOne-line descriptionKey partsSkills learned
1Wi-Fi LED web switchSwitch an LED from your phone's browserESP32, LED, 220 ΩWi-Fi, web server, GPIO
2Wi-Fi network scannerList nearby networks and signal strengthESP32 onlyWi-Fi scanning, RSSI, Serial Monitor
3Touch-sensor lampTouch foil to toggle a lightESP32, foil, LEDCapacitive touch, thresholds
4DHT22 weather web pageRoom temperature and humidity on your phoneESP32, DHT22Sensor libraries, HTML
5Monsoon rain alertBeep and update a web page when rain startsESP32, rain sensor module, buzzer, BC547Digital input, alerts
6Plant soil monitorSoil moisture in %, with a dry-pot warningESP32, capacitive soil sensorAnalog input, calibration
7Internet clock on OLEDExact IST time from the internetESP32, 0.96" I2C OLEDNTP, I2C displays
8Bluetooth phone lightsSwitch LEDs from a Bluetooth serial appESP32 (original), LEDsBluetooth Classic

Intermediate ESP32 project ideas (9–17)

#ProjectOne-line descriptionKey partsSkills learned
9PIR intruder alertPhone alert when someone enters a roomESP32, HC-SR501 PIRInterrupts, notifications
10Air-quality monitorPM2.5, PM10, temperature and humidityESP32, PMS5003, BME280UART, I2C, data averaging
11Water tank level monitorOverhead tank level on your phoneESP32, JSN-SR04T or HC-SR04Ultrasonic distance, maths
12RFID attendance systemTap a card; name and time are loggedESP32, RC522, OLEDSPI, NTP time, logging
13Automatic plant watererRun a 5 V pump when the soil is dryESP32, soil sensor, MOSFET module, pumpDriving loads, flyback diodes
14Data loggerSave readings to microSD or a Google SheetESP32, microSD module, any sensorFiles, CSV, HTTP requests
15MQTT home dashboardSeveral sensors on one dashboardESP32, sensors, free MQTT brokerMQTT publish/subscribe
16ESP-NOW wireless remoteOne ESP32 controls another, no router2 × ESP32, buttons, LEDsESP-NOW, MAC addresses
17Gas leak alarmAlarm when smoke or LPG is detectedESP32, MQ-2 module, buzzerSensor warm-up, dividers

For project 11, our HC-SR04 guide shows how to divide its 5 V echo down for an ESP32. The MQ-2 in project 17 needs 5 V for its heater, so its analog output also needs a divider (check it with the ADC voltage calculator). Test it only with smoke from a blown-out incense stick, never with an LPG cylinder.

Advanced ESP32 project ideas (18–25)

#ProjectOne-line descriptionKey partsSkills learned
18Home energy monitorSafely estimate an appliance's powerESP32, SCT-013-030 clamp, resistors, capacitorRMS maths, AC signals
19ESP32-CAM security cameraStream video, save photos on motionESP32-CAM (OV2640), USB-serial adapter, PIRCamera, streaming, microSD
20Wi-Fi robot carDrive a robot from a phone browserESP32, 2 gear motors, TB6612FNG or L298N, batteryPWM, motor drivers, power
21Self-balancing robotA two-wheel robot that stays uprightESP32, MPU6050, motors, driverPID control, IMU sensors
22Solar weather stationBattery station that sleeps between readingsESP32, BME280, solar panel, Li-ion chargerDeep sleep, power budgets
23LoRa farm sensor nodeSoil readings sent far without Wi-FiESP32, LoRa module, soil sensorLoRa radio, low power
24OTA LED-strip controllerAnimate LEDs, update code over Wi-FiESP32, WS2812B strip, 5 V supplyOTA updates, addressable LEDs
25TinyML gesture detectorRecognise gestures on the board itselfESP32 or ESP32-S3, MPU6050Data collection, on-device ML

For motor projects, compare drivers in L298N vs TB6612FNG vs DRV8833 and pick a battery with the robot battery guide. For project 22, the datasheet lists about 10 µA in deep sleep (RTC timer and memory on), but development boards draw far more through their regulator and USB chip — estimate run time with the battery life calculator. For project 23, use a module for India's LoRaWAN band, IN865 (865–867 MHz). Project 25 builds on our edge machine learning guide.

Five India-focused ESP32 projects, expanded

Monsoon rain alert (idea 5)

Rain plate to LM393 module (VCC to 3V3, GND, DO to GPIO27); GPIO26 drives a BC547 through 1 kΩ to switch a 5 V active buzzer; the phone shows the status over Wi-FiDO goes LOW when rain bridges the plate; the ESP32 beeps and updates a web page

Water bridges the plate's two interleaved tracks and the module's LM393 comparator pulls DO LOW. The buzzer runs from 5 V through a BC547 rather than straight from an ESP32 pin. The full build is below.

Plant soil monitor (idea 6)

A capacitive soil sensor lasts much longer than the two-pronged resistive type, which corrodes in wet soil. Connect its output to GPIO34 (ADC1) and read it with analogRead(), which returns 0–4095 on the ESP32. Calibrate it: note the reading in air (dry) and in water (wet), then map between them to 0–100 %. Some clone boards need 5 V; if so, first confirm the output never exceeds 3.3 V.

RFID attendance system (idea 12)

RC522 SPI pins to ESP32: SDA to GPIO5, SCK to GPIO18, MOSI to GPIO23, MISO to GPIO19, RST to GPIO4, 3.3 V and GND; OLED on GPIO21 and GPIO22; buzzer on GPIO26; Wi-Fi to NTP time and a logTap, read the card's UID, match the student, add the time, then log it

The RC522 reads 13.56 MHz cards over SPI using the ESP32's default VSPI pins, and it runs on 3.3 V — never 5 V. Get the time from the internet with configTime(19800, 0, "pool.ntp.org"); 19,800 seconds is the 5 h 30 min offset for IST. Log each tap to microSD or a Google Sheet. Card numbers can be copied, so use this for attendance, not door locks, and store only the student data you need.

Air-quality monitor (idea 10)

A PMS5003 laser particle sensor runs on 5 V but talks 3.3 V serial data at 9600 baud, so it connects safely to the ESP32's second UART (for example GPIO16 RX, GPIO17 TX). It reports PM1.0, PM2.5 and PM10 in µg/m³. Add a BME280 on I2C (GPIO21 SDA, GPIO22 SCL) for temperature, humidity and pressure. Low-cost sensors are not reference instruments, so present readings as indicative and compare trends with the nearest official monitoring station. An MQ-135 gas sensor cannot measure particles.

Home energy monitor (idea 18)

A SCT-013-030 clamp around the live wire produces up to 1 V AC, biased to 1.65 V by two 10 kΩ resistors and a 10 µF capacitor, and read on ESP32 GPIO34The clamp is magnetically coupled, so the ESP32 never touches mains voltage

A clip-on current transformer measures current in one wire without electrical contact. The SCT-013-030 gives 1 V at 30 A. Two 10 kΩ resistors centre this AC signal at 1.65 V so the ADC can read both halves of the 50 Hz wave; the ESP32 then calculates the RMS value.

Hands-on: build the monsoon rain alert

Parts: ESP32 DevKit, rain sensor plate with LM393 module, 5 V active buzzer, BC547 transistor, 1 kΩ resistor, breadboard and jumper wires.

  1. Wire the module: VCC → 3V3, GND → GND, DO → GPIO27. Leave AO unconnected.
  2. Wire the buzzer switch: GPIO26 → 1 kΩ → BC547 base, emitter → GND, collector → buzzer (−), buzzer (+) → 5V/VIN.
  3. Install the ESP32 board package, add your Wi-Fi name and password to the sketch below, and upload it.
  4. Open the IP address printed in the Serial Monitor (115200 baud) on a phone on the same Wi-Fi network.
  5. Sprinkle water on the plate. The buzzer beeps three times and the page changes to "It is raining!". Turn the module's sensitivity screw if it triggers too easily.
cpp
#include <WiFi.h>
#include <WebServer.h>

const char* WIFI_SSID = "YOUR_WIFI_NAME";
const char* WIFI_PASS = "YOUR_WIFI_PASSWORD";

const int RAIN_PIN = 27;     // LM393 DO: LOW when water is detected
const int BUZZER_PIN = 26;   // drives the buzzer through a BC547
const unsigned long DRY_AFTER_MS = 10UL * 60UL * 1000UL;  // 10 minutes without water

WebServer server(80);
bool raining = false;
unsigned long lastWet = 0;

void beep(int times) {
  for (int i = 0; i < times; i++) {
    digitalWrite(BUZZER_PIN, HIGH);
    delay(300);
    digitalWrite(BUZZER_PIN, LOW);
    delay(200);
  }
}

void handleRoot() {
  String page = "<!DOCTYPE html><html><head>";
  page += "<meta name='viewport' content='width=device-width'>";
  page += "<meta http-equiv='refresh' content='10'><title>Rain alert</title></head><body>";
  page += raining ? "<h1>It is raining!</h1>" : "<h1>Dry</h1>";
  page += "</body></html>";
  server.send(200, "text/html", page);
}

void setup() {
  Serial.begin(115200);
  pinMode(RAIN_PIN, INPUT);
  pinMode(BUZZER_PIN, OUTPUT);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println();
  Serial.print("Open http://");
  Serial.println(WiFi.localIP());
  server.on("/", handleRoot);
  server.begin();
}

void loop() {
  server.handleClient();
  if (digitalRead(RAIN_PIN) == LOW) {          // water on the plate
    lastWet = millis();
    if (!raining) {
      raining = true;
      beep(3);                                 // alert once per shower
    }
  } else if (raining && millis() - lastWet > DRY_AFTER_MS) {
    raining = false;                           // dry for 10 minutes: re-arm
  }
}

The 10-minute wait stops repeat beeps as the plate dries. Next, add a phone notification through a messaging bot or MQTT (idea 15).

Which ESP32 project should you build first?

If you are…Start withThen try
New to electronics1 Wi-Fi LED switch4 DHT22 weather page
Preparing a school exhibition5 Monsoon rain alert13 Automatic plant waterer
Interested in the environment6 Plant soil monitor10 Air-quality monitor
Building for your school or club12 RFID attendance15 MQTT dashboard
Into robots20 Wi-Fi robot car21 Self-balancing robot
An engineering student18 Energy monitor23 LoRa node or 25 TinyML

Get parts at ESP32 boards, sensors and motor drivers, or as a complete kit. Brand new to microcontrollers? Start with Arduino projects for beginners or compare boards in Arduino vs ESP32 vs Raspberry Pi Pico.

Frequently asked questions

What is the easiest ESP32 project for a beginner?

A Wi-Fi LED web switch (idea 1). It needs only an LED and a 220 Ω resistor, and teaches what sets the ESP32 apart from an Arduino Uno: Wi-Fi and a web server.

Can I use 5 V sensors with an ESP32?

Yes, if you reduce the module's output to 3.3 V with a voltage divider or level shifter. Power it from 5 V (VIN) and divide only the signal; check values with the voltage divider calculator.

Why does analogRead return 0 when Wi-Fi is on?

Your sensor is probably on an ADC2 pin, which the Wi-Fi driver uses. Move it to an ADC1 pin: GPIO32, 33, 34, 35, 36 or 39 on a typical ESP32 DevKit.

Which ESP32 projects are good for a science exhibition?

The rain alert, soil monitor, tank level monitor and air-quality monitor solve visible problems and show live data. See also school science exhibition project ideas.

Do I need the internet for ESP32 projects?

No. Most ideas work on a local Wi-Fi network. Only NTP time, cloud notifications and online logging need internet, and ESP-NOW and LoRa need no router at all.

T

Thinking Robot Team

Thinking Robot is a team of engineers and educators in Pune who design electronics and robotics kits and run hands-on workshops for students and schools. Spotted a mistake or have a question? Get in touch.

Filed under#ESP32#IOT#Electronics#Tutorial#Thinking_Robot

Keep learning

WhatsApp