#pragma once #include #if defined(ARDUINO_ARCH_ESP32) #include "esp_system.h" #endif static inline const char* resetReasonToString(esp_reset_reason_t reason) { switch (reason) { case ESP_RST_POWERON: return "Power-on reset"; case ESP_RST_EXT: return "External reset (EN pin)"; case ESP_RST_SW: return "Software reset"; case ESP_RST_PANIC: return "Panic / crash"; case ESP_RST_INT_WDT: return "Interrupt watchdog"; case ESP_RST_TASK_WDT: return "Task watchdog"; case ESP_RST_WDT: return "Other watchdog"; case ESP_RST_DEEPSLEEP: return "Wake from deep sleep"; case ESP_RST_BROWNOUT: return "Brownout reset"; case ESP_RST_SDIO: return "SDIO reset"; default: return "Unknown"; } } static inline void printBoardInfo() { Serial.println(); Serial.println("=== Firmware Info ==="); Serial.print("Program file: "); Serial.print(PROJECT_DIR); Serial.print("/"); Serial.println(__BASE_FILE__); Serial.print("Compile Date: "); Serial.print(__DATE__); Serial.print(" "); Serial.println(__TIME__); Serial.print("Included File: "); Serial.println(__FILE__); #if defined(PIOENV) Serial.print("PIO Env: "); Serial.println(PIOENV); #endif Serial.print("Uptime: "); Serial.print(millis()); Serial.println(" ms"); #if defined(ARDUINO_ARCH_ESP32) Serial.print("Chip: "); Serial.println(ESP.getChipModel()); Serial.print("Rev: "); Serial.println(ESP.getChipRevision()); Serial.print("CPU: "); Serial.print(ESP.getCpuFreqMHz()); Serial.println(" MHz"); Serial.print("Heap free: "); Serial.println(ESP.getFreeHeap()); Serial.print("PSRAM size: "); Serial.println(ESP.getPsramSize()); Serial.print("Last Reset reason: "); Serial.println(resetReasonToString(esp_reset_reason())); #endif Serial.println("====================="); Serial.println("waiting 5 seconds for you to note details"); delay(5000); Serial.println("====================="); }