路由器关闭后重开,esp32不能正常连接

donvar
Posts: 8
Joined: Tue Sep 25, 2018 2:41 pm

路由器关闭后重开,esp32不能正常连接

Postby donvar » Fri Aug 13, 2021 6:44 am

sta模式下,连接路由器成功后,关闭路由器一段时间(比如一个小时),为了保证路由器上电后能正常连接路由器,采取以下策略
1. WIFI_EVENT_STA_DISCONNECTED事件不做重连动作,定期检查sta连接状态(间隔2分钟)
2. 如果连接断开,则进行连接,分别尝试以下两种方式
a. 直接调用esp_wifi_connect()进行连接,重复若干次以后,出现wifi:sta is connecting, return error,有机会返回错误代码0x3007,此时打开路由器也不能正常连接
b. 首先调用esp_wifi_scan_start()搜索ap list,如果得到ap list包含有需要连接路由器的ssid,则调用esp_wifi_connect()进行连接,前面几次,打开路由器可以正常连接,若路由器关闭时间稍微长一些,则esp_wifi_scan_start()返回错误码0x300C,这个在esp_wifi_types.h没有定义,请问这是什么原因。
此外还尝试过在esp_wifi_connect()返回错误后,de_initialise_wifi()然后再调用initialise_wifi()均未能在路由器关闭一个小时后开启,正常连接
以下是初始化的代码

void initialise_netif(void)
{
push_call_history(__FUNCTION__);
static bool initialized = false;
if (initialized)
{
return;
}
initialized = true;
evg_netif = xEventGroupCreate();
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
}

void initialise_wifi(void)
{
push_call_history(__FUNCTION__);
ap_status->netif = esp_netif_create_default_wifi_ap();

assert(ap_status->netif);
sta_status->netif = esp_netif_create_default_wifi_sta();
assert(sta_status->netif);
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));

ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID,
&wifi_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP,
&ip_event_handler, NULL));
ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_AP_STAIPASSIGNED,
&ip_event_handler, NULL));
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));

if(ap_conf->ena)
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_APSTA));
else
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_start());
sta_status->status = NIF_STATUS_INIT;
xEventGroupSetBits(evg_netif, BIT_STA_INITIALISED | BIT_AP_INITIALISED | BIT_STA_DISCONNECTED);
if(strlen(sta_conf->name)>3)
xEventGroupSetBits(evg_netif, BIT_STA_SSID_SETTED);
}

void de_initialise_wifi(void)
{
ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &wifi_event_handler));
ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &ip_event_handler));
ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_AP_STAIPASSIGNED, &ip_event_handler));
esp_err_t err = esp_wifi_stop();
if (ESP_ERR_WIFI_NOT_INIT == err) {
return;
}
ESP_ERROR_CHECK(err);
ESP_ERROR_CHECK(esp_wifi_deinit());
ESP_ERROR_CHECK(esp_wifi_clear_default_wifi_driver_and_handlers(sta_status->netif));
ESP_ERROR_CHECK(esp_wifi_clear_default_wifi_driver_and_handlers(ap_status->netif));
esp_netif_destroy(sta_status->netif);
esp_netif_destroy(ap_status->netif );
sta_status->netif = NULL;
ap_status->netif = NULL;
}

请问错误码0x3007和0x300C是什么原因导致,该如何处理?为了保证在路由器正常(信号号,无干扰)的情况,在调用esp_wifi_connect()做哪些操作,才可以保证连接正常,在尝试以上方法均无效的情况下,目前是采取重启大法,各位大侠有没更好的办法
Last edited by donvar on Sat Aug 14, 2021 2:05 am, edited 1 time in total.

abcrazy2020
Posts: 16
Joined: Thu May 06, 2021 6:01 am

Re: 路由器关闭后重开,esp32不能正常连接

Postby abcrazy2020 » Sun Aug 15, 2021 1:51 am

这样试下:

ESP_ERROR_CHECK( esp_wifi_disconnect() );
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
esp_wifi_connect();

donvar
Posts: 8
Joined: Tue Sep 25, 2018 2:41 pm

Re: 路由器关闭后重开,esp32不能正常连接

Postby donvar » Mon Aug 16, 2021 10:34 am

感谢回复,我测试一下

Who is online

Users browsing this forum: Baidu [Spider] and 31 guests