diff options
author | Josh Rahm <joshuarahm@gmail.com> | 2022-12-01 22:44:20 -0700 |
---|---|---|
committer | Josh Rahm <joshuarahm@gmail.com> | 2022-12-01 22:44:20 -0700 |
commit | 10a5077234e9b76dc100b9029a9e2d71801e7242 (patch) | |
tree | 13e42a3c91f1672c6ce7b6daba776366aa71ef85 /main/station.c | |
parent | 05e3f6bb7293c771629c7b3599392c8f335e7dd8 (diff) | |
download | esp32-ws2812b-10a5077234e9b76dc100b9029a9e2d71801e7242.tar.gz esp32-ws2812b-10a5077234e9b76dc100b9029a9e2d71801e7242.tar.bz2 esp32-ws2812b-10a5077234e9b76dc100b9029a9e2d71801e7242.zip |
Diffstat (limited to 'main/station.c')
-rw-r--r-- | main/station.c | 168 |
1 files changed, 85 insertions, 83 deletions
diff --git a/main/station.c b/main/station.c index 8f69f49..d4c2d00 100644 --- a/main/station.c +++ b/main/station.c @@ -1,51 +1,53 @@ #include <string.h> -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" -#include "freertos/event_groups.h" -#include "esp_system.h" -#include "esp_wifi.h" + #include "esp_event.h" #include "esp_log.h" -#include "nvs_flash.h" - +#include "esp_system.h" +#include "esp_wifi.h" +#include "freertos/FreeRTOS.h" +#include "freertos/event_groups.h" +#include "freertos/task.h" #include "lwip/err.h" #include "lwip/sys.h" +#include "nvs_flash.h" static EventGroupHandle_t s_wifi_event_group; static int s_retry_num = 0; -static const char * TAG = "wifi"; +static const char* TAG = "wifi"; #define WIFI_CONNECTED_BIT BIT0 -#define WIFI_FAIL_BIT BIT1 +#define WIFI_FAIL_BIT BIT1 -static void event_handler(void* arg, esp_event_base_t event_base, - int32_t event_id, void* event_data) +static void 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(); - } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { - if (s_retry_num < 5) { - esp_wifi_connect(); - s_retry_num++; - ESP_LOGI(TAG, "retry to connect to the AP"); - } else { - xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); - } - ESP_LOGI(TAG,"connect to the AP fail"); - } 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)); - s_retry_num = 0; - xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { + esp_wifi_connect(); + } else if ( + event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { + if (s_retry_num < 5) { + esp_wifi_connect(); + s_retry_num++; + ESP_LOGI(TAG, "retry to connect to the AP"); + } else { + xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); } + ESP_LOGI(TAG, "connect to the AP fail"); + } 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)); + s_retry_num = 0; + xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); } +} void wifi_init_station(const char* ssid, const char* psk) { /** Initialize the flash. Not exactly sure why this is required, but it is, * otherwise there will be a fault. */ esp_err_t ret = nvs_flash_init(); - if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || + ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } @@ -66,60 +68,60 @@ void wifi_init_station(const char* ssid, const char* psk) esp_event_handler_instance_t instance_any_id; esp_event_handler_instance_t instance_got_ip; - ESP_ERROR_CHECK( - esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, - &event_handler, NULL, &instance_any_id)); - - ESP_ERROR_CHECK( - esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, - &event_handler, NULL, &instance_got_ip)); - - wifi_config_t wifi_config = { - .sta = { - // .ssid = ssid, - // .password = psk, - /* Setting a password implies station will connect to all security modes including WEP/WPA. - * However these modes are deprecated and not advisable to be used. Incase your Access point - * doesn't support WPA2, these mode can be enabled by commenting below line */ - .threshold.authmode = WIFI_AUTH_WPA2_PSK, - - .pmf_cfg = { - .capable = true, - .required = false - }, - }, - }; - - memcpy(wifi_config.sta.ssid, ssid, strlen(ssid)); - memcpy(wifi_config.sta.password, psk, strlen(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, "wifi_init_sta finished."); - /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum - * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */ - EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, - WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, - pdFALSE, - pdFALSE, - portMAX_DELAY); - - /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually - * happened. */ - if (bits & WIFI_CONNECTED_BIT) { - ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", - ssid, psk); - } else if (bits & WIFI_FAIL_BIT) { - ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", - ssid, psk); - } else { - ESP_LOGE(TAG, "UNEXPECTED EVENT"); - } + ESP_ERROR_CHECK(esp_event_handler_instance_register( + WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, &instance_any_id)); + + ESP_ERROR_CHECK(esp_event_handler_instance_register( + IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, &instance_got_ip)); + + wifi_config_t wifi_config = { + .sta = + { + // .ssid = ssid, + // .password = psk, + /* Setting a password implies station will connect to all security + * modes including WEP/WPA. However these modes are deprecated and + * not advisable to be used. Incase your Access point doesn't + * support WPA2, these mode can be enabled by commenting below + * line */ + .threshold.authmode = WIFI_AUTH_WPA2_PSK, + + .pmf_cfg = {.capable = true, .required = false}, + }, + }; + + memcpy(wifi_config.sta.ssid, ssid, strlen(ssid)); + memcpy(wifi_config.sta.password, psk, strlen(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, "wifi_init_sta finished."); + /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or + * connection failed for the maximum number of re-tries (WIFI_FAIL_BIT). The + * bits are set by event_handler() (see above) */ + EventBits_t bits = xEventGroupWaitBits( + s_wifi_event_group, + WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, + pdFALSE, + pdFALSE, + portMAX_DELAY); + + /* xEventGroupWaitBits() returns the bits before the call returned, hence we + * can test which event actually happened. */ + if (bits & WIFI_CONNECTED_BIT) { + ESP_LOGI(TAG, "connected to ap SSID:%s password:%s", ssid, psk); + } else if (bits & WIFI_FAIL_BIT) { + ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", ssid, psk); + } else { + ESP_LOGE(TAG, "UNEXPECTED EVENT"); + } - /* The event will not be processed after unregister */ - ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip)); - ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id)); - vEventGroupDelete(s_wifi_event_group); + /* The event will not be processed after unregister */ + ESP_ERROR_CHECK(esp_event_handler_instance_unregister( + IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip)); + ESP_ERROR_CHECK(esp_event_handler_instance_unregister( + WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id)); + vEventGroupDelete(s_wifi_event_group); } |