Kennt ein Sensor nach Wochen plötzlich keine Meldung mehr, zeigt sich erst im Log, ob ein Watchdog den Neustart erzwungen hat. Wer ihn nicht kennt, dreht bei jedem Hänger die Stromversorgung von Hand.
Ein Watchdog ist ein Zähler, den die laufende Firmware (das Programm auf dem Chip) regelmäßig zurücksetzen muss; bleibt das aus, löst der Chip einen Reset aus. Er ist ein eigener, von der Firmware unabhängiger Schaltungsteil und zählt wie ein Timer von einem Startwert gegen null. Nur der regelmäßige Aufruf eines Zurücksetz-Befehls lädt den Zähler wieder auf.
Am Arduino Uno aktiviert die avr/wdt.h-Bibliothek den Watchdog des ATmega328P, mit bis zu 8 Sekunden Timeout. Beim ESP32 konfiguriert man den Task-Watchdog mit esp_task_wdt_init, ein Task (Programmteil) meldet sich mit esp_task_wdt_add an und bedient ihn mit esp_task_wdt_reset. Der Befehl gehört ans Ende der Hauptschleife, denn nur dort ist bewiesen, dass der Durchlauf hängenfrei war. Nach einem Neustart liefert der ESP32 den Grund über esp_reset_reason, etwa Watchdog oder Brownout (Reset bei zu niedriger Versorgungsspannung); dieser Grund gehört ins Log.
Verwechselt wird der Watchdog gern mit einem Einschalten. Tatsächlich ist er eine Rückkehr in einen definierten Startzustand, ohne dass jemand die Stromversorgung unterbrechen muss. Vor dem Aktivieren muss die Initialisierung durchlaufen sein, sonst löst ein langsamer WLAN-Verbindungsaufbau den Timeout schon vor der Hauptschleife aus.
Der Watchdog ist keine Fehlerbehebung, sondern ein Zurückversetzen in einen definierten Zustand. Die eigentliche Fehlersuche beginnt mit dem Reset-Grund im Log.
📌 Zähler gegen null · Zurücksetzen in der Hauptschleife · Reset-Grund im Log
📚 IoT von Grund auf · Tag 4 von 30
#esp32 #Mikrocontroller #firmware