From 9f938ab8ba5af561bd44dbc7142f338ce317a01a Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Sat, 1 Nov 2025 09:46:52 +0800 Subject: Etlas project. --- esp32/main/wifi.c | 88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 esp32/main/wifi.c (limited to 'esp32/main/wifi.c') diff --git a/esp32/main/wifi.c b/esp32/main/wifi.c new file mode 100644 index 0000000..188522f --- /dev/null +++ b/esp32/main/wifi.c @@ -0,0 +1,88 @@ +#include +#include +#include + +#include +#include + +#include "wifi.h" + +#define WIFI_SSID CONFIG_ESP_WIFI_SSID +#define WIFI_PASSWORD CONFIG_ESP_WIFI_PASSWORD +#define WIFI_MAX_RETRY CONFIG_ESP_MAXIMUM_RETRY + +#define WIFI_CONNECTED_BIT BIT0 +#define WIFI_ERROR_BIT BIT1 + +static const char* TAG = "wifi"; + +static int wifi_retry_num = 0; +static EventGroupHandle_t wifi_evt_group; + +static void wifi_evt_handler(void *arg, + esp_event_base_t eb, int32_t id, + void *data) +{ + if (eb == WIFI_EVENT && id == WIFI_EVENT_STA_DISCONNECTED) { + if (wifi_retry_num < WIFI_MAX_RETRY) { + esp_wifi_connect(); + wifi_retry_num++; + ESP_LOGI(TAG, "trying to connect to AP..."); + } else { + ESP_LOGE(TAG,"connection to AP failed"); + xEventGroupSetBits(wifi_evt_group, WIFI_ERROR_BIT); + } + } else if (eb == IP_EVENT && id == IP_EVENT_STA_GOT_IP) { + ip_event_got_ip_t* evt = (ip_event_got_ip_t*) data; + ESP_LOGI(TAG, "connected to AP with ip:" IPSTR, IP2STR(&evt->ip_info.ip)); + wifi_retry_num = 0; + xEventGroupSetBits(wifi_evt_group, WIFI_CONNECTED_BIT); + } +} + +void wifi_connect(void) +{ + ESP_ERROR_CHECK(esp_netif_init()); + + wifi_evt_group = xEventGroupCreate(); + esp_netif_create_default_wifi_sta(); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + esp_event_handler_instance_t any_id; + ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, + ESP_EVENT_ANY_ID, + &wifi_evt_handler, + NULL, + &any_id)); + + esp_event_handler_instance_t got_ip; + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, + IP_EVENT_STA_GOT_IP, + &wifi_evt_handler, + NULL, + &got_ip)); + + wifi_config_t wifi_config = { + .sta = { + .ssid = WIFI_SSID, + .password = WIFI_PASSWORD, + .threshold.authmode = WIFI_AUTH_WPA2_PSK + }, + }; + + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) ); + + ESP_ERROR_CHECK(esp_wifi_start()); + ESP_ERROR_CHECK(esp_wifi_connect()); + + xEventGroupWaitBits(wifi_evt_group, + WIFI_CONNECTED_BIT | WIFI_ERROR_BIT, + pdFALSE, + pdFALSE, + portMAX_DELAY); + + ESP_LOGI(TAG, "wifi station initialized"); +} -- cgit v1.2.3