From 20db2ee421f5bba2d1dd6aaab7b3442e498f7cdd Mon Sep 17 00:00:00 2001 From: me-no-dev Date: Thu, 14 Dec 2017 21:13:42 +0100 Subject: [PATCH] Add Time and TimerWDT examples --- .../examples/Time/SimpleTime/SimpleTime.ino | 47 +++++++++++++++++++ .../Timer/WatchdogTimer/WatchdogTimer.ino | 39 +++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino create mode 100644 libraries/ESP32/examples/Timer/WatchdogTimer/WatchdogTimer.ino diff --git a/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino b/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino new file mode 100644 index 00000000..988c2a4d --- /dev/null +++ b/libraries/ESP32/examples/Time/SimpleTime/SimpleTime.ino @@ -0,0 +1,47 @@ +#include +#include "time.h" + +const char* ssid = "YOUR_SSID"; +const char* password = "YOUR_PASS"; + +const char* ntpServer = "pool.ntp.org"; +const long gmtOffset_sec = 3600; +const int daylightOffset_sec = 3600; + +void printLocalTime() +{ + struct tm timeinfo; + if(!getLocalTime(&timeinfo)){ + Serial.println("Failed to obtain time"); + return; + } + Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S"); +} + +void setup() +{ + Serial.begin(115200); + + //connect to WiFi + Serial.printf("Connecting to %s ", ssid); + WiFi.begin(ssid, password); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(" CONNECTED"); + + //init and get the time + configTime(gmtOffset_sec, daylightOffset_sec, ntpServer); + printLocalTime(); + + //disconnect WiFi as it's no longer needed + WiFi.disconnect(true); + WiFi.mode(WIFI_OFF); +} + +void loop() +{ + delay(1000); + printLocalTime(); +} diff --git a/libraries/ESP32/examples/Timer/WatchdogTimer/WatchdogTimer.ino b/libraries/ESP32/examples/Timer/WatchdogTimer/WatchdogTimer.ino new file mode 100644 index 00000000..bfe4a9f0 --- /dev/null +++ b/libraries/ESP32/examples/Timer/WatchdogTimer/WatchdogTimer.ino @@ -0,0 +1,39 @@ +#include "esp_system.h" + +const int button = 0; //gpio to use to trigger delay +const int wdtTimeout = 3000; //time in ms to trigger the watchdog +hw_timer_t *timer = NULL; + +void IRAM_ATTR resetModule() { + ets_printf("reboot\n"); + esp_restart_noos(); +} + +void setup() { + Serial.begin(115200); + Serial.println(); + Serial.println("running setup"); + + pinMode(button, INPUT_PULLUP); //init control pin + timer = timerBegin(0, 80, true); //timer 0, div 80 + timerAttachInterrupt(timer, &resetModule, true); //attach callback + timerAlarmWrite(timer, wdtTimeout * 1000, false); //set time in us + timerAlarmEnable(timer); //enable interrupt +} + +void loop() { + Serial.println("running main loop"); + + timerWrite(timer, 0); //reset timer (feed watchdog) + long loopTime = millis(); + //while button is pressed, delay up to 3 seconds to trigger the timer + while (!digitalRead(button)) { + Serial.println("button pressed"); + delay(500); + } + delay(1000); //simulate work + loopTime = millis() - loopTime; + + Serial.print("loop time is = "); + Serial.println(loopTime); //should be under 3000 +}