29 lines
1012 B
Python
29 lines
1012 B
Python
import network
|
|
|
|
class WiFiUtil:
|
|
def __init__(self):
|
|
self.wlan = network.WLAN(network.STA_IF)
|
|
self.wlan.active(True)
|
|
|
|
def scan(self):
|
|
"""Scans for networks and returns a list of dictionaries with ssid and rssi."""
|
|
print("Scanning for Wi-Fi networks...")
|
|
networks = self.wlan.scan()
|
|
result = []
|
|
for net in networks:
|
|
# network tuple: (ssid, bssid, channel, RSSI, authmode, hidden)
|
|
try:
|
|
ssid = net[0].decode('utf-8')
|
|
except Exception:
|
|
try:
|
|
ssid = ''.join(chr(b) if 32 <= b < 127 else '?' for b in net[0])
|
|
except Exception:
|
|
ssid = "<Unknown SSID>"
|
|
rssi = net[3]
|
|
if ssid: # Filter out hidden/empty SSIDs
|
|
result.append({"ssid": ssid, "rssi": rssi})
|
|
|
|
# Sort by signal strength (RSSI) descending
|
|
result.sort(key=lambda x: x['rssi'], reverse=True)
|
|
return result
|