ESP32-C3, esp-idf 4.3.5,sta模式设置连接wifi超时重连
时间: 2024-02-18 12:06:30 浏览: 176
ESP32 ESP32C3 Micropython 连接WIFI自动重连,连接阿里云物联网示例
您可以在ESP32-C3上使用以下代码来设置sta模式连接WiFi超时重连:
```c
#include "esp_wifi.h"
#define WIFI_TIMEOUT_MS 10000 // 设置连接WiFi的超时时间为10s
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(); // WiFi STA模式启动时连接WiFi
} else if (event_id == WIFI_EVENT_STA_DISCONNECTED) {
esp_wifi_connect(); // WiFi STA模式连接断开时重新连接WiFi
}
}
void wifi_init_sta() {
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&cfg);
esp_wifi_set_mode(WIFI_MODE_STA);
wifi_config_t wifi_config = {
.sta = {
.ssid = "your_wifi_ssid",
.password = "your_wifi_password",
},
};
esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config);
esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &wifi_event_handler, NULL);
esp_wifi_start();
TickType_t start_tick = xTaskGetTickCount(); // 记录连接WiFi的开始时间
while (1) {
wifi_ap_record_t ap_info;
if (esp_wifi_sta_get_ap_info(&ap_info) == ESP_OK) { // 获取连接到的WiFi的信息
printf("Connected to %s\n", ap_info.ssid);
break; // 连接成功,退出循环
}
TickType_t now_tick = xTaskGetTickCount();
if ((now_tick - start_tick) * portTICK_PERIOD_MS > WIFI_TIMEOUT_MS) { // 超时未连接成功,则重新连接WiFi
printf("WiFi connection timeout, retrying...\n");
esp_wifi_disconnect();
esp_wifi_connect();
start_tick = now_tick;
}
vTaskDelay(pdMS_TO_TICKS(1000)); // 等待1s后再次尝试连接WiFi
}
}
void app_main() {
esp_err_t ret = nvs_flash_init();
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();
}
ESP_ERROR_CHECK(ret);
tcpip_adapter_init();
wifi_init_sta();
}
```
在该代码中,我们注册了WiFi事件处理程序,当WiFi STA模式启动或连接断开时,会触发对应的事件处理函数。在程序初始化时,我们启动了WiFi STA模式并设置连接的WiFi SSID和密码。在连接WiFi时,我们通过`esp_wifi_sta_get_ap_info()`函数获取连接到的WiFi信息,如果10s内未连接成功,则会重新连接WiFi。
注意:在使用该代码时,需要将`your_wifi_ssid`和`your_wifi_password`替换为实际的WiFi SSID和密码。
阅读全文