ESP32 Watchdog
from https://github.com/espressif/arduino-esp32/blob/master/libraries/ESP32/examples/Timer/WatchdogTimer/WatchdogTimer.ino
#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(); | |
} | |
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 | |
} |
Well done, bro!
回覆刪除