Espressif Esp32 Wifi Driver SoftAP+Sta mode ...设置配置界面?

Espressif Esp32 Wifi Driver SoftAP+Sta mode ... set config interface?

esp_wifi_set_config 方法需要类型为 wifi_interface_t 的接口参数。 这是一个具有值 [WIFI_IF_STA || 的枚举WIFI_IF_AP]

我将我的配置从 esp32 示例页面上的两个示例与必要的配置参数合并。但是我不确定我打算从上面传递什么接口模式来设置配置。我希望有 WIFI_IF_AP_STA 之类的东西。

wifi_config_t wifi_config = {
    .ap = {
        .ssid = ESP_AP_WIFI_SSID,
        .ssid_len = strlen(ESP_AP_WIFI_SSID),
        .channel = ESP_AP_WIFI_CHANNEL,
        .password = ESP_AP_WIFI_PASS,
        .max_connection = AP_MAX_STA_CONN,
        .authmode = WIFI_AUTH_WPA_WPA2_PSK
    },
    .sta = {
        .ssid = ESP_STA_WIFI_SSID,
        .password = ESP_STA_WIFI_PASS,
     .threshold.authmode = WIFI_AUTH_WPA2_PSK,

        .pmf_cfg = {
            .capable = true,
            .required = false
        },
    },
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
ESP_ERROR_CHECK(esp_wifi_set_config(
    **WHAT DO I PUT HERE? [WIFI_IF_STA : WIFI_IF_AP]
    , &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());

首先,请注意 wifi_config_t 不是一个有两个成员的结构。这是一个联合,意味着您可以存储 AP 或 STA 配置,但不能同时存储两者。所以你需要创建两个不同的配置结构,每个模式一个。

至于你的困惑,根据示例 here 你调用了 esp_wifi_set_config() 两次 - 一次用于 AP,一次用于 STA。

wifi_config_t ap_config = {
    .ap = {
        .ssid = ESP_AP_WIFI_SSID,
        .ssid_len = strlen(ESP_AP_WIFI_SSID),
        .channel = ESP_AP_WIFI_CHANNEL,
        .password = ESP_AP_WIFI_PASS,
        .max_connection = AP_MAX_STA_CONN,
        .authmode = WIFI_AUTH_WPA_WPA2_PSK
    }
};
wifi_config_t sta_config = {
    .sta = {
        .ssid = ESP_STA_WIFI_SSID,
        .password = ESP_STA_WIFI_PASS,
        .threshold.authmode = WIFI_AUTH_WPA2_PSK,
        .pmf_cfg = {
            .capable = true,
            .required = false
        }
    }
};

...
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_AP, &ap_config));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &sta_config));