esp8266 idf 使用 ap+sta 模式,代码示例,注意是ap+sta模式
时间: 2023-04-07 22:04:00 浏览: 212
以下是一个简单的 ESP8266 IDF 使用 AP STA 模式的代码示例:
```
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_wifi.h"
#include "esp_event_loop.h"
#include "esp_log.h"
#define WIFI_SSID "my_wifi_ssid"
#define WIFI_PASS "my_wifi_password"
static const char *TAG = "wifi station";
static void wifi_event_handler(void* arg, esp_event_base_t event_base,
int32_t event_id, void* event_data)
{
if (event_id == WIFI_EVENT_STA_START) {
esp_wifi_connect();
} else if (event_id == WIFI_EVENT_STA_DISCONNECTED) {
esp_wifi_connect();
ESP_LOGI(TAG, "retry to connect to the AP");
}
}
void wifi_init_sta(void)
{
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
esp_event_handler_instance_t instance_any_id;
esp_event_handler_instance_t instance_got_ip;
esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&wifi_event_handler,
NULL,
&instance_any_id);
esp_event_handler_instance_register(IP_EVENT,
IP_EVENT_STA_GOT_IP,
&wifi_event_handler,
NULL,
&instance_got_ip);
wifi_config_t wifi_config = {
.sta = {
.ssid = WIFI_SSID,
.password = WIFI_PASS,
},
};
esp_wifi_set_mode(WIFI_MODE_STA);
esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config);
esp_wifi_start();
ESP_LOGI(TAG, "wifi_init_sta finished.");
ESP_LOGI(TAG, "connect to ap SSID:%s password:%s",
WIFI_SSID, WIFI_PASS);
}
void wifi_init_softap(void)
{
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
wifi_config_t wifi_config = {
.ap = {
.ssid = "my_ap_ssid",
.ssid_len = 0,
.password = "my_ap_password",
.max_connection = 4,
.authmode = WIFI_AUTH_WPA_WPA2_PSK,
},
};
esp_wifi_set_mode(WIFI_MODE_AP);
esp_wifi_set_config(ESP_IF_WIFI_AP, &wifi_config);
esp_wifi_start();
ESP_LOGI(TAG, "wifi_init_softap finished.");
ESP_LOGI(TAG, "ssid:%s password:%s",
"my_ap_ssid", "my_ap_password");
}
void app_main()
{
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
wifi_init_softap();
wifi_init_sta();
}
```
这个示例代码中,我们使用了 ESP8266 IDF 的 Wi-Fi 库来实现 AP STA 模式。在这个模式下,ESP8266 既可以作为一个 Wi-Fi 接入点(AP),也可以作为一个 Wi-Fi 客户端(STA)连接到其他 Wi-Fi 接入点。在这个示例中,我们首先初始化了一个 Wi-Fi 接入点,然后初始化了一个 Wi-Fi 客户端,连接到了一个指定的 Wi-Fi 接入点。在连接过程中,我们还注册了一些 Wi-Fi 事件处理程序,以便在连接状态发生变化时进行处理。
阅读全文