Index
Challenge 1: LED Blink Timer
- Objective: Blink an LED every 2 seconds using ESP32.
- Key Concepts:
pinMode()
,digitalWrite()
,delay()
- Hints: Use GPIO 2 and toggle its state with
delay(2000)
.
Challenge 2: Rainbow Effect on WS2812 LED
- Objective: Create a rainbow animation on a WS2812 RGB LED.
- Key Concepts: HSV to RGB conversion,
Adafruit_NeoPixel
- Hints: Use
ColorHSV()
and change hue inside a loop.
Challenge 3: LED Breathing Effect
- Objective: Create a smooth fade-in/fade-out LED effect.
- Key Concepts: PWM, Easing functions (e.g., cosine)
- Hints: Use
ledcWrite()
and gradually change brightness in a loop.
Challenge 4: Bluetooth LED Control
- Objective: Control LED ON/OFF using a mobile app via Bluetooth.
- Key Concepts: Serial Bluetooth, Data parsing
- Hints: Use
SerialBT.begin()
andSerialBT.read()
.
Challenge 5: ESP32 Wi-Fi Network Scanner
- Objective: Scan and list all nearby Wi-Fi networks.
- Key Concepts: WiFi scanning, SSID, RSSI
- Hints: Use
WiFi.scanNetworks()
and loop through results.
Challenge 6: Servo Motor Control from Web
- Objective: Control servo motor angle via a webpage slider.
- Key Concepts: PWM, WebServer, Input parsing
- Hints: Send angle using
/set?angle=90
format.
Challenge 7: Remote-Controlled Buzzer Alarm
- Objective: Trigger buzzer from mobile via Bluetooth or Wi-Fi.
- Key Concepts: Serial/Bluetooth input, Sound output
- Hints: Wait for specific input character to activate buzzer.
Challenge 8: Real-Time Data Chart via WebSocket
- Objective: Show real-time sensor graph on a browser.
- Key Concepts: WebSocket, JavaScript charting
- Hints: Use
ESPAsyncWebServer
andChart.js
.
Challenge 9: Firebase Data Logger
- Objective: Send temperature/humidity data to Firebase in real-time.
- Key Concepts: Firebase REST API, JSON formatting
- Hints: Use HTTP POST requests with Firebase project credentials.
Challenge 10: Gesture-controlled LED
- Objective: Use accelerometer to control LED states with tilt.
- Key Concepts: I2C sensor, Angle calculation
- Hints: Compare X, Y axes to detect tilt direction.
Challenge 11: Weather Station with DHT + BMP180
- Objective: Display temperature, humidity & pressure on OLED.
- Key Concepts: Sensor fusion, I2C bus sharing.
- Hints: Use
Wire.begin()
and multiple sensor libraries.
Challenge 12: ESP-NOW Peer Communication
- Objective: Make two ESP32 boards talk wirelessly without Wi-Fi.
- Key Concepts: ESP-NOW protocol
- Hints: Setup master/slave and test sending small messages.
Challenge 13: Smart Door Lock with Password
- Objective: Create a keypad-based password system to unlock a relay or servo lock.
- Key Concepts: Keypad input, password matching, conditional output
- Hints: Use
Keypad.h
library and compare input string to predefined password.
Challenge 14: IoT Water Tank Monitor
- Objective: Monitor water level using ultrasonic sensor and show data on a web dashboard.
- Key Concepts: Ultrasonic distance, WebServer, Data visualization
- Hints: Use
NewPing
orUltrasonic.h
and map level to percentages.
Challenge 15: Light-Activated Curtain (with Servo)
- Objective: Use LDR to detect sunlight and rotate servo to open or close curtains.
- Key Concepts: Analog sensing, Servo control
- Hints: Define light threshold and trigger servo positions accordingly.
Challenge 16: IoT-based Plant Watering System
- Objective: Automatically water a plant when soil moisture is low.
- Key Concepts: Relay control, Analog input, Automation logic
- Hints: Trigger pump via relay when
analogRead()
drops below threshold.
Challenge 17: Ultrasonic Distance Meter with OLED
- Objective: Measure distance using an ultrasonic sensor and show it in cm on an OLED.
- Key Concepts: PulseIn, Distance calculation, I2C display
- Hints:
distance = (duration / 2) / 29.1;
Challenge 18: IR Obstacle Detection with LED Alert
- Objective: Detect obstacles using an IR sensor and turn on an LED when something is detected.
- Key Concepts: Digital input reading, IR sensor logic (LOW = detection), controlling outputs with ESP32.
- Hint: Connect IR OUT to GPIO, use
digitalRead()
to check for LOW signal, and trigger LED accordingly.
Challenge 19: IR Motion Alert System
- Objective: Build a motion alert system using an IR sensor and a buzzer that triggers when movement is detected.
- Key Concepts: IR sensor detection, digital output (buzzer), conditional control flow.
- Hint: Connect the IR sensor’s OUT pin to a digital input pin on the ESP32. Use
digitalRead()
to check motion and trigger the buzzer usingdigitalWrite()
.
Challenge 20: IR Sensor-Based Counter with OLED Display
- Objective: Count how many times someone passes in front of the IR sensor and show the count on an OLED display.
- Key Concepts: IR sensor input, counter logic, I2C communication with OLED.
- Hint: Increment a counter when motion is detected (
digitalRead()
from IR sensor) and update the display using the Adafruit SSD1306 library.
Challenge 21: Raindrop Sensor Alert System
- Objective: Create a system that detects raindrops using a raindrop sensor and alerts the user with a buzzer and an LED.
- Key Concepts: Analog signal reading, conditional logic, buzzer and LED output control.
- Hint: Use
analogRead()
on the sensor pin and activate the buzzer/LED when moisture crosses a threshold value.
Challenge 22: Multi-Tone Buzzer Alarm System
- Objective: Build a system that plays different tones on a buzzer based on sensor input (e.g., motion or touch).
- Key Concepts: PWM control with
ledcWriteTone()
, conditional statements, tone sequencing. - Hint: Use different frequencies for each condition and control the buzzer using
ledcWriteTone(channel, frequency)
andledcWriteTone(channel, 0)
to turn it off.
Challenge 23: Melody Player with Push Button Control
- Objective: Create a system where pressing a button plays a short melody on a passive buzzer.
- Key Concepts: Arrays, tone frequencies,
ledcWriteTone()
, button debounce. - Hint: Store note frequencies and durations in arrays and use a loop to play them when the button is pressed.
Challenge 24: Buzzer-Based Password Entry System
- Objective: Create a system where the user presses a button in a specific pattern (like Morse code) to unlock something, with the buzzer providing feedback.
- Key Concepts: Button input detection, timing for short/long presses, buzzer tone feedback, state tracking.
- Hint: Detect short vs. long button presses using
millis()
and give beep feedback using different tones.
Challenge 25: Scrolling Text on 8×8 LED Matrix Display
- Objective: Display a custom message scrolling from right to left on an 8×8 LED matrix using the MAX7219 driver.
- Key Concepts: LED matrix addressing, text rendering, timed scrolling animation.
- Hint: Use the
LedControl
orMD_MAX72XX
library and a timer/delay to shift characters one column at a time across the display.
Challenge 26: Momentary Button-Controlled LED Brightness
- Objective: Use a push button to increase the brightness of an LED in steps with each press (e.g., 0%, 25%, 50%, 75%, 100%).
- Key Concepts: PWM (analog output), digital input, state tracking.
- Hint: Use
analogWrite()
(orledcWrite()
for ESP32) and a counter to cycle through brightness levels.
Challenge 27: Button-Triggered LED Fade Sequence
- Objective: Press the momentary push button once to start a smooth fade-in and fade-out effect on an LED.
- Key Concepts: Button edge detection, PWM fading using
ledcWrite()
, loop control for animations. - Hint: Detect the button press using
digitalRead()
andlastState
, then use afor
loop to increment and decrement brightness gradually.
Challenge 28: Toggle Multiple LEDs with Single Button
- Objective: Use a single momentary push button to cycle through and light up three different LEDs in sequence: first LED, second LED, third LED, then all OFF.
- Key Concepts: Button state change detection, using a counter to track LED states, digital output control.
- Hint: Use a variable to count button presses and
switch-case
orif-else
blocks to manage which LED turns on.
Challenge 29: ESP32 Ambient Light Reactive Display
- Objective: Use an LDR (Light Dependent Resistor) to adjust the brightness of an LED or OLED display based on ambient light.
- Key Concepts: Analog input reading, mapping values, PWM brightness control.
- Hint: Use
analogRead()
from the LDR, map it usingmap()
to 0–255, and control brightness withledcWrite()
ordisplay.setContrast()
.
Challenge 30: ESP32 Temperature Alert System
- Objective: Use a DHT11 or DHT22 sensor to monitor temperature and trigger a buzzer when a certain threshold is crossed.
- Key Concepts: Reading temperature data, conditional logic, digital output control.
- Hint: Use the DHT library to read temperature and use
digitalWrite()
to control the buzzer based on a threshold (e.g., >30°C).