最近調ESP8266,使用 SoftAP + Station模式,在設置了自動重連WIFI之后,當wifi不存在時,8266自動重連wifi,這時,AP很難被其他station接入,比如手機很難連上8266熱點,即使連上了,也容易斷開。一直搞不定,在官網找到了說明:
雖然 ESP8266 支持 SoftAP + Station 共存模式,但是 ESP8266 實際只有一個硬件信道。因此在 SoftAP + Station 模式時,ESP8266 SoftAP 會動態調整信道值與 ESP8266 Station 一致。這個限制會導致 ESP8266 SoftAP + Station 模式時一些行為上的不便,用戶請注意。例如:
情況一
- 如果 ESP8266 Station 連接到一個路由 (假設路由信道號為 6);
- 通過接口 wifi_softap_set_config 設置 ESP8266 SoftAP;
- 若設置值合法有效,該 API 將返回 true ,但信道號仍然會自動調節成與 ESP8266 Station 接口一致,在這個例子里也就是信道號為 6。
情況二
- 調用接口 wifi_softap_set_config 設置 ESP8266 SoftAP (例如信道號為 5);
- 其他 Station 連接到 ESP8266 SoftAP;
- 將 ESP8266 Station 連接到路由( 假設路由信道號為 6) ;
- ESP8266 SoftAP 將自動調整信道號與 ESP8266 Station 一致(信道 6);
- 由於信道改變,之前連接到 ESP8266 SoftAP 的 Station 的 Wi-Fi 連接斷開。
情況三
- 其他 Station 與 ESP8266 SoftAP 建立連接;
- 如果 ESP8266 Station 一直嘗試掃描或連接某路由,可能導致 ESP8266 SoftAP 端的連接斷開,或者 UDP 丟包,ping 丟包等情況。
因為 ESP8266 Station 會遍歷各個信道查找目標路由,意味着 ESP8266 其實在不停切換信道,ESP8266 SoftAP 的信道也因此在不停更改。這可能導致 ESP8266 SoftAP 端的原有連接斷開,或者 UDP 丟包,ping 丟包等情況。
這種情況,用戶可以通過設置定時器,超時后調用 wifi_station_disconnect 停止 ESP8266 Station 不斷連接路由的嘗試;或者在初始配置時,調用 wifi_station_set_reconnect_policy 和 wifi_station_set_auto_connect 禁止 ESP8266 Station 嘗試重連路由。
我的現象正是情況三
我的處理辦法:
1.建立一個任務維護wifi連接狀態,當自帶重試次數到達3次之后(可以通過斷開事件判斷),調用wifi_station_disconnect 停止 ESP8266 Station 不斷連接路由的嘗試。在通過標志或者其他方式,通知維護任務,維護任務在10s之后重新配置wifi sta參數進行連接,多次之后仍無法連接再加大間隔時間.