|
|
|
@@ -1,107 +1,107 @@ |
|
|
|
static const char *TAG = "WiFi";
|
|
|
|
#include "esp_log.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include "wifi.hpp"
|
|
|
|
|
|
|
|
// Defines SSID and PASS
|
|
|
|
#include "wifi_cfg.hpp"
|
|
|
|
|
|
|
|
static const int CONFIG_ESP_MAXIMUM_RETRY = 3;
|
|
|
|
|
|
|
|
|
|
|
|
#include "esp_wifi.h"
|
|
|
|
#include "freertos/event_groups.h"
|
|
|
|
|
|
|
|
static EventGroupHandle_t s_wifi_event_group;
|
|
|
|
|
|
|
|
#define WIFI_CONNECTED_BIT BIT0
|
|
|
|
#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 int s_retry_num = 0;
|
|
|
|
|
|
|
|
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) {
|
|
|
|
ESP_LOGI(TAG, "Disconnected, retrying connection to AP");
|
|
|
|
esp_wifi_connect();
|
|
|
|
|
|
|
|
} 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 address: " IPSTR, IP2STR(&event->ip_info.ip));
|
|
|
|
s_retry_num = 0;
|
|
|
|
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
int config_wifi() {
|
|
|
|
ESP_LOGI(TAG, "Connecting to %s", SSID);
|
|
|
|
|
|
|
|
s_wifi_event_group = xEventGroupCreate();
|
|
|
|
|
|
|
|
ESP_ERROR_CHECK(esp_netif_init());
|
|
|
|
|
|
|
|
ESP_ERROR_CHECK(esp_event_loop_create_default());
|
|
|
|
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 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 = PASS,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
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() );
|
|
|
|
|
|
|
|
/*
|
|
|
|
// 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: %s", SSID);
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
} else if (bits & WIFI_FAIL_BIT) {
|
|
|
|
ESP_LOGE(TAG, "Failed to connect to SSID %s", SSID);
|
|
|
|
} else {
|
|
|
|
ESP_LOGE(TAG, "UNEXPECTED EVENT");
|
|
|
|
}
|
|
|
|
*/
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
static const char *TAG = "WiFi"; |
|
|
|
#include "esp_log.h" |
|
|
|
|
|
|
|
|
|
|
|
#include "wifi.hpp" |
|
|
|
|
|
|
|
// Defines SSID and PASS |
|
|
|
#include "wifi_cfg.hpp" |
|
|
|
|
|
|
|
static const int CONFIG_ESP_MAXIMUM_RETRY = 3; |
|
|
|
|
|
|
|
|
|
|
|
#include "esp_wifi.h" |
|
|
|
#include "freertos/event_groups.h" |
|
|
|
|
|
|
|
static EventGroupHandle_t s_wifi_event_group; |
|
|
|
|
|
|
|
#define WIFI_CONNECTED_BIT BIT0 |
|
|
|
#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 int s_retry_num = 0; |
|
|
|
|
|
|
|
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) { |
|
|
|
ESP_LOGI(TAG, "Disconnected, retrying connection to AP"); |
|
|
|
esp_wifi_connect(); |
|
|
|
|
|
|
|
} 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 address: " IPSTR, IP2STR(&event->ip_info.ip)); |
|
|
|
s_retry_num = 0; |
|
|
|
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
int config_wifi() { |
|
|
|
ESP_LOGI(TAG, "Connecting to %s", SSID); |
|
|
|
|
|
|
|
s_wifi_event_group = xEventGroupCreate(); |
|
|
|
|
|
|
|
ESP_ERROR_CHECK(esp_netif_init()); |
|
|
|
|
|
|
|
ESP_ERROR_CHECK(esp_event_loop_create_default()); |
|
|
|
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 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 = PASS}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
|
|
|
|
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() ); |
|
|
|
|
|
|
|
/* |
|
|
|
// 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: %s", SSID); |
|
|
|
return 0; |
|
|
|
|
|
|
|
} else if (bits & WIFI_FAIL_BIT) { |
|
|
|
ESP_LOGE(TAG, "Failed to connect to SSID %s", SSID); |
|
|
|
} else { |
|
|
|
ESP_LOGE(TAG, "UNEXPECTED EVENT"); |
|
|
|
} |
|
|
|
*/ |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |