stm32: network WLAN(AP_IF).isconnected() always returns True
The documentation for network.WLAN.isconnected() states:
In AP mode returns
Truewhen a station is connected. ReturnsFalseotherwise.
ref: http://docs.micropython.org/en/v1.13/library/network.WLAN.html#network.WLAN.isconnected
However, when I run the following code on a PYBD_SF6W:
import utime as time
import network
from urandom import randint
import machine
# Access Point
def make_ap():
print("Access Point...")
ap = network.WLAN(network.AP_IF)
ap.config(essid='MyPyboard:{:04d}'.format(randint(1, 10000)))
ap.active(True)
while not ap.active():
time.sleep(0.1)
print(" AP_IF: {!r}".format(ap.ifconfig()))
return ap
# ----- Mainline
print('machine.reset_cause()', machine.reset_cause())
ap = make_ap() # network.WLAN in AP_IF mode
while True:
time.sleep(1)
print('isconnected()', ap.isconnected())
I get the output:
MicroPython v1.13-274-g49dd9ba1a on 2021-01-19; PYBD-SF6W with STM32F767IIK
Type "help()" for more information.
>>>
paste mode; Ctrl-C to cancel, Ctrl-D to finish
=== # pasted above code
machine.reset_cause() 1
Access Point...
AP_IF: ('192.168.4.1', '255.255.255.0', '192.168.4.1', '0.0.0.0')
isconnected() True
isconnected() True
isconnected() True
DHCPS: client connected: MAC=66:bc:1c:1a:af:f1 IP=192.168.4.16
isconnected() True
isconnected() True
isconnected() True
What I would expect is that before the DHCP connection is made, before any stations are connected to the AP, isconnected() should return False.
esp32/modnetwork: Fixed wifi.isconnected() is always true, even disconn
I wonder why wlan.isconnected() always return "true" even when some AP gets reboot. And I found patch in commit 039f196c56b97d879b7ce731cd479395dd479c3d which redone logic "is connected" to support StaticIP. Unfortunately it break situation when you are successfully connected and later some AP lost.
This commit fix that, I tested it with static and with dynamic IP. Also in case new connect and also reconnect.
Explain why this idea does not work is: Code probably replied on situation when in reconnect part will esp_wifi_connect return something else than ESP_OK. But regarding to SDK documentation, ESP_OK is return whenever API success. Non OK will return just on some critical error (such out-of-mem...).
This way made code think every (even unsuccessful) attempt of reconnect considered was successful.
It's enough to have it like this, because after reconnect GOT_IP event is called and it will change wifi_sta_connected back to True