Skip to content

Commit f31adbb

Browse files
authored
Create esp32sleeptimer.md
sleep after 2 hours
1 parent 07c6a95 commit f31adbb

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
To make the ESP32 sleep for a specified amount of time, you can use the `esp_sleep_enable_timer_wakeup()` function provided by the ESP32 SDK. Here's an example of how you can put the ESP32 into sleep mode for a specific duration:
2+
3+
```cpp
4+
#include <esp_sleep.h>
5+
6+
void setup() {
7+
// Initialize your setup code here
8+
9+
// Enable deep sleep
10+
esp_sleep_enable_timer_wakeup(timeInSeconds * 1000000); // Set sleep time in microseconds
11+
esp_deep_sleep_start();
12+
}
13+
14+
void loop() {
15+
// This code will not be executed as the ESP32 is in sleep mode
16+
}
17+
```
18+
19+
In the `setup()` function, you need to call `esp_sleep_enable_timer_wakeup()` and provide the sleep duration in microseconds. You can convert the desired sleep duration from minutes to microseconds by multiplying it by 60 and 1000000. For example, if you want to sleep for 5 minutes, you would use `esp_sleep_enable_timer_wakeup(5 * 60 * 1000000)`.
20+
21+
After enabling the timer wakeup, you can call `esp_deep_sleep_start()` to put the ESP32 into deep sleep mode. The ESP32 will sleep for the specified duration and then wake up automatically.
22+
23+
Note that in deep sleep mode, the ESP32 consumes very low power, making it suitable for power-constrained applications. However, keep in mind that during deep sleep, the program execution is halted, and all the states are lost. So, any ongoing operations or data in RAM will be lost when the ESP32 wakes up from sleep.
24+
25+
------------------------------------
26+
27+
To put the ESP32 into sleep mode after a specific duration using `millis()`, you can modify the code as follows:
28+
29+
```cpp
30+
#include <esp_sleep.h>
31+
32+
const unsigned long sleepDuration = 2 * 60 * 60 * 1000; // Sleep duration in milliseconds (2 hours)
33+
unsigned long startTime;
34+
35+
void setup() {
36+
// Initialize your setup code here
37+
startTime = millis(); // Record the current time
38+
}
39+
40+
void loop() {
41+
unsigned long currentTime = millis();
42+
43+
// Check if the desired sleep duration has elapsed
44+
if (currentTime - startTime >= sleepDuration) {
45+
// Enable deep sleep
46+
esp_sleep_enable_timer_wakeup(sleepDuration * 1000); // Convert to microseconds
47+
48+
// Put the ESP32 into deep sleep mode
49+
esp_deep_sleep_start();
50+
}
51+
52+
// Your regular loop code here
53+
// ...
54+
}
55+
```
56+
57+
In this example, we define a constant `sleepDuration` which represents the desired sleep duration in milliseconds (2 hours in this case). In the `setup()` function, we record the current time using `millis()` and store it in the `startTime` variable.
58+
59+
In the `loop()` function, we continuously check if the elapsed time since the `startTime` is equal to or greater than the `sleepDuration`. If the condition is true, we enable deep sleep using `esp_sleep_enable_timer_wakeup()` and pass the sleep duration in microseconds (converted from milliseconds).
60+
61+
Finally, we call `esp_deep_sleep_start()` to put the ESP32 into deep sleep mode. The ESP32 will sleep for the specified duration and then automatically wake up.
62+
63+
Note that `millis()` returns the number of milliseconds since the ESP32 started running, so it will continue to increment even during sleep mode. Therefore, when the ESP32 wakes up, the `currentTime - startTime` condition will evaluate to true, and it will go back to sleep if the desired sleep duration hasn't passed.

0 commit comments

Comments
 (0)