8000 Raspberry Pi Pico W network becomes inaccessible when not used for some time · Issue #9455 · micropython/micropython · GitHub
[go: up one dir, main page]

Skip to content
Raspberry Pi Pico W network becomes inaccessible when not used for some time #9455
Open
@anecdata

Description

@anecdata

Using MicroPython v1.19.1 on 2022-09-20; Raspberry Pi Pico W with RP2040, Pico W loses network operation (though seemingly not AP connection since there is typically still an IP address) if no network operations are performed for some time. The maximum non-operating interval between network operations is typically about 5 minutes with Power-Saving on, and at least 10 minutes with Power-Saving off (more testing continues with this mode). The failure mode is typically OSError: -2.

If some operation, say a ping is done frequently, the network operation is preserved and more complex transactions (e.g., sockets) can be done with much longer intervals.

Code:

import time
import machine
import network
import urequests as requests

TEXT_URL = "http://wifitest.adafruit.com/testwifi/index.html"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect("ssid", "passw0rd")
while not wlan.isconnected() and wlan.status() >= 0:
    print(f"Connected? {wlan.isconnected()} Status? {wlan.status()}")
    time.sleep(1)
print(wlan.ifconfig()[0])

# increase delay between requests each time
interval_sec = 0
increment_sec = 60
timer_sec = time.time() - interval_sec
while True:
    if time.time() - timer_sec > interval_sec:
        try:
            r = requests.get(TEXT_URL)
            print(f"{interval_sec:>5} {r.status_code} {r.reason.decode()} {r.content}")
            r.close()
            interval_sec += increment_sec
        except OSError as e:
            print(e)
            machine.reset()
        timer_sec = time.time()

Output:

Connected? False Status? 1
192.168.6.198
    0 200 OK b'This is a test of Adafruit WiFi!\nIf you can read this, its working :)'
   60 200 OK b'This is a test of Adafruit WiFi!\nIf you can read this, its working :)'
  120 200 OK b'This is a test of Adafruit WiFi!\nIf you can read this, its working :)'
  180 200 OK b'This is a test of Adafruit WiFi!\nIf you can read this, its working :)'
  240 200 OK b'This is a test of Adafruit WiFi!\nIf you can read this, its working :)'
-2

Possibly related to power-saving mode (wlan.config(pm = 0xa11140)) described in section 3.6.3 here.

Documented here and here.

Addendum: Pinging the device periodically from an external source also seems to extend accessibility of the network.

Addendum 2: Toggling the LED via the wifi module gives mixed results keeping the network alive, other factors may be at work. But the early test with network failure in Power-Saving off mode was perhaps spurious. A subsequent run has shown a longer interval possible between network operations.

The SDK doc indicates "Both the low level cyw43_driver and the lwIP stack require periodic servicing" (p.265), but it's not clear to me what those intervals are or how to recover the network from lack of servicing without a hard reset of the board after an OSError: -2.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0