ESP32 with PIR Motion Sensor using Interrupt and Timer


ESP32 with PIR Motion Sensor using Interrupt and Timer- In the rapidly evolving world of IoT (Internet of Things), the ESP32 microcontroller has emerged as a popular choice for professionals and hobbyists alike. This powerful, yet cost-effective platform is known for its versatility, integrating Wi-Fi and Bluetooth capabilities, making it ideal for a myriad of applications ranging from home automation to industrial control. Its advanced features, combined with a user-friendly programming environment, open up a world of possibilities for innovative projects.

One such project that has gained significant attention involves the integration of the ESP32 with a PIR (Passive Infrared) motion sensor. PIR sensors are widely used in automatic lighting systems, security alarms, and wildlife monitoring due to their ability to detect motion through changes in infrared radiation in their surroundings. When a warm body, like a human or animal, passes in front of the sensor, the infrared radiation pattern changes, triggering the sensor.

The real power of this combination lies in the use of interrupts and timers. Interrupts are a key feature in microcontrollers, allowing the ESP32 to react instantly to changes detected by the PIR sensor. Instead of continuously polling the sensor’s status, which is resource-intensive, the ESP32 can perform other tasks and only respond when the sensor detects motion. This not only makes the system more efficient but also conserves power, a crucial aspect in battery-operated applications.

Timers, on the other hand, are used to manage time-based operations without the need for continuous processor engagement. In the context of the ESP32 and PIR sensor setup, timers can be used to control how long an action (like turning on a light or activating an alarm) should occur following motion detection. This integration of timers enhances the functionality, allowing for more sophisticated and energy-efficient designs.

The application of ESP32 with PIR motion sensors using interrupts and timers represents a significant leap in developing smart, energy-efficient, and responsive systems. This article aims to delve deep into this integration, exploring the technicalities, implementation, and potential applications, offering a valuable resource for anyone looking to harness the power of these technologies in their projects.

Understanding ESP32 and PIR Motion Sensor

Technical Specifications of ESP32

The ESP32 is a feature-rich MCU (Microcontroller Unit) that stands out in the IoT domain. It’s a successor to the popular ESP8266, but with significantly enhanced capabilities. This powerful chip is equipped with a dual-core processor that can run at up to 240 MHz, providing ample processing power for complex tasks. The ESP32 also features integrated Wi-Fi and Bluetooth, including classic Bluetooth and BLE (Bluetooth Low Energy), making it ideal for IoT applications.

One of the distinguishing features of the ESP32 is its rich set of peripherals. It boasts a range of GPIO (General Purpose Input Output) pins, ADCs (Analog to Digital Converters), DACs (Digital to Analog Converters), PWM (Pulse Width Modulation) channels, and much more. This versatility allows for the integration of various sensors and actuators, making it a preferred choice for diverse projects ranging from simple LED control to advanced home automation systems.

How PIR Motion Sensors Work

PIR motion sensors are specialized electronic devices that detect changes in infrared radiation levels in their environment. These sensors consist of a pyroelectric material that reacts to infrared radiation by generating an electric charge. When a warm body, like a human or animal, moves within the sensor’s range, it disrupts the infrared radiation pattern, leading to a change in the electric charge. This change is detected and converted into an electrical signal, which can be processed by a microcontroller like the ESP32.

PIR sensors are typically equipped with a fresnel lens that focuses the infrared radiation onto the sensor, enhancing its sensitivity and range. They are favored for motion detection due to their low power consumption, ease of use, and reliability.

Advantages of Using ESP32 with PIR Sensors

The combination of ESP32 and PIR motion sensors offers several advantages for IoT and automation projects. Firstly, the processing power and connectivity options of the ESP32 enable the development of sophisticated and networked motion detection systems. For instance, a PIR sensor could trigger an alert to a smartphone via Wi-Fi or Bluetooth when motion is detected.

Secondly, the ESP32’s ability to handle interrupts and timers allows for efficient power management. Instead of continuously monitoring the sensor’s output, the ESP32 can be programmed to wake up only when a motion event is detected, significantly reducing power consumption. This makes the combination ideal for battery-powered applications where power availability is a concern.

Overall, the ESP32 and PIR motion sensor duo provide a versatile and powerful foundation for creating smart, responsive, and efficient motion detection systems. The integration offers the potential to revolutionize how we interact with and manage our environments, from enhancing home security to automating industrial processes.

Working with Interrupts and Timers

Interrupts in ESP32

Interrupts are a fundamental feature in microcontroller programming, offering a method for responding to external or internal events promptly. In the context of the ESP32, interrupts are used to handle events such as a change in sensor input without the need for continuous polling. This not only makes the system more responsive but also more power-efficient.

