From af9b63565a2e25681544a935515511ffef897b69 Mon Sep 17 00:00:00 2001 From: jimmy Date: Wed, 15 Oct 2025 18:48:51 +1300 Subject: [PATCH] Remove web interface --- src/main.py | 103 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 39 deletions(-) diff --git a/src/main.py b/src/main.py index 6e8c54c..0f1173c 100644 --- a/src/main.py +++ b/src/main.py @@ -1,54 +1,79 @@ -import asyncio -import aioespnow + 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 +import asyncio +import json +import machine -async def main(): +def main(): settings = 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"])) - - async def tick(): - while True: - patterns.tick() - await asyncio.sleep_ms(0) - - async def system(): - while True: - gc.collect() - for i in range(60): - wdt.feed() - await asyncio.sleep(1) - - w = web(settings, patterns) print(settings) - # start the server in a bacakground task - print("Starting") - server = asyncio.create_task(w.start_server(host="0.0.0.0", port=80)) + + 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() - asyncio.create_task(tick()) - asyncio.create_task(p2p(settings, patterns)) - asyncio.create_task(system()) + #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) - # cleanup before ending the application - await server + patterns.select(patterns.selected) + print("Selected pattern", patterns.selected) -asyncio.run(main()) + except Exception as ex: + print(f"Failed to load espnow data {last_msg}: {ex}") + continue + finally: + gc.collect() +main()