完善资料让更多小伙伴认识你,还能领取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个回答
|
|
在这种情况下,您可以尝试以下步骤来解决ESP32在STA模式下重新连接路由器的问题:
1. **确保固件更新**:首先,确保您的ESP32设备和路由器都运行着最新的固件。有时,固件更新可以解决一些已知的连接问题。 2. **检查电源管理**:确保ESP32和路由器的电源管理设置不会导致设备在不活跃时关闭Wi-Fi模块。 3. **优化Wi-Fi配置**:在ESP32的STA模式下,确保您的Wi-Fi配置是最优的。这包括正确的SSID、密码、加密方式等。 4. **使用Wi-Fi事件处理**:根据您提供的策略,您已经在使用Wi-Fi事件来处理断开和重连的情况。确保您的事件处理逻辑是正确的,并且能够正确响应Wi-Fi状态的变化。 5. **增加重连尝试次数**:在您的代码中,尝试增加`esp_wifi_connect()`的调用次数,以增加成功连接的机会。 6. **检查错误代码**:您提到了错误代码0x3007,这可能是一个特定的错误,需要您查阅ESP32的文档来了解这个错误代码的具体含义,并根据这个错误来调整您的连接策略。 7. **使用AP列表扫描**:在您的策略中,您提到了使用`esp_wifi_scan_start()`来扫描AP列表。确保这个扫描能够正确识别您的路由器,并在找到正确的SSID后尝试连接。 8. **调整连接间隔**:您提到了每2分钟检查一次STA连接状态。这个间隔可能需要根据您的网络环境进行调整。如果网络环境不稳定,可能需要更频繁地检查。 9. **日志记录**:在您的代码中添加日志记录功能,这样可以帮助您更好地了解在连接过程中发生了什么,以及在哪个步骤出现了问题。 10. **硬件检查**:最后,确保ESP32和路由器的硬件都是正常工作的。有时硬件故障也会导致连接问题。 通过以上步骤,您应该能够找到问题的原因并解决ESP32在STA模式下重新连接路由器的问题。如果问题仍然存在,您可能需要进一步检查您的网络环境或联系ESP32的技术支持。 |
|
|
|
只有小组成员才能发言,加入小组>>
1002 浏览 1 评论
554浏览 6评论
463浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
447浏览 5评论
448浏览 4评论
422浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 13:03 , Processed in 0.795516 second(s), Total 75, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号