From 4045da89648c9cced6f97e47ba5cf2e307600642 Mon Sep 17 00:00:00 2001 From: "Adrian A. Baumann" Date: Tue, 21 Apr 2026 01:39:26 +0200 Subject: [PATCH] WiFi changes again --- gauge.py | 82 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 37 deletions(-) diff --git a/gauge.py b/gauge.py index 976b85a..77d3f7c 100644 --- a/gauge.py +++ b/gauge.py @@ -524,46 +524,62 @@ _DEVICE = { _wifi_check_interval_ms = 30000 _last_wifi_check = 0 _wifi_sta = None +_WIFI_CONNECT_ATTEMPTS = 3 + + +def _reset_wifi_interface(): + global _wifi_sta + _wifi_sta = network.WLAN(network.STA_IF) + try: + _wifi_sta.disconnect() + except Exception: + pass + try: + _wifi_sta.active(False) + utime.sleep_ms(500) + except Exception: + pass + _wifi_sta.active(True) + utime.sleep_ms(500) def connect_wifi(ssid, password, timeout_s=15, force_reconnect=False): global _wifi_sta _wifi_sta = network.WLAN(network.STA_IF) - if force_reconnect: - try: - _wifi_sta.disconnect() - except Exception: - pass - try: - _wifi_sta.active(False) - utime.sleep_ms(250) - except Exception: - pass - - _wifi_sta.active(True) if _wifi_sta.isconnected() and not force_reconnect: ip, mask, gw, dns = _wifi_sta.ifconfig() info("WiFi already connected") info(f" IP:{ip} mask:{mask} gw:{gw} dns:{dns}") utime.sleep_ms(250) return ip - info(f"WiFi connecting to '{ssid}' ...") - _wifi_sta.connect(ssid, password) - deadline = utime.time() + timeout_s - while not _wifi_sta.isconnected(): - if utime.time() > deadline: - log_err(f"WiFi connect timeout after {timeout_s}s") - raise OSError("WiFi connect timeout") - utime.sleep_ms(200) - ip, mask, gw, dns = _wifi_sta.ifconfig() - mac = ":".join(f"{b:02x}" for b in _wifi_sta.config("mac")) - info("WiFi connected!") - info(f" SSID : {ssid}") - info(f" MAC : {mac}") - info(f" IP : {ip} mask:{mask} gw:{gw} dns:{dns}") - utime.sleep_ms(250) - return ip + + last_error = None + for attempt in range(_WIFI_CONNECT_ATTEMPTS): + info(f"WiFi connecting to '{ssid}' (attempt {attempt + 1}/{_WIFI_CONNECT_ATTEMPTS}) ...") + _reset_wifi_interface() + try: + _wifi_sta.connect(ssid, password) + deadline = utime.time() + timeout_s + while not _wifi_sta.isconnected(): + if utime.time() > deadline: + raise OSError("WiFi connect timeout") + utime.sleep_ms(250) + + ip, mask, gw, dns = _wifi_sta.ifconfig() + mac = ":".join(f"{b:02x}" for b in _wifi_sta.config("mac")) + info("WiFi connected!") + info(f" SSID : {ssid}") + info(f" MAC : {mac}") + info(f" IP : {ip} mask:{mask} gw:{gw} dns:{dns}") + utime.sleep_ms(500) + return ip + except Exception as e: + last_error = e + log_err(f"WiFi connect attempt {attempt + 1} failed: {e}") + utime.sleep_ms(1000) + + raise last_error def check_wifi(): @@ -581,15 +597,7 @@ def check_wifi(): log_err("WiFi lost connection — attempting reconnect...") try: - _wifi_sta.active(True) - _wifi_sta.connect(WIFI_SSID, WIFI_PASSWORD) - deadline = utime.time() + 15 - while not _wifi_sta.isconnected(): - if utime.time() > deadline: - log_err("WiFi reconnect timeout") - return - utime.sleep_ms(200) - ip, mask, gw, dns = _wifi_sta.ifconfig() + ip = connect_wifi(WIFI_SSID, WIFI_PASSWORD, timeout_s=15, force_reconnect=True) info(f"WiFi reconnected! IP:{ip}") except Exception as e: log_err(f"WiFi reconnect failed: {e}")