When a PIR sensor detects motion, it changes its output state. The ESP32 can be programmed to trigger an interrupt on this state change. This means the ESP32 can perform other tasks or be in a low-power state and only wake up when the sensor detects motion. This is especially beneficial in applications where real-time response is crucial, such as in security systems or in power-sensitive applications like battery-operated devices.

Timers in ESP32

Timers in the ESP32 are tools that allow for the scheduling of tasks to occur at specific intervals or after a set duration. This functionality is critical in creating time-sensitive applications where actions need to be performed regularly or after certain delays.

In the ESP32, timers can be used for a variety of purposes, such as creating a delay after a motion is detected before taking an action or for debouncing the output of the PIR sensor. For instance, once motion is detected and an interrupt is triggered, a timer can be started to keep a light on for a predetermined duration before turning it off automatically.

Combining Interrupts and Timers

The combination of interrupts and timers in ESP32 projects involving PIR motion sensors enhances both efficiency and functionality. For example, an interrupt-driven approach ensures that the system uses power only when necessary (i.e., when motion is detected), while timers can be used to control how long a particular action should continue after the detection.

This integration offers a level of sophistication in ESP32-based projects. By utilizing interrupts, the system becomes highly responsive and energy-efficient, only activating when needed. Timers add the ability to precisely control actions post-detection, like maintaining lighting for a set period, thus further optimizing power usage and enhancing user experience.

In conclusion, understanding and effectively utilizing interrupts and timers is crucial when working with ESP32 and PIR motion sensors. This knowledge allows for the creation of responsive, efficient, and sophisticated systems suitable for a wide range of applications, from simple home automation to complex industrial monitoring systems.

Hardware Integration

Integrating a PIR motion sensor with the ESP32 requires basic knowledge of electronics and some careful wiring. The PIR sensor typically has three pins: VCC, GND, and OUT. VCC is connected to a power source (3.3V or 5V depending on the sensor specifications), GND to the ground, and OUT to one of the GPIO pins on the ESP32. The chosen GPIO pin will be used to detect the motion signal from the PIR sensor.

It’s important to ensure that the power requirements of the PIR sensor match the output capabilities of the ESP32 board. Additionally, a pull-up or pull-down resistor might be necessary on the data line (OUT) to stabilize the signal.

Software Setup

Before programming, the appropriate development environment needs to be set up. The most common way to program the ESP32 is using the Arduino IDE, which supports C++ language and provides a user-friendly interface. After installing the IDE, additional board managers for ESP32 need to be installed.

Libraries specific to handling GPIO and timer functionalities may be required. These libraries are generally included in the ESP32 core, but additional libraries can be installed through the Arduino IDE if needed.

PIR Motion Sensor Pinout:

ESP32 with PIR Motion Sensor

A PIR (Passive Infrared) motion sensor is typically a small, electronic sensor that detects infrared light radiating from objects in its field of view. Most PIR sensors are designed to detect the movement of people, animals, or other objects that emit heat. In terms of pinout, a basic PIR sensor usually has three pins:

VCC (Power): This is the power supply pin through which the sensor receives the voltage necessary for operation. The voltage level can vary depending on the sensor model but is commonly around 3.3V to 5V for many sensors designed for use with microcontrollers like Arduino.

OUT (Signal Output): This pin outputs the signal from the sensor. When the sensor detects motion, the output pin will change from low (0V) to high (usually around 3.3V or 5V, depending on the VCC supply). The output is digital, which means it only outputs two levels: high or low. It can be directly connected to a microcontroller’s digital input pin to signal when motion has been detected. If your sensor is a more complex one or has signal conditioning built-in, the output might be analog; however, the most common PIR sensors used with microcontrollers have digital outputs.

GND (Ground): This pin is connected to the ground of the power supply. All electronic circuits need a reference point for their voltages, and this pin provides a common ground for both the power supply and the signal output.

Time Delay Adjustment: A potentiometer (variable resistor) that allows you to set how long the output remains high after detecting motion.

Sensitivity Adjustment: Another potentiometer that allows you to adjust the sensitivity of the sensor.

ESP32 and PIR Motion Sensor Circuit diagram:

ESP32 with PIR Motion Sensor

PIR Motion Sensor:

  • The red wire from the PIR sensor is connected to the 5V pin on the ESP32, providing power to the sensor.
  • The black wire is connected to a GND pin on the ESP32, completing the ground circuit for the sensor.
  • The yellow wire is connected to GPIO 33 on the ESP32. This wire carries the signal from the PIR sensor to the ESP32, indicating whether motion has been detected.

LED and Resistor:

  • The anode (longer leg) of the LED is connected to GPIO 2 on the ESP32. When GPIO 2 is set HIGH by the ESP32, it will supply voltage to the LED, causing it to light up.
  • The cathode (shorter leg) of the LED is connected to one end of the resistor, which helps to limit the current flowing through the LED to prevent it from burning out.
  • The other end of the resistor is connected to GND on the ESP32, completing the circuit for the LED.

