WiFi State Machine¶
WiFi STA states¶
STA off -> ESPEASY_WIFI_DISCONNECTED
STA connected -> ESPEASY_WIFI_CONNECTED
STA got IP -> ESPEASY_WIFI_GOT_IP
STA connected && got IP -> ESPEASY_WIFI_SERVICES_INITIALIZED
N.B. the states are flags, meaning both “connected” and “got IP” must be set to be considered ESPEASY_WIFI_SERVICES_INITIALIZED
The flag wifiConnectAttemptNeeded indicates whether a new connect attempt is needed. This is set to true when:
Security settings have been saved with AP mode enabled. FIXME TD-er, this may not be the best check.
WiFi connect timeout reached & No client is connected to the AP mode of the node.
Wifi is reset
WiFi setup page has been loaded with SSID/pass values.
WiFi AP mode states¶
AP on -> reset AP disable timer
AP client connect/disconnect -> reset AP disable timer
AP off -> AP disable timer = 0;
AP mode will be disabled when both apply:
AP disable timer (timerAPoff) expired
No client is connected to the AP.
AP mode will be enabled when at least one applies:
No valid WiFi settings
Start AP timer (timerAPstart) expired
Start AP timer is set or cleared at:
Set timerAPstart when “valid WiFi connection” state is observed.
Disable timerAPstart when ESPEASY_WIFI_SERVICES_INITIALIZED wifi state is reached.
Quick reconnect (using BSSID/channel of last connection) when both apply:
If wifi_connect_attempt < 3
RTC.lastBSSID is known
Change of wifi settings when both apply:
“other” settings valid
(wifi_connect_attempt % 2) == 0
Reset of wifi_connect_attempt to 0 when both apply:
Connection stable (connected for > 5 minutes)
WiFi disconnect reasons¶
Beacon timeout (200)¶
For more information on the Beacon frame, see Wikipedia.
In short, the access point sends periodically a packet containing information about the network. This interval is typically 100 TU (102.4 msec). The ESP module is trying to listen to this beacon every time, but for a number of reasons it may miss a beacon frame. The timeout is longer than 100 TU, so it must miss a number of these beacon frames to report a beacon timeout. Reasons to miss such a beacon frame are:
too busy processing other blocking tasks (very likely)
access point not sending a beacon due to high traffic demands of others (depending on brand/model/settings)
RF disturbances (not likely given how often this occurs)
clock drift (not really likely)
So the “beacon timeout” is happening every now and then on the ESP nodes and ESPeasy will try to reconnect.