Video implementing deep sleep in the sparkfun ESP 32 thing. In this video, we will learn to write a sketch with deep sleep integrated into it. Later, we will learn about the various wakeup sources available in the ESP 32. Finally, we will implement and explain the time of wakeup and touchpad wakeup code for the sparkfun ESP 32 thing. In the last video, we have discussed deep sleep mode. Basically in this mode, the only parts of the chip that remains powered on are you will be coprocessor accuracy peripherals and RTC memories.
To write a sketch to put your ESP 32 into deep sleep mode, and then wake it up. You need to keep these tips in mind. First, you need to configure the wakeup source. Obviously at some point in time, you will need to wake up your ESP 32 from its slumber There are four wakeup sources available in the ESP 32, which will be discussed later in this video. Second, you can decide what peripherals to shut down or coupon during deep sleep. However, by default, the ESP 32 automatically powers down the peripherals that are not needed with a wakeup source you define.
Finally, you use the ESP underscore deep underscore sleep underscore start function to put your ESP 32 into deep sleep mode. Now let's look at the various wakeup sources available in the ESP 32. They are timer wakeup touchpad wakeup, two types of external wakeup And finally, you will pay coprocessor wakeup. You can use one or combine more than one wakeup source. First, let us look at the time of wake up. As the name suggests, we need to use a timer to wake up the ESP 32 Deep Sleep mode to active mode.
You might be wondering, how can I access the timer when the main code is disabled, free or normal? As the RTC controller comes to the rescue with its inbuilt RTC timeout. This feature is especially useful if you want to run projects that require time stamping, or daily tasks while maintaining low power consumption. enabling the RTC timer in deep sleep is very straightforward procedure. You need to call the following function. Sp underscore sleep underscore enable underscore timer underscore wakeup time underscore in underscore us this function takes in time in microseconds.
Let's see how timer wakeup works using the example from the library. Open your Arduino IDE Ag and go to file. Examples. ESP 32 deep sleep and open the timer wakeup sketch First two lines of code define the period of time the ESP 32 will be sleeping. This example uses a conversion factor from microseconds to seconds, so that you can set this leap time in the time underscore to underscore sleep variable in seconds. In this case, the example will put the ESP 32 into deep sleep mode for five seconds.
Next instruction showcases how we can store data even in the deep sleep mode. As the main memory and core is disabled in deep sleep mode, we have to find some creative ways to store data during sleep modes. The ESP 32 has eight kilobytes SRAM on the RTC part called RTC fast memory. The data set here is not erased during deep sleep. However, it is erased when you press the reset button. To save data on the artists in memory.
You just have to add artists See underscore data underscore a TT er before a variable definition. The examples is the boat count variable on the artists in memory. This variable will count how many times the ESP 32 has woken up from deep sleep. Now you can see a function definition with named print underscore wakeup underscore reason. The sole purpose of this function is to print the reason by which the ESP 32 has been awakened from deep sleep. This is added in all the examples deep steps catches, for ease of learning for newbies to deep sleep mode.
In this function, we use the ESP underscore sleep underscore get underscore wakeup underscore cos to check reason of wakeup based on the data returned by the function switch case will print that reason on the serial monitor for deep sleep to work We need to put the whole project code in only the word setup. So for all deep sleep sketches, we cannot put the logic inside of word loop, so we have to leave it empty. This is because the word loop will only do its job if the ESP 32 core is continuously working. In case of deep sleep mode, for obvious reasons, using the word low for your project is impossible. The setup loop starts by initializing the serial communication at about rate of 115 to 00. Then the boot count variable is increased by one in every reboot, and that number is printed on the serial monitor.
Then the court calls the print underscore wakeup underscore reason function, but you can call any function you want to perform. For example, you want to make up your ESP 32 once a day to read a value from a sensor. Next, the code defines the wakeup source by using the following function This function accepts as an argument the time to sleep in microseconds, as we've seen previously. In our case, we use ESP underscore sleep underscore enable underscore timer underscore wakeup time underscore to underscore sleep star us underscore to underscore s underscore factor. Then after all the tasks are performed, the ESP goes to sleep by calling the following function. ESP underscore deep underscore sleep underscore start.
Upload the examples catch to your ESP 32. Make sure you have the right boat and comport selected open the serial monitor at about rate of 115200. Every five seconds, the ESP 32 wakes up, prints the message on the serial monitor and goes to deep sleep again. Every time the ESB wakes up, the vote count variable increases It also prints the wakeup reason as shown in the serial monitor. Instead of printing a message on the serial monitor, you can modify the code to do the task you want to do in your project on wakeup. Next, let us look at the touchpad wakeup.
This function utilizes the capacitive touch detection feature of some of the GPIO pin in the sparkfun ESP 32 thing to wake up the core of the ESP 32 from a deep sleep, open Arduino ID and load the touch wakeup code from the deep sleep examples. The basic concept is the same and there are only a few changes in the new code as compared to the time of wakeup code. At the start of the program, we have defined a macro with a value assigned to the threshold. Here a threshold of 40 has been set. And whenever the touch pen readings to go below this value, we can use this macro to trigger record Next, we have created an object or an instance of a class named touch underscore Pat underscore T. The print underscore wakeup underscore reason function does the same function as in the previous code.
That is, it prints out the reason for wake up. After that, a new function was defined with the name print underscore wakeup underscore touchpad, inside which we use the ESP underscore sleep underscore get, underscore touchpad underscore wakeup underscore status function to find on which pin the touch is detected. This function returns an integer value based on the touch pin number. Remember that the touch pin number and the GPIO pin number is different. If we take a look at the pinout diagram of our sparkfun ESP 32 thing, you will understand the switch case used in this function. The callback function is left empty You can add your own tasks inside this function.
This will get executed when the touch is detected on a specific pin. As this is a deep sleep sketch, all the magic happens inside the setup flow. Just as the previous example, we are counting the number of bolts after deep sleep. Then we print the wakeup reason and print which GPIO pin detected the touch using these two functions. The touch attach interrupt function sets up interrupt on the specified touchpad. This function accepts three input parameters.
First is the touchpad number, which is named from T one to T nine. Next is the callback function, which here is an empty function. Finally, we get a threshold value for detection. Initially, we have defined the threshold to be 14. If you want to wake up the ESP 32 using different touch pins, you just have to attach interrupts to those pins. Finally, we configure the touchpad as a wakeup source, and then go into deep sleep.
Now upload the example sketch to your ESP 32. Make sure you have the right boat and comport selected. Open the serial monitor at about rate of 115200. Connect a female to male jumper wire on the GPIO 15 and then press the GPIO pin 15 and watch the ESP 30 to wake up from deep sleep. Summary In this video, we have covered the following topics how to write a deep sleep sketch, the wakeup sources of deep sleep for the ESP 32 implementation of timer wakeup and touchpad wakeup. In the next video, we will learn in detail about the two ways of external wake up from deep sleep The sparkfun ESP 32 thing