#include "wifi.h" #include "sdkconfig.h" #include #include #include #include #include #include #include #include static const char *TAG = "wifi"; static EventGroupHandle_t s_wifi_event_group; static const int WIFI_CONNECTED_BIT = BIT0; static volatile bool s_connected = false; /* ------------------------------------------------------------------------- * Event handler * ---------------------------------------------------------------------- */ static void wifi_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) { if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { esp_wifi_connect(); ESP_LOGI(TAG, "WiFi connecting..."); } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { s_connected = false; xEventGroupClearBits(s_wifi_event_group, WIFI_CONNECTED_BIT); esp_wifi_connect(); ESP_LOGI(TAG, "WiFi disconnected, reconnecting..."); } 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, "WiFi connected, IP: " IPSTR, IP2STR(&event->ip_info.ip)); s_connected = true; xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); } } /* ------------------------------------------------------------------------- * Public API * ---------------------------------------------------------------------- */ void wifi_init(void) { s_wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_netif_init()); ESP_ERROR_CHECK(esp_event_loop_create_default()); esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); configASSERT(sta_netif); ESP_ERROR_CHECK(esp_netif_set_hostname(sta_netif, "keypitecc")); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL)); ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL)); wifi_config_t wifi_config = {}; strncpy((char *)wifi_config.sta.ssid, CONFIG_WIFI_SSID, sizeof(wifi_config.sta.ssid) - 1); strncpy((char *)wifi_config.sta.password, CONFIG_WIFI_PASSWORD, sizeof(wifi_config.sta.password) - 1); wifi_config.sta.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_LOGI(TAG, "Connecting to SSID: %s", CONFIG_WIFI_SSID); } bool wifi_is_connected(void) { return s_connected; }