Files @ 33512a8a338c
Branch filter:

Location: protofusion-esp32-template/main/wifi.c - annotation

Ethan Zonca
Add OSC library, works!
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
17740c77dca1
a02651c5dd9b
a02651c5dd9b
a02651c5dd9b
75e9d12deff7
9785a2ea3aa8
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
9785a2ea3aa8
9785a2ea3aa8
75e9d12deff7
75e9d12deff7
75e9d12deff7
9785a2ea3aa8
9785a2ea3aa8
9785a2ea3aa8
9785a2ea3aa8
9785a2ea3aa8
75e9d12deff7
75e9d12deff7
33512a8a338c
33512a8a338c
17740c77dca1
9785a2ea3aa8
9785a2ea3aa8
9785a2ea3aa8
75e9d12deff7
75e9d12deff7
75e9d12deff7
33512a8a338c
17740c77dca1
9785a2ea3aa8
9785a2ea3aa8
9785a2ea3aa8
75e9d12deff7
ec8f9a71fe0a
17740c77dca1
33512a8a338c
17740c77dca1
ec8f9a71fe0a
ec8f9a71fe0a
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
9785a2ea3aa8
9785a2ea3aa8
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
75e9d12deff7
//
// wifi
//

#include "wifi.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_log.h"
#include "lwip/err.h"
#include "lwip/sys.h"
#include "display.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"

// Private variables

// FreeRTOS event group to signal when we are connected
static EventGroupHandle_t s_wifi_event_group;
static const char *TAG = "wifi station";
static int s_retry_num = 0;


// Handler for wifi events
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 < EXAMPLE_ESP_MAXIMUM_RETRY) 
        {
            esp_wifi_connect();
            s_retry_num++;
                ESP_LOGI(TAG, "retry to connect to the AP");
            display_update_text("AP Connect Retry");

        } 
        else 
        {
            xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);
        }
        ESP_LOGI(TAG,"connect to the AP fail");
        display_update_text("AP Connect 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, "WIFI OK, IP: " IPSTR, IP2STR(&event->ip_info.ip));
        char out[128] = {0};
        snprintf(out, 128, "WIFI OK\nIP: " IPSTR, IP2STR(&event->ip_info.ip));
        display_update_text(out);


        s_retry_num = 0;
        xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
    }
}


// Initialize wifi and connect to network
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_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 = EXAMPLE_ESP_WIFI_SSID,
            .password = EXAMPLE_ESP_WIFI_PASS,
            /* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (pasword len => 8).
             * If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
             * to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
             * WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
             */
            .threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,
            .sae_pwe_h2e = ESP_WIFI_SAE_MODE,
            .sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
        },
    };
    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",
                 EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
    } else if (bits & WIFI_FAIL_BIT) {
        ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
                 EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
    } else {
        ESP_LOGE(TAG, "UNEXPECTED EVENT");
    }
}