From 0365b4c3e216d23edccc87b4fd7ca4c0c38833f5 Mon Sep 17 00:00:00 2001 From: Kai Vogelgesang Date: Mon, 7 Jul 2025 15:54:47 +0200 Subject: [PATCH] Refactor wifi connection into separate file --- pico/src/connection.py | 46 ++++++++++++++++++++++++++++++++++++++++ pico/src/main.py | 48 ++---------------------------------------- pico/src/statusled.py | 2 ++ 3 files changed, 50 insertions(+), 46 deletions(-) create mode 100644 pico/src/connection.py diff --git a/pico/src/connection.py b/pico/src/connection.py new file mode 100644 index 0000000..44ec12f --- /dev/null +++ b/pico/src/connection.py @@ -0,0 +1,46 @@ +import network +import asyncio + +from log import Logger, Color +from statusled import STATUS_LED + +async def ensure_network(): + from secret import SSID, PASSWORD + log = Logger("net", Color.BLUE) + + nic = network.WLAN(network.STA_IF) + log.info("setting up WLAN interface...") + nic.active(True) + while not nic.active(): + await asyncio.sleep(0.1) + log.info("connecting...") + nic.connect(SSID, PASSWORD) + + logged = False + + status_name = { + network.STAT_CONNECT_FAIL: "CONNECT_FAIL", + network.STAT_CONNECTING: "CONNECTING", + network.STAT_IDLE: "IDLE", + network.STAT_NO_AP_FOUND: "NO_AP_FOUND", + network.STAT_WRONG_PASSWORD: "WRONG_PASSWORD" + } + + while True: + if (status := nic.status()) == network.STAT_GOT_IP: # pyright: ignore[reportAny] + STATUS_LED.status(2) + if not logged: + logged = True + log.success(f"Got IP: {nic.ifconfig()!r}") + rssi = nic.status("rssi") # pyright: ignore[reportAny] + log.info(f"{rssi=}") + else: + logged = False + STATUS_LED.status(1) + log.warning("status={}".format(status_name.get(status, f"UNKNOWN ({status})"))) # pyright: ignore[reportAny] + if status == network.STAT_CONNECT_FAIL or status == network.STAT_NO_AP_FOUND: + log.info("retrying in 3s...") + await asyncio.sleep(3) + nic.connect(SSID, PASSWORD) + + await asyncio.sleep(1) diff --git a/pico/src/main.py b/pico/src/main.py index f62539d..1b9181a 100644 --- a/pico/src/main.py +++ b/pico/src/main.py @@ -1,53 +1,9 @@ -import network import asyncio -from statusled import StatusLED +from statusled import STATUS_LED from log import Logger, Color from sensors.ultrasonic import UltraSonicSensor - -STATUS_LED = StatusLED() - -async def ensure_network(): - from secret import SSID, PASSWORD - log = Logger("net", Color.BLUE) - - nic = network.WLAN(network.STA_IF) - log.info("setting up WLAN interface...") - nic.active(True) - while not nic.active(): - await asyncio.sleep(0.1) - log.info("connecting...") - nic.connect(SSID, PASSWORD) - - logged = False - - status_name = { - network.STAT_CONNECT_FAIL: "CONNECT_FAIL", - network.STAT_CONNECTING: "CONNECTING", - network.STAT_IDLE: "IDLE", - network.STAT_NO_AP_FOUND: "NO_AP_FOUND", - network.STAT_WRONG_PASSWORD: "WRONG_PASSWORD" - } - - while True: - if (status := nic.status()) == network.STAT_GOT_IP: # pyright: ignore[reportAny] - STATUS_LED.status(2) - if not logged: - logged = True - log.success(f"Got IP: {nic.ifconfig()!r}") - rssi = nic.status("rssi") # pyright: ignore[reportAny] - log.info(f"{rssi=}") - else: - logged = False - STATUS_LED.status(1) - log.warning("status={}".format(status_name.get(status, f"UNKNOWN ({status})"))) # pyright: ignore[reportAny] - if status == network.STAT_CONNECT_FAIL or status == network.STAT_NO_AP_FOUND: - log.info("retrying in 3s...") - await asyncio.sleep(3) - nic.connect(SSID, PASSWORD) - - await asyncio.sleep(1) - +from connection import ensure_network async def read_sensor(): log = Logger("tank", Color.CYAN) diff --git a/pico/src/statusled.py b/pico/src/statusled.py index a8f18b9..e0b526a 100644 --- a/pico/src/statusled.py +++ b/pico/src/statusled.py @@ -30,3 +30,5 @@ class StatusLED: await asyncio.sleep(t_blink) await asyncio.sleep(t_2) + +STATUS_LED = StatusLED()