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()做哪些操作,才可以保证连接正常,在尝试以上方法均无效的情况下,目前是采取重启大法,各位大侠有没更好的办法
路由器关闭后重开,esp32不能正常连接
路由器关闭后重开,esp32不能正常连接
Last edited by donvar on Sat Aug 14, 2021 2:05 am, edited 1 time in total.
-
- Posts: 16
- Joined: Thu May 06, 2021 6:01 am
Re: 路由器关闭后重开,esp32不能正常连接
这样试下:
ESP_ERROR_CHECK( esp_wifi_disconnect() );
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
esp_wifi_connect();
ESP_ERROR_CHECK( esp_wifi_disconnect() );
ESP_ERROR_CHECK( esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );
esp_wifi_connect();
Who is online
Users browsing this forum: Bing [Bot] and 128 guests