{"id":84115,"date":"2024-10-08T09:18:37","date_gmt":"2024-10-08T09:18:37","guid":{"rendered":"https:\/\/randomnerdtutorials.com\/?p=84115"},"modified":"2024-10-12T10:00:25","modified_gmt":"2024-10-12T10:00:25","slug":"esp32-timer-wake-up-deep-sleep","status":"publish","type":"post","link":"https:\/\/randomnerdtutorials.com\/esp32-timer-wake-up-deep-sleep\/","title":{"rendered":"ESP32 Timer Wake Up from Deep Sleep"},"content":{"rendered":"\n<p>This tutorial shows how to put the ESP32 in deep sleep mode and wake it up with a timer after a predetermined amount of time. The ESP32 will be programmed with Arduino IDE.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?resize=1024%2C576&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"ESP32 Timer Wake Up from Deep Sleep\" class=\"wp-image-162950\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?resize=1024%2C576&amp;quality=100&amp;strip=all&amp;ssl=1 1024w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?resize=300%2C169&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?resize=768%2C432&amp;quality=100&amp;strip=all&amp;ssl=1 768w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?resize=1536%2C864&amp;quality=100&amp;strip=all&amp;ssl=1 1536w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?w=1920&amp;quality=100&amp;strip=all&amp;ssl=1 1920w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<p class=\"rntbox rntclgray\"><em>Updated 8 October 2024.<\/em><\/p>\n\n\n\n<p>To learn more about deep sleep and other wake-up sources, you can follow the next tutorials:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-deep-sleep-arduino-ide-wake-up-sources\/\"><strong>[Complete Guide]<\/strong> ESP32 Deep Sleep with Arduino IDE and Wake Up Sources<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-external-wake-up-deep-sleep\/\">ESP32 External Wake Up from Deep Sleep<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-touch-wake-up-deep-sleep\/\">ESP32 Touch Wake Up from Deep Sleep<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mce_0\">Writing a Deep Sleep Sketch<\/h2>\n\n\n\n<p>To write a sketch to put your ESP32 into deep sleep mode, and then wake it up, you need to:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>First, configure the wake-up sources. This means configuring what will wake up the ESP32. You can use one or combine more than one wake-up source. This article shows you how to use the timer wake-up. Use the <span class=\"rnthl rntliteral\">esp_sleep_enable_timer_wakeup()<\/span> function and pass as argument time sleep time in microseconds.<\/li>\n\n\n\n<li>You can decide what peripherals to shut down or keep on during deep sleep. However, by default, the ESP32 automatically powers down the peripherals that are not needed with the wake up source you define.<\/li>\n\n\n\n<li>Finally, you use the <span class=\"rnthl rntliteral\">esp_deep_sleep_start()<\/span> function to put your ESP32 into deep sleep mode.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Timer Wake Up<\/h2>\n\n\n\n<p>The ESP32 can go into deep sleep mode, and then wake up at predefined periods of time. This feature is handy if you are running projects that require time stamping or daily tasks while maintaining low power consumption.<\/p>\n\n\n<div class=\"wp-block-image is-resized\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/02\/timer-wake-up.png?resize=300%2C300&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"Timer Wake Up\" class=\"wp-image-81689\" style=\"width:182px;height:auto\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/02\/timer-wake-up.png?w=300&amp;quality=100&amp;strip=all&amp;ssl=1 300w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/02\/timer-wake-up.png?resize=150%2C150&amp;quality=100&amp;strip=all&amp;ssl=1 150w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/02\/timer-wake-up.png?resize=80%2C80&amp;quality=100&amp;strip=all&amp;ssl=1 80w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/02\/timer-wake-up.png?resize=220%2C220&amp;quality=100&amp;strip=all&amp;ssl=1 220w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/figure><\/div>\n\n\n<p>The ESP32 RTC controller has a built-in timer you can use to wake up the ESP32 after a predefined amount of time.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Enable Timer Wake Up<\/h3>\n\n\n\n<p>Enabling the ESP32 to wake up after a predefined time is very straightforward. In the Arduino IDE, you just need to specify the sleep time in microseconds in the following function:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>esp_sleep_enable_timer_wakeup(time_in_us)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Code<\/h3>\n\n\n\n<p>To program the ESP32 we\u2019ll use Arduino IDE. So, you need to make sure you have the ESP32 core installed. Follow the next tutorial if you haven&#8217;t already:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/installing-esp32-arduino-ide-2-0\/\" title=\"\">Installing ESP32 Board in Arduino IDE 2 (Windows, Mac OS X, Linux)<\/a><\/li>\n<\/ul>\n\n\n\n<p>Let\u2019s see how deep sleep with timer wake-up works using an example from the ESP32 Arduino core. Open your Arduino IDE, and go to <strong>File<\/strong> &gt; <strong>Examples<\/strong> &gt; <strong>ESP32<\/strong> &gt; <strong>Deep Sleep<\/strong>, and&nbsp;open the <strong>TimerWakeUp<\/strong> sketch.<\/p>\n\n\n<pre style=\"max-height: 40em; margin-bottom: 20px;\"><code class=\"language-c\">\/*\nSimple Deep Sleep with Timer Wake Up\n=====================================\nESP32 offers a deep sleep mode for effective power\nsaving as power is an important factor for IoT\napplications. In this mode CPUs, most of the RAM,\nand all the digital peripherals which are clocked\nfrom APB_CLK are powered off. The only parts of\nthe chip which can still be powered on are:\nRTC controller, RTC peripherals ,and RTC memories\n\nThis code displays the most basic deep sleep with\na timer to wake it up and how to store data in\nRTC memory to use it over reboots\n\nThis code is under Public Domain License.\n\nAuthor:\nPranav Cherukupalli &lt;cherukupallip@gmail.com&gt;\n*\/\n\n#define uS_TO_S_FACTOR 1000000ULL \/* Conversion factor for micro seconds to seconds *\/\n#define TIME_TO_SLEEP  5          \/* Time ESP32 will go to sleep (in seconds) *\/\n\nRTC_DATA_ATTR int bootCount = 0;\n\n\/*\nMethod to print the reason by which ESP32\nhas been awaken from sleep\n*\/\nvoid print_wakeup_reason() {\n  esp_sleep_wakeup_cause_t wakeup_reason;\n\n  wakeup_reason = esp_sleep_get_wakeup_cause();\n\n  switch (wakeup_reason) {\n    case ESP_SLEEP_WAKEUP_EXT0:     Serial.println(&quot;Wakeup caused by external signal using RTC_IO&quot;); break;\n    case ESP_SLEEP_WAKEUP_EXT1:     Serial.println(&quot;Wakeup caused by external signal using RTC_CNTL&quot;); break;\n    case ESP_SLEEP_WAKEUP_TIMER:    Serial.println(&quot;Wakeup caused by timer&quot;); break;\n    case ESP_SLEEP_WAKEUP_TOUCHPAD: Serial.println(&quot;Wakeup caused by touchpad&quot;); break;\n    case ESP_SLEEP_WAKEUP_ULP:      Serial.println(&quot;Wakeup caused by ULP program&quot;); break;\n    default:                        Serial.printf(&quot;Wakeup was not caused by deep sleep: %d\\n&quot;, wakeup_reason); break;\n  }\n}\n\nvoid setup() {\n  Serial.begin(115200);\n  delay(1000);  \/\/Take some time to open up the Serial Monitor\n\n  \/\/Increment boot number and print it every reboot\n  ++bootCount;\n  Serial.println(&quot;Boot number: &quot; + String(bootCount));\n\n  \/\/Print the wakeup reason for ESP32\n  print_wakeup_reason();\n\n  \/*\n  First we configure the wake up source\n  We set our ESP32 to wake up every 5 seconds\n  *\/\n  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);\n  Serial.println(&quot;Setup ESP32 to sleep for every &quot; + String(TIME_TO_SLEEP) + &quot; Seconds&quot;);\n\n  \/*\n  Next we decide what all peripherals to shut down\/keep on\n  By default, ESP32 will automatically power down the peripherals\n  not needed by the wakeup source, but if you want to be a poweruser\n  this is for you. Read in detail at the API docs\n  http:\/\/esp-idf.readthedocs.io\/en\/latest\/api-reference\/system\/deep_sleep.html\n  Left the line commented as an example of how to configure peripherals.\n  The line below turns off all RTC peripherals in deep sleep.\n  *\/\n  \/\/esp_deep_sleep_pd_config(ESP_PD_DOMAIN_RTC_PERIPH, ESP_PD_OPTION_OFF);\n  \/\/Serial.println(&quot;Configured all RTC Peripherals to be powered down in sleep&quot;);\n\n  \/*\n  Now that we have setup a wake cause and if needed setup the\n  peripherals state in deep sleep, we can now start going to\n  deep sleep.\n  In the case that no wake up sources were provided but deep\n  sleep was started, it will sleep forever unless hardware\n  reset occurs.\n  *\/\n  Serial.println(&quot;Going to sleep now&quot;);\n  Serial.flush();\n  esp_deep_sleep_start();\n  Serial.println(&quot;This will never be printed&quot;);\n}\n\nvoid loop() {\n  \/\/This is not going to be called\n}\n<\/code><\/pre>\n\t<p style=\"text-align:center\"><a class=\"rntwhite\" href=\"https:\/\/github.com\/RuiSantosdotme\/Learn-ESP32-eBook\/raw\/main\/Module_4\/4_2_timer_wake_up\/4_2_timer_wake_up.ino\" target=\"_blank\">View raw code<\/a><\/p>\n\n\n\n<p>Let\u2019s take a look at this code. The first comment describes what is powered off during deep sleep with timer wake up.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">In this mode CPUs, most of the RAM,\nand all the digital peripherals which are clocked\nfrom APB_CLK are powered off. The only parts of\nthe chip which can still be powered on are:\nRTC controller, RTC peripherals ,and RTC memories<\/pre>\n\n\n\n<p>When you use timer wake-up, the parts that will be powered on are RTC controller, RTC peripherals, and RTC memories.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Define the Sleep Time<\/h3>\n\n\n\n<p>These first two lines of code define the period of time the ESP32 will be sleeping.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>#define uS_TO_S_FACTOR 1000000ULL \/* Conversion factor for micro seconds to seconds *\/\n#define TIME_TO_SLEEP  5          \/* Time ESP32 will go to sleep (in seconds) *\/<\/code><\/pre>\n\n\n\n<p>This example uses a conversion factor from microseconds to seconds, so that you can set the sleep time in the <span class=\"rnthl rntliteral\">TIME_TO_SLEEP<\/span> variable in seconds. In this case, the example will put the ESP32 into deep sleep mode for 5 seconds.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Save Data on RTC Memories<\/h3>\n\n\n\n<p>With the ESP32, you can save data on the RTC memories. The ESP32 has 8kB SRAM on the RTC part, called RTC fast memory. The data saved here is not erased during deep sleep. However, it is erased when you press the reset button (the button labeled EN on the ESP32 board).<\/p>\n\n\n\n<p>To save data on the RTC memory, you just have to add <span class=\"rnthl rntliteral\">RTC_DATA_ATTR<\/span> before a variable definition. The example saves the <span class=\"rnthl rntliteral\">bootCount<\/span> variable on the RTC memory. This variable will count how many times the ESP32 has woken up from deep sleep.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>RTC_DATA_ATTR int bootCount = 0;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Wake Up Reason<\/h3>\n\n\n\n<p>Then, the code defines the <span class=\"rnthl rntliteral\">print_wakeup_reason()<\/span> function, that prints the source that caused the wake-up from deep sleep.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>void print_wakeup_reason() {\n  esp_sleep_wakeup_cause_t wakeup_reason;\n\n  wakeup_reason = esp_sleep_get_wakeup_cause();\n\n  switch (wakeup_reason) {\n    case ESP_SLEEP_WAKEUP_EXT0:     Serial.println(\"Wakeup caused by external signal using RTC_IO\"); break;\n    case ESP_SLEEP_WAKEUP_EXT1:     Serial.println(\"Wakeup caused by external signal using RTC_CNTL\"); break;\n    case ESP_SLEEP_WAKEUP_TIMER:    Serial.println(\"Wakeup caused by timer\"); break;\n    case ESP_SLEEP_WAKEUP_TOUCHPAD: Serial.println(\"Wakeup caused by touchpad\"); break;\n    case ESP_SLEEP_WAKEUP_ULP:      Serial.println(\"Wakeup caused by ULP program\"); break;\n    default:                        Serial.printf(\"Wakeup was not caused by deep sleep: %d\\n\", wakeup_reason); break;\n  }\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">The setup()<\/h3>\n\n\n\n<p>In the <span class=\"rnthl rntliteral\">setup()<\/span> is where you should put your code. You need to write all the instructions before calling the <span class=\"rnthl rntliteral\">esp_deep_sleep_start()<\/span> function.<\/p>\n\n\n\n<p>This example starts by initializing the serial communication at a baud rate of 115200.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>Serial.begin(115200);<\/code><\/pre>\n\n\n\n<p>Then, the <span class=\"rnthl rntliteral\">bootCount<\/span> variable is increased by one in every reboot, and that number is printed in the serial monitor.<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>++bootCount;\nSerial.println(\"Boot number: \" + String(bootCount));<\/code><\/pre>\n\n\n\n<p>Then, the code calls the <span class=\"rnthl rntliteral\">print_wakeup_reason()<\/span> function, but you can call any function you want to perform a desired task. For example, you may want to wake up your ESP32 once a day to read a value from a sensor.<\/p>\n\n\n\n<p>Next, the code defines the wake-up source by using the following function:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>esp_sleep_enable_timer_wakeup(time_in_us)<\/code><\/pre>\n\n\n\n<p>This function accepts as argument the time to sleep in microseconds as we&#8217;ve seen previously. In our case, we have the following:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);<\/code><\/pre>\n\n\n\n<p>Then, after all the tasks are performed, the ESP32 goes to sleep by calling the following function:<\/p>\n\n\n\n<pre class=\"wp-block-code language-c\"><code>esp_deep_sleep_start()<\/code><\/pre>\n\n\n\n<p>As soon as you call the <span class=\"rnthl rntliteral\">esp_deep_sleep_start()<\/span> function, the ESP32 will go to sleep and will not run any code written after this function. When it wakes up from deep sleep, it will run the code from the beginning.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">loop()<\/h3>\n\n\n\n<p>The <span class=\"rnthl rntliteral\">loop()<\/span> section is empty because the ESP32 will sleep before reaching this part of the code. So, you need to write all your tasks in the <span class=\"rnthl rntliteral\">setup()<\/span> before calling the <span class=\"rnthl rntliteral\">esp_deep_sleep_start()<\/span> function.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Testing the Timer Wake-Up<\/h3>\n\n\n\n<p>Upload the example sketch to your ESP32. Make sure you have the right board and COM port selected. Open the Serial Monitor at a baud rate of 115200.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/02\/serial-monitor-logo-arduino-ide-2.png?quality=100&#038;strip=all&#038;ssl=1\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"41\" height=\"39\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2024\/02\/serial-monitor-logo-arduino-ide-2.png?resize=41%2C39&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"\" class=\"wp-image-148549\"\/><\/a><\/figure><\/div>\n\n\n<p>Every 5 seconds, the ESP32 wakes up, prints a message on the serial monitor, and goes to deep sleep again.<\/p>\n\n\n\n<p>Every time the ESP32 wakes up, the <span class=\"rnthl rntliteral\">bootCount<\/span> variable increases. It also prints the wake-up reason as shown in the figure below.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"755\" height=\"612\" src=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32_timer_wake-up_demonstration.png?resize=755%2C612&#038;quality=100&#038;strip=all&#038;ssl=1\" alt=\"ESP32 Timer Wake-Up Demonstration\" class=\"wp-image-162947\" srcset=\"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32_timer_wake-up_demonstration.png?w=755&amp;quality=100&amp;strip=all&amp;ssl=1 755w, https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32_timer_wake-up_demonstration.png?resize=300%2C243&amp;quality=100&amp;strip=all&amp;ssl=1 300w\" sizes=\"(max-width: 755px) 100vw, 755px\" \/><\/figure><\/div>\n\n\n<p>However, notice that if you press the EN button on the ESP32 board, it resets the <span class=\"rnthl rntliteral\">bootCount<\/span> to <span class=\"rnthl rntliteral\">1<\/span> again.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n\n\n<p>In summary, we\u2019ve shown you how to use the timer wake-up source to wake-up the ESP32 in this unit.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To enable the timer wake-up, you use the <span class=\"rnthl rntliteral\">esp_sleep_enable_timer_wakeup(time_in_us)<\/span> function;<\/li>\n\n\n\n<li>Use the <span class=\"rnthl rntliteral\">esp_deep_sleep_start()<\/span> function to start deep sleep.<\/li>\n<\/ul>\n\n\n\n<p>You can modify the provided example, and instead of printing a message, you can make your ESP32 do any other task. <\/p>\n\n\n\n<p>The timer wake-up is useful to perform periodic tasks with the ESP32 without draining much power, as we do in the following projects:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-data-logging-temperature-to-microsd-card\/\">ESP32 Data Logging Temperature to MicroSD Card<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/randomnerdtutorials.com\/esp32-esp8266-publish-sensor-readings-to-google-sheets\/\">ESP32 Publish Sensor Readings to Google Sheets<\/a><\/li>\n<\/ul>\n\n\n\n<p>Finally, we also have a tutorial about deep sleep with the ESP8266 that you might be interested in: <a href=\"https:\/\/randomnerdtutorials.com\/esp8266-deep-sleep-with-arduino-ide\/\">ESP8266 Deep Sleep with Arduino IDE<\/a>.<\/p>\n\n\n\n<p class=\"rntbox rntclgray\">This is an excerpt from our course: <a href=\"https:\/\/randomnerdtutorials.com\/learn-esp32-with-arduino-ide\/\">Learn ESP32 with Arduino IDE<\/a>. If you like ESP32 and you want to learn more, we recommend enrolling in&nbsp;<a href=\"https:\/\/randomnerdtutorials.com\/learn-esp32-with-arduino-ide\/\">Learn ESP32 with Arduino IDE course<\/a>.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to put the ESP32 in deep sleep mode and wake it up with a timer after a predetermined amount of time. The ESP32 will be programmed &#8230; <\/p>\n<p class=\"read-more-container\"><a title=\"ESP32 Timer Wake Up from Deep Sleep\" class=\"read-more button\" href=\"https:\/\/randomnerdtutorials.com\/esp32-timer-wake-up-deep-sleep\/#more-84115\" aria-label=\"Read more about ESP32 Timer Wake Up from Deep Sleep\">CONTINUE READING \u00bb<\/a><\/p>\n","protected":false},"author":5,"featured_media":162950,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[276,277,299,230],"tags":[],"class_list":["post-84115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-esp32","category-esp32-arduino-ide","category-0-esp32","category-guide"],"aioseo_notices":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/randomnerdtutorials.com\/wp-content\/uploads\/2019\/04\/ESP32-Deep-Sleep-Timer-Wake-Up.jpg?fit=1920%2C1080&quality=100&strip=all&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/84115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/comments?post=84115"}],"version-history":[{"count":4,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/84115\/revisions"}],"predecessor-version":[{"id":163138,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/posts\/84115\/revisions\/163138"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media\/162950"}],"wp:attachment":[{"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/media?parent=84115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/categories?post=84115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/randomnerdtutorials.com\/wp-json\/wp\/v2\/tags?post=84115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}