Master ESP32 LED Blinking: A Step-by-Step Tutorial with ESP-IDF

led blinking in esp32 using esp-idf | Innovate Yourself

Hello, tech enthusiasts! If you’re on a journey to explore the world of microcontrollers and IoT devices, you’ve landed on the right page. Today, we’re diving deep into the exciting realm of ESP32 microcontrollers, where we’ll guide you through a comprehensive LED blinking tutorial using ESP-IDF. Whether you’re 18 or 30, this step-by-step tutorial is designed to help you become a pro in the world of embedded systems. So, grab your ESP32 board and let’s get started on this illuminating adventure!

Understanding ESP32 and ESP-IDF

Before we dive into the nitty-gritty of LED blinking, let’s quickly introduce the main players: ESP32 and ESP-IDF.

  • ESP32: The ESP32 is a powerful microcontroller developed by Espressif Systems. It’s renowned for its versatility and is widely used in IoT applications, robotics, and more.
  • ESP-IDF: The ESP32 IoT Development Framework, or ESP-IDF for short, is the official development platform for the ESP32. It provides tools and libraries for building applications that run on the ESP32.

Why Start with LED Blinking?

Now, you might be wondering, “Why start with LED blinking?” LED blinking is a rite of passage for anyone entering the world of microcontrollers and embedded systems. Here’s why:

1. Simplicity: LED blinking is the “Hello World” of the hardware world. It’s a straightforward project that allows you to focus on the fundamentals without overwhelming you with complex components or code.

2. Instant Feedback: When you blink an LED, you get instant feedback. If it blinks, you know your hardware setup and code are correct. If not, it’s a quick and clear indication that something needs fixing.

3. Building Blocks: LED blinking teaches you the basic building blocks of embedded systems: configuring pins, setting their states, and controlling timing. These skills form the foundation for more advanced projects.

4. Versatility: LED blinking is a versatile starting point. Once you’ve mastered it, you can expand your knowledge by controlling multiple LEDs, creating light patterns, or integrating sensors and actuators.

5. Real-world Applications: LED control is a fundamental aspect of many real-world applications, from IoT devices with status indicators to custom lighting systems. The skills you gain are directly transferable.

Setting Up Your Environment

Before we start writing code, let’s ensure you have the necessary tools and software installed:

  1. Install ESP-IDF: Follow the installation guide provided by Espressif to set up the ESP-IDF on your machine.
  2. Select Your Code Editor: Choose a code editor or integrated development environment (IDE) that suits your preferences. Some popular choices are VS Code and PlatformIO.
  3. Hardware Setup: Connect your ESP32 board to your computer using a USB cable. Ensure that you have a stable power source for the board.

Creating a New Project

Now, let’s create a new ESP-IDF project for our LED blinking tutorial. Open your terminal and navigate to the directory where you’d like to create your project. Run the following commands:

# Create a new directory for your project
mkdir esp32_led_blink
cd esp32_led_blink
# Initialize the project create-project -p . <project-name>

here, replace <project-name> with the project name that you wish to give to you LED Blinking project

Using Menuconfig

ESP-IDF uses a tool called menuconfig to configure project settings easily. Run the following command to access the configuration menu: menuconfig
  • menuconfig for led blinking in esp idf | Innovate Yourself
  • menuconfig for led blinking in esp idf | Innovate Yourself

Here, you can customize various project settings such as Wi-Fi credentials, serial port configurations, and more. For this LED blinking tutorial, we’ll focus on the GPIO pin configuration.

GPIO Configuration for LED Blinking

  1. Navigate to “Component config” ➔ “ESP32-specific” ➔ “GPIO” in the menuconfig menu.
  2. Configure the GPIO pin for the LED. For example, if you’re using GPIO 2, set it as an output pin.

Writing the LED Blinking Code

With the GPIO pin configured, it’s time to write the code. Create a new file, main.c, in your project directory and add the following code:

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
void app_main()
  gpio_set_direction(GPIO_NUM_2, GPIO_MODE_OUTPUT);  // Built-in LED on GPIO 0

This code configures the specified GPIO pin (in this case, GPIO 2) as an output and alternately turns the LED on and off with one-second intervals.

Here’s a breakdown of how it works:

  • We include necessary headers and libraries to work with the ESP-IDF and GPIO pins.
  • Next, gpio_set_direction sets the GPIO pin as an output, indicating that we want to send signals to it.
  • In the main loop (while (1)), we use gpio_set_level to set the GPIO pin to a high state (1), turning the LED on. We then introduce a delay of 1000 milliseconds (1 second) using vTaskDelay.
  • After 1 second, we set the GPIO pin to a low state (0), turning the LED off, and again introduce a 1-second delay.
  • This cycle continues indefinitely, creating the blinking effect.

The code essentially toggles the state of the GPIO pin between high and low at 1-second intervals, creating the LED blinking effect.

github repository for LED Blinking using esp-idf | Innovate Yourself


Building and Flashing the Project

Before you can see the LED blinking, you’ll need to build and flash the project to your ESP32 board. Use the following commands:

# Build the project build
# Flash the project to your ESP32 board -p PORT flash

Here, replace the PORT with the post assigned on your system for the esp32. on windows it will be something like COMX and on Linux or MAC it will be something like /dev/cu.* or /dev/tty.*

Observing the LED Blinking

Once the flashing process is complete, you should see the LED on your ESP32 board blinking at a one-second interval. Congratulations! You’ve successfully completed your first ESP32 LED blinking project.

Troubleshooting Tips

Now, let’s address some common issues beginners might encounter during the setup or coding process and how to overcome them:

1. Driver Issues: If your computer doesn’t recognize the ESP32 when connected via USB, it might be a driver issue. Check the manufacturer’s website for ESP32 drivers and install them.

2. Port Selection: When flashing the project ( -p PORT flash), ensure you’ve correctly specified the port your ESP32 is connected to. It’s typically something like /dev/ttyUSB0 on Linux or COMX on Windows.

3. Permission Errors: On Linux, you might encounter permission errors when accessing the serial port. To fix this, you can add your user to the dialout group using the sudo usermod -aG dialout $USER command and then log out and back in.

4. Incorrect Pin Configuration: Double-check that you’ve configured the correct GPIO pin in the menuconfig menu and your code. A simple mistake here can lead to the LED not blinking.

5. Missing Libraries: If you encounter errors related to missing libraries or dependencies, carefully review the installation instructions for ESP-IDF and ensure you’ve installed all required components.

6. Serial Monitor Issues: If you’re not seeing output on the serial monitor, make sure you’ve selected the correct baud rate (usually 115200) in your code and serial monitor settings.


In this tutorial, we’ve covered the basics of working with ESP32 microcontrollers and ESP-IDF, guiding you through setting up your environment, using menuconfig for configuration, and writing code for LED blinking. This project is just the beginning of your journey into the world of embedded systems and IoT development. Keep experimenting, exploring, and building, and you’ll soon become a pro in this exciting field. Happy coding, and stay tuned for more fantastic projects! 🚀🔌

Also, check out our other playlist Rasa ChatbotInternet of thingsDockerPython ProgrammingMQTTTech NewsESP-IDF etc.
Become a member of our social family on youtube here.
Stay tuned and Happy Learning. ✌🏻😃
Happy tinkering! ❤️🔥

One thought on “Master ESP32 LED Blinking: A Step-by-Step Tutorial with ESP-IDF

Leave a Reply