Here is part of ESP32 with DHT11 deep sleep guide explaining the basic behind code. Our DOIT ESP32 board (which we commonly use in examples on this website), not energy efficient for deep sleep. However, it works. We already can connect normal Arduino UNO with DHT 11, with ESP32 Arduino and also we can use the setup to send data to IBM Watson IoT.
ESP32 offers us deep sleep mode for power saving. Power saving is an important factor for IoT applications and saving power we can make an IoT project running with two AA batteries for a year. Deep Sleep is of the CPUs and most of the RAM and peripherals which are clocked from APB_CLK
are powered off. The RTC controller, RTC peripherals and RTC memories are parts of the chip which can kept powered on. So, we must remember that both Wi-Fi and Bluetooth are powered off. However, the chip will store Wi-Fi and Bluetooth connection data in the RTC memory (RTC_DATA_ATTR
attribute). If we want to store it into the RTC memory then we will define a global variable like RTC_DATA_ATTR int bootCount = 0;
. ESP32 has different power modes such as Active mode, Modem Sleep mode, Light Sleep mode, Deep Sleep mode and Hibernation mode. These five modes can be found on ESP32 Espressif datasheet. Deep Sleep is to put in sleep and we have different modes to wake it up such as timer wake up, touch wake up, and external wake up. In our earlier guide, we have shown a two LED timer guide for demonstration of deep sleep :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | #define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */ #define TIME_TO_SLEEP 900 /* Time ESP32 will go to sleep for 15 minutes (in seconds) */ #define TIME_TO_SLEEP_ERROR 3600 /* Time to sleep in case of error (1 hour) */ RTC_DATA_ATTR int bootCount = 0; int GREEN_LED_PIN = 25; int YELLOW_LED_PIN = 26; void setup(){ pinMode(GREEN_LED_PIN,OUTPUT); pinMode(YELLOW_LED_PIN,OUTPUT); delay(500); if(bootCount == 0) //Run this only the first time { digitalWrite(YELLOW_LED_PIN,HIGH); bootCount = bootCount+1; }else { digitalWrite(GREEN_LED_PIN,HIGH); } delay(3000); digitalWrite(GREEN_LED_PIN,LOW); digitalWrite(YELLOW_LED_PIN,LOW); esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); esp_deep_sleep_start(); } void loop(){ } |
From our previous code to connect ESP32 with DHT11, we can modify the code :
---
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | // copyright thecustomizewindows.com ; abhishek ghosh // add <Adafruit_Sensor.h>, <DHT.h> and <DHT_U.h> #define uS_TO_S_FACTOR 1000000 /* Conversion factor for micro seconds to seconds */ #define TIME_TO_SLEEP 3 /* Time ESP32 will go to sleep (in seconds) */ RTC_DATA_ATTR int bootCount = 0; #include <Adafruit_Sensor.h> #include <DHT.h> #include <DHT_U.h> #define DHTPIN 15 // Pin which is connected to the DHT sensor. // type the model of sensor in use, we are using DHT 11, if you are using DHT 21 or DHT 22 change it #define DHTTYPE DHT11 DHT_Unified dht(DHTPIN, DHTTYPE); uint32_t delayMS; void setup() { Serial.begin(9600); dht.begin(); Serial.println("Modified Temperature, Humidity Serial Monitor Example"); sensor_t sensor; dht.temperature().getSensor(&sensor); dht.humidity().getSensor(&sensor); delayMS = sensor.min_delay / 1000; delay(delayMS); sensors_event_t event; dht.temperature().getEvent(&event); if (isnan(event.temperature)) { Serial.println("Error reading temperature!"); } else { Serial.print("Temperature: "); Serial.print(event.temperature); Serial.println(" *C"); } dht.humidity().getEvent(&event); if (isnan(event.relative_humidity)) { Serial.println("Error reading humidity!"); } else { Serial.print("Humidity: "); Serial.print(event.relative_humidity); Serial.println("%"); } esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR); //go to sleep Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + " Seconds"); Serial.println("Going to sleep as normal now."); esp_deep_sleep_start(); } void loop() { } |
In second part we will connect it with cloud IoT service.
Tagged With dht11 sleep , esp dht deep sleep , deep sleep dht11 , esp 32 dht 11 deep sleep