from settings import Settings from web import web from patterns import Patterns import gc import json import espnow import network import asyncio import json import machine def main(): settings = Settings() print(settings) if settings.get("color_order", "rgb") == "rbg": color_order = (1, 5, 3) else: color_order = (1, 3, 5) patterns = Patterns(settings["led_pin"], settings["num_leds"], brightness=255) sta_if = network.WLAN(network.STA_IF) sta_if.active(True) e = espnow.ESPNow() e.config(rxbuf=1024) e.active(True) # Increase buffer size for 8-bar payloads (default 526 bytes might be too small) # Set to 1KB to handle larger multi-bar payloads wdt = machine.WDT(timeout=10000) wdt.feed() #print mac in hex print("Mac address", sta_if.config("mac").hex()) print("Patterns", patterns.colors) print("Patterns", patterns.selected) patterns.select(patterns.selected) while True: # advance pattern based on its own returned schedule # due = patterns.tick(due) wdt.feed() patterns.tick() # Drain all pending packets and only process the latest last_msg = None while True: host, msg = e.recv(0) if not msg: break last_msg = msg if last_msg: try: data = json.loads(last_msg) print(data) # Always update parameters from message patterns.brightness = data.get("brightness", patterns.brightness) patterns.delay = data.get("delay", patterns.delay) patterns.colors = data.get("colors", patterns.colors) patterns.selected = data.get("pattern", patterns.selected) patterns.n1 = data.get("n1", patterns.n1) patterns.n2 = data.get("n2", patterns.n2) patterns.n3 = data.get("n3", patterns.n3) patterns.n4 = data.get("n4", patterns.n4) patterns.step = data.get("step", patterns.step) patterns.auto = data.get("auto", patterns.auto) patterns.select(patterns.selected) print("Selected pattern", patterns.selected) except Exception as ex: print(f"Failed to load espnow data {last_msg}: {ex}") continue finally: gc.collect() main()