import gc import machine import network import utime from presets import Presets from settings import Settings def initialize_runtime(): machine.freq(160000000) settings = Settings() print(settings) wdt = machine.WDT(timeout=10000) wdt.feed() gc.collect() print("mem before presets:", {"free": gc.mem_free(), "alloc": gc.mem_alloc()}) presets = Presets(settings["led_pin"], settings["num_leds"]) presets.load(settings) presets.b = settings.get("brightness", 255) presets.debug = bool(settings.get("debug", False)) gc.collect() print("mem after presets:", {"free": gc.mem_free(), "alloc": gc.mem_alloc()}) default_preset = settings.get("default", "") if default_preset and default_preset in presets.presets: if presets.select(default_preset): print("Selected startup preset:", default_preset) else: print("Startup preset failed (invalid pattern?):", default_preset) # On ESP32-C3, soft reboots can leave Wi-Fi driver state allocated. # Reset both interfaces and collect before bringing STA up. ap_if = network.WLAN(network.AP_IF) ap_if.active(False) sta_if = network.WLAN(network.STA_IF) if sta_if.active(): sta_if.active(False) utime.sleep_ms(100) gc.collect() sta_if.active(True) sta_if.config(pm=network.WLAN.PM_NONE) sta_if.connect(settings["ssid"], settings["password"]) while not sta_if.isconnected(): utime.sleep(1) wdt.feed() print(sta_if.ifconfig()) return settings, presets, wdt, sta_if