From af307fd403997840a59fd52da3081e856498d998d21c9e1bdb7a248b6e8fe785 Mon Sep 17 00:00:00 2001 From: localhorst Date: Fri, 9 Jan 2026 23:35:44 +0100 Subject: [PATCH 1/2] handle reconnect --- main/wifi.c | 50 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/main/wifi.c b/main/wifi.c index d1fd0c1..6a4b806 100644 --- a/main/wifi.c +++ b/main/wifi.c @@ -13,10 +13,15 @@ #define WIFI_CONNECTED_BIT BIT0 #define WIFI_FAIL_BIT BIT1 +#define MAX_RETRY_COUNT 10 +#define RETRY_DELAY_MS 1000 static const char *TAG = "smart-oil-heater-control-system-wifi"; static EventGroupHandle_t s_wifi_event_group; +static int s_retry_num = 0; +static bool s_initial_connect = true; + static void event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data); @@ -84,7 +89,9 @@ void initWifi(void) { ESP_LOGE(TAG, "Unexpected event"); } - vEventGroupDelete(s_wifi_event_group); + + // Mark initial connection phase complete - do NOT delete the event group + s_initial_connect = false; } static void event_handler(void *arg, esp_event_base_t event_base, @@ -96,13 +103,46 @@ static void event_handler(void *arg, esp_event_base_t event_base, } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { - esp_wifi_connect(); - ESP_LOGI(TAG, "Retry to connect to the AP"); + wifi_event_sta_disconnected_t *event = (wifi_event_sta_disconnected_t *)event_data; + ESP_LOGW(TAG, "Disconnected from AP (reason: %d)", event->reason); + + if (s_initial_connect) + { + // During initial connection phase, use retry limit + if (s_retry_num < MAX_RETRY_COUNT) + { + vTaskDelay(pdMS_TO_TICKS(RETRY_DELAY_MS)); + esp_wifi_connect(); + s_retry_num++; + ESP_LOGI(TAG, "Retry to connect to the AP (%d/%d)", s_retry_num, MAX_RETRY_COUNT); + } + else + { + xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); + ESP_LOGE(TAG, "Failed to connect after %d attempts", MAX_RETRY_COUNT); + } + } + else + { + // After initial connection, always try to reconnect with delay + vTaskDelay(pdMS_TO_TICKS(RETRY_DELAY_MS)); + esp_wifi_connect(); + ESP_LOGI(TAG, "Attempting to reconnect to the AP..."); + } } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data; ESP_LOGI(TAG, "Got ip:" IPSTR, IP2STR(&event->ip_info.ip)); - xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); + s_retry_num = 0; + + if (s_initial_connect) + { + xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); + } + else + { + ESP_LOGI(TAG, "Successfully reconnected to AP"); + } } -} \ No newline at end of file +} From c935eacbdd9bd5d2220e46453794e81715ff41f682e93f17f7e50c53ce9660ca Mon Sep 17 00:00:00 2001 From: localhorst Date: Sun, 25 Jan 2026 14:28:03 +0100 Subject: [PATCH 2/2] update to new IDF component lib (#31) https://components.espressif.com/components/esp-idf-lib/ds18x20/versions/1.2.8/readme Reviewed-on: https://git.mosad.xyz/localhorst/smart-oil-heating-control-system/pulls/31 Co-authored-by: localhorst Co-committed-by: localhorst --- .gitignore | 2 ++ CMakeLists.txt | 3 --- main/idf_component.yml | 17 +++++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 main/idf_component.yml diff --git a/.gitignore b/.gitignore index e5348d3..4d25375 100644 --- a/.gitignore +++ b/.gitignore @@ -291,3 +291,5 @@ dkms.conf *.out *.app +managed_components/ +dependencies.lock diff --git a/CMakeLists.txt b/CMakeLists.txt index 561307f..c67b51e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,3 @@ - -set(EXTRA_COMPONENT_DIRS $ENV{ESP_IDF_LIB_PATH}/components) - # The following lines of boilerplate have to be in your project's CMakeLists # in this exact order for cmake to work correctly cmake_minimum_required(VERSION 3.16) diff --git a/main/idf_component.yml b/main/idf_component.yml new file mode 100644 index 0000000..5fa17bf --- /dev/null +++ b/main/idf_component.yml @@ -0,0 +1,17 @@ +## IDF Component Manager Manifest File +dependencies: + ## Required IDF version + idf: + version: '>=4.1.0' + # # Put list of dependencies here + # # For components maintained by Espressif: + # component: "~1.0.0" + # # For 3rd party components: + # username/component: ">=1.0.0,<2.0.0" + # username2/component2: + # version: "~1.0.0" + # # For transient dependencies `public` flag can be set. + # # `public` flag doesn't have an effect dependencies of the `main` component. + # # All dependencies of `main` are public by default. + # public: true + esp-idf-lib/ds18x20: '*'