← index #6787PR #4538
Related · high · value 1.357
QUERY · ISSUE

stm32: network WLAN(AP_IF).isconnected() always returns True

openby fragmuffinopened 2021-01-19updated 2026-03-25
port-stm32

The documentation for network.WLAN.isconnected() states:

In AP mode returns True when a station is connected. Returns False otherwise.

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.

CANDIDATE · PULL REQUEST

esp32/modnetwork: Fixed wifi.isconnected() is always true, even disconn

closedby petrkropened 2019-02-21updated 2019-02-28

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

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied