完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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()做哪些操作,才可以保证连接正常,在尝试以上方法均无效的情况下,目前是采取重启大法,各位大侠有没更好的办法 |
|
相关推荐
1 条评论
|
|
只有小组成员才能发言,加入小组>>
1123 浏览 1 评论
574浏览 6评论
477浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
461浏览 5评论
462浏览 4评论
435浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 17:46 , Processed in 0.858734 second(s), Total 87, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号