import network import ujson import ure as re import usocket as socket import time class Setup: def __init__(self): self.ap_ssid = "Growsystem" self.ap_password = "12345678" self.wlans = [] self.selected_ssid = "" self.wlan_password = "" self.pin = "" self.html = """ Pico Setup

Setup Pico

SSID:
Password:
PIN:
""" def scan_wlans(self): print("Scan WLANs") wlan = network.WLAN(network.STA_IF) wlan.active(True) self.wlans = [w[0].decode() for w in wlan.scan()] print("Found:", self.wlans) wlan.active(False) def start_ap_mode(self): self.ap = network.WLAN(network.AP_IF) self.ap.active(True) while self.ap.active() == False: pass self.ap.config(essid=self.ap_ssid, password=self.ap_password) print("AP SSID:", self.ap.config("essid")) # print("AP Password:", self.ap.config("password")) def stop_ap_mode(self): ap = network.WLAN(network.AP_IF) ap.active(False) def start_webserver(self): addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) print("Listening on", addr) while True: conn, addr = s.accept() print("Got a connection from", addr) request = conn.recv(1024) print("Content =", request) conn.send("HTTP/1.1 200 OK\n") conn.send("Content-Type: text/html\n") conn.send("Connection: close\n\n") conn.sendall(self.html.format(''.join([''.format(w, w) for w in self.wlans]))) conn.close() def parse_request(self, request): request = request.decode() ssid_match = re.search("ssid=([^&]+)", request) if ssid_match: self.selected_ssid = ssid_match.group(1) password_match = re.search("password=([^&]+)", request) if password_match: self.wlan_password = password_match.group(1) pin_match = re.search("pin=([^&]+)", request) if pin_match: self.pin = pin_match.group(1) def save_config(self): config = { "ssid": self.selected_ssid, "password": self.wlan_password, "pin": self.pin } with open("initial_config.py", "w") as f: f.write("config = " + ujson.dumps(config)) def switch_to_client_mode(self): ap = network.WLAN(network.AP_IF) ap.active(False) wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(self.selected_ssid, self.wlan_password) while not wlan.isconnected(): time.sleep(1) print("Connected to", self.selected_ssid) def setup_pico(self): print("Start PICO setup") self.scan_wlans() self.start_ap_mode() self.start_webserver() while True: conn, addr = self.s.accept() request = conn.recv(1024) self.parse_request(request) self.save_config() conn.close() break # Assuming only one request is handled self.stop_ap_mode() self.switch_to_client_mode()