import asyncio import aioespnow import patterns from settings import Settings from web import web from patterns import Patterns import gc import utime import machine import time import wifi import json from p2p import p2p import espnow import network def main(): settings = Settings() print(settings) patterns = Patterns(settings["led_pin"], settings["num_leds"], selected=settings["pattern"]) if settings["color_order"] == "rbg": color_order = (1, 5, 3) else: color_order = (1, 3, 5) patterns.set_color1(tuple(int(settings["color1"][i:i+2], 16) for i in color_order)) patterns.set_color2(tuple(int(settings["color2"][i:i+2], 16) for i in color_order)) patterns.set_brightness(int(settings["brightness"])) patterns.set_delay(int(settings["delay"])) sta_if = network.WLAN(network.STA_IF) sta_if.active(True) e = espnow.ESPNow() e.active(True) wdt = machine.WDT(timeout=10000) wdt.feed() while True: patterns.tick() wdt.feed() host, msg = e.recv(0) if msg: try: data = json.loads(msg) print(data) defaults = data.get("d", {}) bar = data.get(settings.get("name"), {}) patterns.set_brightness(bar.get("brightness", defaults.get("brightness", 100))) patterns.set_delay(bar.get("delay", defaults.get("delay", 100))) colors = bar.get("colors", defaults.get("colors", ["#000000", "#000000"])) patterns.colors = [tuple(int(color[i:i+2], 16) for i in settings.color_order) for color in colors] patterns.select(bar.get("pattern", defaults.get("pattern", "off"))) patterns.n1 = bar.get("n1", defaults.get("n1", 0)) patterns.n2 = bar.get("n2", defaults.get("n2", 58)) patterns.on_width = bar.get("on_width", defaults.get("on_width", 1)) patterns.off_width = bar.get("off_width", defaults.get("off_width", 2)) patterns.oneshot = bar.get("oneshot", defaults.get("oneshot", False)) patterns.beat = bar.get("beat", defaults.get("beat", False)) patterns.beat_mode = bar.get("beat_mode", defaults.get("beat_mode", False)) patterns.auto = bar.get("auto", defaults.get("auto", True)) except: print(f"Failed to load espnow data {msg}") continue main()