From 73275af580c5dcdfcb8348e7ac57c575d3d6f6cc Mon Sep 17 00:00:00 2001 From: Davide Perini Date: Mon, 10 Nov 2025 09:51:24 +0100 Subject: [PATCH 1/4] Core 3 --- src/BootstrapManager.cpp | 12 ++++++++++-- src/EthManager.cpp | 40 ++++++++++++++++++++++++++-------------- src/EthManager.h | 2 ++ src/WifiManager.cpp | 7 ++++++- src/WifiManager.h | 1 + 5 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/BootstrapManager.cpp b/src/BootstrapManager.cpp index 23b826c..611d4d1 100644 --- a/src/BootstrapManager.cpp +++ b/src/BootstrapManager.cpp @@ -51,7 +51,11 @@ void BootstrapManager::bootstrapSetup(void (*manageDisconnections)(), void (*man launchWebServerForOTAConfig(); } #if defined(ARDUINO_ARCH_ESP32) - esp_task_wdt_init(3000, true); //enable panic so ESP32 restarts + esp_task_wdt_config_t twdt_config = { + .timeout_ms = 3000, // TODO 3000 + .trigger_panic = true, + }; + esp_task_wdt_init(&twdt_config); //enable panic so ESP32 restarts esp_task_wdt_add(NULL); //add current thread to WDT watch #endif #if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 @@ -110,7 +114,11 @@ void BootstrapManager::bootstrapSetup(void (*manageDisconnections)(), void (*man #endif } #if defined(ARDUINO_ARCH_ESP32) - esp_task_wdt_init(3000, true); //enable panic so ESP32 restarts + esp_task_wdt_config_t twdt_config = { + .timeout_ms = 3000, // TODO 3000 + .trigger_panic = true, + }; + esp_task_wdt_init(&twdt_config); //enable panic so ESP32 restarts esp_task_wdt_add(NULL); //add current thread to WDT watch #endif #if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 diff --git a/src/EthManager.cpp b/src/EthManager.cpp index 41dcbd3..4b94ed5 100644 --- a/src/EthManager.cpp +++ b/src/EthManager.cpp @@ -27,9 +27,9 @@ const ethernet_config ethernetDevices[] = { // No Ethernet { }, +#if CONFIG_IDF_TARGET_ESP32 // QuinLed-ESP32-Ethernet { - 0, 5, 23, @@ -102,6 +102,11 @@ const ethernet_config ethernetDevices[] = { ETH_PHY_LAN8720, ETH_CLOCK_GPIO0_OUT } +#endif +#if defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32S3) + +#endif + }; /** @@ -109,14 +114,24 @@ const ethernet_config ethernetDevices[] = { * @param deviceNumber to use */ void EthManager::connectToEthernet(int8_t deviceNumber) { +#if CONFIG_IDF_TARGET_ESP32 ETH.begin( + ethernetDevices[deviceNumber].type, ethernetDevices[deviceNumber].address, - ethernetDevices[deviceNumber].power, ethernetDevices[deviceNumber].mdc, ethernetDevices[deviceNumber].mdio, - ethernetDevices[deviceNumber].type, + ethernetDevices[deviceNumber].power, ethernetDevices[deviceNumber].clk_mode ); +#else + // TODO fix this +// ETH.begin( +// ethernetDevices[deviceNumber].address, +// ethernetDevices[deviceNumber].mdc, +// ethernetDevices[deviceNumber].mdio, +// ethernetDevices[deviceNumber].power +// ); +#endif } /** @@ -124,17 +139,14 @@ void EthManager::connectToEthernet(int8_t deviceNumber) { * @param deviceNumber to deallocate */ void EthManager::deallocateEthernetPins(int8_t deviceNumber) { - const uint32_t MATRIX_DETACH_OUT_SIG = 0x100; - gpio_matrix_out(ethernetDevices[deviceNumber].address, MATRIX_DETACH_OUT_SIG, false, false); - gpio_matrix_out(ethernetDevices[deviceNumber].power, MATRIX_DETACH_OUT_SIG, false, false); - gpio_matrix_out(ethernetDevices[deviceNumber].mdc, MATRIX_DETACH_OUT_SIG, false, false); - gpio_matrix_out(ethernetDevices[deviceNumber].mdio, MATRIX_DETACH_OUT_SIG, false, false); - gpio_matrix_out(ethernetDevices[deviceNumber].clk_mode, MATRIX_DETACH_OUT_SIG, false, false); - pinMode(ethernetDevices[deviceNumber].address, INPUT); - pinMode(ethernetDevices[deviceNumber].power, INPUT); - pinMode(ethernetDevices[deviceNumber].mdc, INPUT); - pinMode(ethernetDevices[deviceNumber].mdio, INPUT); - pinMode(ethernetDevices[deviceNumber].clk_mode, INPUT); + gpio_reset_pin((gpio_num_t) ethernetDevices[deviceNumber].address); + gpio_reset_pin((gpio_num_t) ethernetDevices[deviceNumber].power); + gpio_reset_pin((gpio_num_t) ethernetDevices[deviceNumber].mdc); + gpio_reset_pin((gpio_num_t) ethernetDevices[deviceNumber].mdio); +#if CONFIG_IDF_TARGET_ESP32 + gpio_reset_pin((gpio_num_t) ethernetDevices[deviceNumber].clk_mode); +#endif + delay(1); } #endif diff --git a/src/EthManager.h b/src/EthManager.h index 80f864c..ac20704 100644 --- a/src/EthManager.h +++ b/src/EthManager.h @@ -34,8 +34,10 @@ typedef struct EthConfig { int power; int mdc; int mdio; +#if CONFIG_IDF_TARGET_ESP32 eth_phy_type_t type; eth_clock_mode_t clk_mode; +#endif } ethernet_config; extern const ethernet_config ethernetDevices[]; diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp index f1a904c..80385fa 100644 --- a/src/WifiManager.cpp +++ b/src/WifiManager.cpp @@ -70,7 +70,7 @@ void WifiManager::setupWiFi(void (*manageDisconnections)(), void (*manageHardwar #if defined(ESP8266) WiFi.setSleepMode(WIFI_NONE_SLEEP); #endif - WiFi.setAutoConnect(true); +// WiFi.setAutoConnect(true); // TODO WiFi.setAutoReconnect(true); Serial.println(microcontrollerIP); if (!microcontrollerIP.equals("DHCP")) { @@ -109,7 +109,9 @@ void WifiManager::setupWiFi(void (*manageDisconnections)(), void (*manageHardwar }); #elif defined(ARDUINO_ARCH_ESP32) WiFi.setHostname(helper.string2char(deviceName)); +#if !CONFIG_IDF_TARGET_ESP32S2 btStop(); +#endif #endif // Start wifi connection WiFi.begin(qsid.c_str(), qpass.c_str()); @@ -224,6 +226,9 @@ void WifiManager::setupOTAUpload() { Serial.println(F("End")); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { +#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 + esp_task_wdt_reset(); // TODO +# endif Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { diff --git a/src/WifiManager.h b/src/WifiManager.h index a3d5e43..94ea634 100644 --- a/src/WifiManager.h +++ b/src/WifiManager.h @@ -33,6 +33,7 @@ #include #include #include +#include #endif From a771b2896cb9e8ad7730379764a7f9653bd70da6 Mon Sep 17 00:00:00 2001 From: Davide Perini Date: Sun, 7 Dec 2025 17:53:06 +0100 Subject: [PATCH 2/4] core3 --- src/EthManager.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/EthManager.cpp b/src/EthManager.cpp index 4b94ed5..b17b620 100644 --- a/src/EthManager.cpp +++ b/src/EthManager.cpp @@ -125,12 +125,6 @@ void EthManager::connectToEthernet(int8_t deviceNumber) { ); #else // TODO fix this -// ETH.begin( -// ethernetDevices[deviceNumber].address, -// ethernetDevices[deviceNumber].mdc, -// ethernetDevices[deviceNumber].mdio, -// ethernetDevices[deviceNumber].power -// ); #endif } From 8f21c54bdb325414c72ee0f590aa44d75818e619 Mon Sep 17 00:00:00 2001 From: Davide Perini Date: Mon, 8 Dec 2025 13:38:09 +0100 Subject: [PATCH 3/4] core3 --- src/WifiManager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp index 80385fa..b2411d7 100644 --- a/src/WifiManager.cpp +++ b/src/WifiManager.cpp @@ -226,8 +226,8 @@ void WifiManager::setupOTAUpload() { Serial.println(F("End")); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { -#if CONFIG_IDF_TARGET_ESP32C3 || CONFIG_IDF_TARGET_ESP32S2 || CONFIG_IDF_TARGET_ESP32S3 - esp_task_wdt_reset(); // TODO +#if defined(ARDUINO_ARCH_ESP32) + esp_task_wdt_reset(); // TODO # endif Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); From ee0c74e622cea556968f948ffcd058a1d11ced1a Mon Sep 17 00:00:00 2001 From: Davide Perini Date: Thu, 11 Dec 2025 09:23:24 +0100 Subject: [PATCH 4/4] Espressif32 -> 55.03.34, Arduino Core -> 3.3.4, based on ESP-IDF -> 5.5.1 --- src/BootstrapManager.cpp | 2 +- src/WifiManager.cpp | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/BootstrapManager.cpp b/src/BootstrapManager.cpp index 611d4d1..fd16622 100644 --- a/src/BootstrapManager.cpp +++ b/src/BootstrapManager.cpp @@ -52,7 +52,7 @@ void BootstrapManager::bootstrapSetup(void (*manageDisconnections)(), void (*man } #if defined(ARDUINO_ARCH_ESP32) esp_task_wdt_config_t twdt_config = { - .timeout_ms = 3000, // TODO 3000 + .timeout_ms = 5000, .trigger_panic = true, }; esp_task_wdt_init(&twdt_config); //enable panic so ESP32 restarts diff --git a/src/WifiManager.cpp b/src/WifiManager.cpp index b2411d7..15eca78 100644 --- a/src/WifiManager.cpp +++ b/src/WifiManager.cpp @@ -698,6 +698,7 @@ void WifiManager::parseWiFiCommand(char *rpcData) { sendImprovStateResponse(0x03, false); //provisioning improvActive = 2; JsonDocument doc; + bool connected = isConnected(); String devName = String(random(0, 90000)); doc["deviceName"] = String(DEVICE_NAME) + "_" + devName; doc["microcontrollerIP"] = "DHCP"; @@ -709,7 +710,6 @@ void WifiManager::parseWiFiCommand(char *rpcData) { doc["mqttuser"] = ""; doc["mqttpass"] = ""; additionalParam = "2"; - Serial.println(F("Saving setup.json")); File jsonFile = LittleFS.open("/setup.json", FILE_WRITE); if (!jsonFile) { Serial.println("Failed to open [setup.json] file for writing"); @@ -717,17 +717,19 @@ void WifiManager::parseWiFiCommand(char *rpcData) { serializeJsonPretty(doc, Serial); serializeJson(doc, jsonFile); jsonFile.close(); + if (connected) { + IPAddress localIP = WiFi.localIP(); + Serial.printf("IMPROV http://%d.%d.%d.%d\n", localIP[0], localIP[1], localIP[2], localIP[3]); + } } #if defined(ARDUINO_ARCH_ESP32) WiFi.disconnect(); WiFi.begin(clientSSID, clientPass); while (!isConnected()) {} #endif - delay(DELAY_200); sendImprovRPCResponse(ImprovRPCType::Request_State); - delay(DELAY_200); sendImprovStateResponse(0x04, false); - delay(DELAY_200); + Serial.flush(); #if defined(ARDUINO_ARCH_ESP32) ESP.restart(); #elif defined(ESP8266)