Skip to content

Raspberry Pi Pico W network becomes inaccessible when not used for some time #9455

@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

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy