80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
|
|
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()
|