ESP32 and PIR Motion Sensor Programming:

Let’s create a simple example code that integrates an ESP32 with a PIR motion sensor. This code will use interrupts to detect motion and a timer to manage post-detection actions (like keeping a light or an LED on for a specified duration after detecting motion).


PIR_PIN: The GPIO pin to which the PIR sensor’s output is connected.

LED_PIN: The GPIO pin controlling an LED or any other indicator.

motionDetected: A flag to indicate motion detection.

lastMotionTime: Tracks the last time motion was detected.

ledOnDuration: Duration for which the LED stays on after detecting motion.

In the setup() function, we configure the PIR_PIN as an input and the LED_PIN as an output. We then attach an interrupt to the PIR_PIN, which calls the detectMotion() function when motion is detected (rising edge on the PIR_PIN).

In the loop() function, we check if motion was detected. If it was, we turn on the LED and keep it on for the duration specified by ledOnDuration. After this duration, the LED is turned off, and the motionDetected flag is reset.

This code provides a basic framework and can be expanded or modified according to specific project needs. Remember to test this in a safe environment, especially if you’re controlling devices other than LEDs.

How it works:

When motion is detected, “Motion detected!” is printed to the serial monitor, and the LED is turned on.

ESP32 with PIR Motion Sensor

10 seconds after the motion is detected (if no new motion is detected within that time), “LED turned off.” is printed to the serial monitor, and the LED is turned off.

ESP32 with PIR Motion Sensor

Use Cases

The integration of ESP32 with a PIR motion sensor using interrupts and timers can be applied to a myriad of innovative and practical applications. These use cases range from simple home automation to sophisticated industrial monitoring systems.

Home Security Systems: Employing the ESP32 and PIR sensor combination for detecting unauthorized movement in residential areas. When motion is detected, the system can trigger alarms, send notifications to homeowners, or activate surveillance cameras.

Energy-Efficient Lighting: In office buildings or homes, lights can be automatically controlled based on occupancy, detected by PIR sensors. This setup ensures lights are only on when needed, leading to significant energy savings.

Wildlife Monitoring: Used in ecological studies, the ESP32 can record or notify researchers when animals pass by the sensor, especially in remote areas. This method is less intrusive and can provide valuable data about wildlife patterns.

Retail and Public Spaces: Analyzing foot traffic in stores or public areas for optimizing layout and enhancing customer experience. The data collected can help in making informed decisions about product placements or space utilization.

Healthcare Monitoring: In hospitals or eldercare facilities, the system can monitor patient movement without intrusive surveillance, helping in ensuring patient safety and timely assistance.

Industrial Automation: Automating processes like machinery operation or monitoring restricted areas in industrial settings for safety and efficiency.

Troubleshooting Common Issues

Despite the numerous applications, users might face challenges while implementing these systems. Here are some common issues and their potential solutions:

False Triggers: The PIR sensor may sometimes give false positives due to environmental factors like temperature changes or moving curtains. Adjusting the sensor’s sensitivity or using software debouncing techniques can help minimize this.

Connectivity Issues: Problems with Wi-Fi or Bluetooth connectivity in ESP32 can hinder remote monitoring or control. Ensuring stable power supply, updating firmware, and checking network settings can resolve such issues.

Power Management: For battery-operated devices, ensuring efficient power usage is crucial. Implementing deep sleep modes in the ESP32 when the device is inactive can extend battery life.

Interference and Noise: Electronic noise or physical obstructions can affect sensor accuracy. Using shielded cables, proper grounding, and strategic placement of the sensor can mitigate these problems.

Programming Errors: Software bugs can lead to non-responsive or erratic behavior. Careful coding, thorough testing, and debugging are key to resolving these issues. Utilizing online forums and communities can also provide solutions and advice from experienced developers.

By addressing these challenges, the ESP32 and PIR motion sensor systems can be optimized for reliable and efficient operation across various applications, demonstrating the versatility and power of integrating modern microcontrollers with smart sensors.


The fusion of ESP32 with PIR motion sensors, utilizing interrupts and timers, offers a powerful platform for creating responsive and energy-efficient systems. This combination caters to a wide range of applications, from enhancing home security to enabling smart automation in industrial and public spaces. While the implementation is straightforward, it opens up a world of possibilities for innovation and practical problem-solving. As with any technology, users may encounter challenges, but with careful planning, programming, and troubleshooting, these can be effectively overcome. This integration not only demonstrates the capabilities of modern microcontrollers but also paves the way for future advancements in IoT and automation.

Related Articles

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button