Refactor wifi connection into separate file
This commit is contained in:
parent
d1199575ff
commit
0365b4c3e2
46
pico/src/connection.py
Normal file
46
pico/src/connection.py
Normal 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)
|
@ -1,53 +1,9 @@
|
|||||||
import network
|
|
||||||
import asyncio
|
import asyncio
|
||||||
|
|
||||||
from statusled import StatusLED
|
from statusled import STATUS_LED
|
||||||
from log import Logger, Color
|
from log import Logger, Color
|
||||||
from sensors.ultrasonic import UltraSonicSensor
|
from sensors.ultrasonic import UltraSonicSensor
|
||||||
|
from connection import ensure_network
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
async def read_sensor():
|
async def read_sensor():
|
||||||
log = Logger("tank", Color.CYAN)
|
log = Logger("tank", Color.CYAN)
|
||||||
|
@ -30,3 +30,5 @@ class StatusLED:
|
|||||||
await asyncio.sleep(t_blink)
|
await asyncio.sleep(t_blink)
|
||||||
|
|
||||||
await asyncio.sleep(t_2)
|
await asyncio.sleep(t_2)
|
||||||
|
|
||||||
|
STATUS_LED = StatusLED()
|
||||||
|
Loading…
Reference in New Issue
Block a user