Refactor wifi connection into separate file

This commit is contained in:
Kai Vogelgesang 2025-07-07 15:54:47 +02:00
parent d1199575ff
commit 0365b4c3e2
Signed by: kai
GPG Key ID: 3FC8578CC818A9EB
3 changed files with 50 additions and 46 deletions

46
pico/src/connection.py Normal file
View File

@ -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)

View File

@ -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)

View File

@ -30,3 +30,5 @@ class StatusLED:
await asyncio.sleep(t_blink)
await asyncio.sleep(t_2)
STATUS_LED = StatusLED()