• Skip to main content
  • Skip to primary sidebar

RNTLab.com

The Ultimate Shortcut to Learn Electronics and Programming with Open Source Hardware and Software

  • Courses
  • Forum
    • Forum
    • Ask Question
  • Shop
  • Account
  • Blog
  • Login

ESP32 using interrupt to momentarily wake from Light Sleep.

Q&A Forum › Category: ESP32 › ESP32 using interrupt to momentarily wake from Light Sleep.
0 Vote Up Vote Down
Ron asked 5 years ago

After receiving interrupt, I want ESP32 to wake up, execute ISR, then return and finish the programmed Sleep time.

Question Tags: ESP32 Interrupt Sleep routine.
9 Answers
0 Vote Up Vote Down
Sara Santos Staff answered 5 years ago

Hi Ron.
I’m not very familiar with light sleep mode.
Probably you need to combine an external wake-up and a timer wake-up.
For more information about light sleep, you can take a look at the documentation and see if you find something that works for your project:https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html#overview
Additionally, a few days ago, one of our readers created a tutorial about the different sleep modes. Here’s some valuable information about light sleep: https://iw4rr10r.github.io/esp32-sleep-modes/light-sleep-mode/
I hope this helps.
Regards,
Sara
 

0 Vote Up Vote Down
Ron answered 5 years ago

Hi Sara,
Thanks for the reply. I have to use Light Sleep since Deep Sleep does not work with GPIO wakeup. I try to use esp_sleep_enable_gpio_wakeup(rcvTip, LOW) command, but the compiler does not like the parameters: (GPIO pin#, enable on LOW). Err Message: “too many arguments to function ‘esp_err_t esp_sleep_enable_gpio_wakeup()”. I f ind Espressive documents hard to follow.
Maybe I should post this on StackOverflow.
Ron

0 Vote Up Vote Down
Sara Santos Staff answered 5 years ago

Hi Ron.
Deep sleep works with GPIO wake-up. We have tutorials about that. Take a look at this tutorial https://rntlab.com/module-3/deep-sleep-external-wake-up/
It was working fine the last time I checked. It allows you to wake up the ESP32 when a GPIO changes its state.
Unless, it is not exactly what you’re looking for.
Regards,
Sara
 

0 Vote Up Vote Down
Ron answered 5 years ago

I’m emabarrased. I didn’t think your tutorials would discuss unusual situations like waking up with external inputs. Sorry to take your time, I should have checked the tutorials first. I tried using the external wakeup command that you discuss but it didn’t compile for me.
I will continue to work on it. Thanks again for the reply

0 Vote Up Vote Down
Steph answered 5 years ago

Hi Ron,
 
Could you publish your code on GitHub Gist so we can help you find out what’s wrong?

0 Vote Up Vote Down
Ron answered 5 years ago

Hi Sara, I posted my code on Gist. Name: ” Use GPIO interrupt to wake from Light Sleep”
Hope you can find it.

0 Vote Up Vote Down
Sara Santos Staff answered 5 years ago

Hi Ron.
When using deep sleep, the functions you can use for wake up from external gpios are:

esp_sleep_enable_ext0_wakeup(GPIO_NUM_X, level)

The X should be replaced with the GPIO number that will cause the wake-up.
The second argument, level, can be either 1 or 0. This represents the state of the GPIO that will trigger wake-up.
If you want to have more than one GPIO able to wake-up the ESP32, you can use other function:

esp_sleep_enable_ext1_wakeup(bitmask, mode)

This function accepts two arguments:

  • A bitmask of the GPIO numbers that will cause the wake-up;
  • Mode: the logic to wake up the ESP32. It can be:
    • ESP_EXT1_WAKEUP_ALL_LOW: wake up when all GPIOs go low;
    • ESP_EXT1_WAKEUP_ANY_HIGH: wake up if any of the GPIOs go high.

We show in the course how to get the bitmask of the GPIOs. But if you need further help, just ask.
Regards,
Sara

0 Vote Up Vote Down
Sara Santos Staff answered 5 years ago

If you want to use light sleep, you need to use two functions:

First, call the following function:

gpio_wakeup_enable()

This function accepts as argument the GPIO you want to use as external wake-up and its level:

  • GPIO number.
  • GPIO wake-up type. Only GPIO_INTR_LOW_LEVEL or GPIO_INTR_HIGH_LEVEL can be used.

Learn more about that function here:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/gpio.html#_CPPv418gpio_wakeup_enable10gpio_num_t15gpio_int_type_t

After setting this up, you should call this second function:

esp_sleep_enable_gpio_wakeup()

This function doesn’t accept any arguments, because the GPIOs were already defined in the other function. That’s why you get the “too many arguments” error.

Learn more about this function here: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/sleep_modes.html#_CPPv428esp_sleep_enable_gpio_wakeupv

I hope this helps.
Regards,
Sara

0 Vote Up Vote Down
Ron answered 5 years ago

Hi Sara,

Thank you very much for clarifying the use of Deep Sleep and Light Sleep commands. The Espressif documentation doesn’t seem very easy to follow, for me. I  would not have figured out how to do this without your help. Now, I need to try your explanations in my sketch.

I’ll let you know how it works.

Thanks again,
Ron

Primary Sidebar

Login to Ask or Answer Questions

This Forum is private and it’s only available for members enrolled in our Courses.

Login »

Latest Course Updates

  • [eBook Updated] Learn Raspberry Pi Pico/Pico W with MicroPython eBook – Version 1.2 May 26, 2025
  • [New Edition] Build ESP32-CAM Projects eBook – 2nd Edition April 16, 2025

You must be logged in to view this content.

Contact Support - Refunds - Privacy - Terms - MakerAdvisor.com - Member Login

Copyright © 2013-2025 · RandomNerdTutorials.com · All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.