#include "WiFi.h"
#include "esp_sleep.h"
#include "driver/gpio.h"
// # define WIFI_SMART_CONFIG
# define WIFI_SSID "Wokwi-GUEST"
# define WIFI_PW ""
# define PIN_ALARM_INTERRUPT GPIO_NUM_19
# define PIN_ALARM_INT_MODE GPIO_INTR_LOW_LEVEL
void initWifiSmartConfig() {
/* Set ESP32 to WiFi Station mode */
WiFi.mode(WIFI_AP_STA);
/* start SmartConfig */
WiFi.beginSmartConfig();
/* Wait for SmartConfig packet from mobile */
Serial.println("Waiting for SmartConfig.");
while (!WiFi.smartConfigDone()) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("SmartConfig done.");
/* Wait for WiFi to connect to AP */
Serial.println("Waiting for WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi Connected.");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
}
void initWifiHardCode() {
WiFi.begin(WIFI_SSID, WIFI_PW, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
//Function that prints the reason by which ESP32 has been awaken from sleep
void print_wakeup_reason(){
esp_sleep_wakeup_cause_t wakeup_reason;
wakeup_reason = esp_sleep_get_wakeup_cause();
switch(wakeup_reason)
{
case 1 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
case 2 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
case 3 : Serial.println("Wakeup caused by timer"); break;
case 4 : Serial.println("Wakeup caused by touchpad"); break;
case 5 : Serial.println("Wakeup caused by ULP program"); break;
default : Serial.println("Wakeup was not caused by deep sleep"); break;
}
}
void setup() {
Serial.begin(115200);
print_wakeup_reason();
ESP_ERROR_CHECK(rtc_gpio_isolate(PIN_ALARM_INTERRUPT));
ESP_ERROR_CHECK(gpio_wakeup_enable(PIN_ALARM_INTERRUPT, PIN_ALARM_INT_MODE));
ESP_ERROR_CHECK(esp_sleep_enable_gpio_wakeup(PIN_ALARM_INTERRUPT, PIN_ALARM_INT_MODE));
#ifdef WIFI_SMART_CONFIG
initWifiSmartConfig();
#else
initWifiHardCode();
#endif
Serial.println("Going to sleep now");
esp_deep_sleep_start();
Serial.println("This will never be printed");
}
void loop() {
}