From 12291d46ce66c14474bf5d3f0f61ccf08e867077 Mon Sep 17 00:00:00 2001 From: Ben Nicholson Date: Sun, 1 Mar 2026 21:15:28 +1100 Subject: [PATCH] Add ESP32-pair/ben_cuelight.py --- ESP32-pair/ben_cuelight.py | 106 +++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 ESP32-pair/ben_cuelight.py diff --git a/ESP32-pair/ben_cuelight.py b/ESP32-pair/ben_cuelight.py new file mode 100644 index 0000000..007e391 --- /dev/null +++ b/ESP32-pair/ben_cuelight.py @@ -0,0 +1,106 @@ +# upload with `mpremote ben_cuelight.py :main.py` when connected with serial + +import espnow +from machine import Pin, Timer +import network +import time +import ubinascii + +# io0 = Pin(0, Pin.IN) +led = Pin(23, Pin.OUT) +led.value(1) +# turn off after 5s +Timer(0).init(mode=Timer.ONE_SHOT, period=5000, callback=lambda _: led.value(0)) + +print("Ben Cuelight Starting...") + +# ESPNow https://docs.micropython.org/en/latest/library/espnow.html +sta = network.WLAN(network.WLAN.IF_STA) +sta.active(True) + +def nice_mac(bys): return ubinascii.hexlify(bys, ":").decode() + +my_mac = sta.config("mac") + +MOS_X4_MAC = b"\x00\x70\x07\x7C\xDB\xC8" +ETH_01_MAC = b"\x14\x08\x08\x9E\xA1\x94" + +print("MAC Address", nice_mac(my_mac)) + +e = espnow.ESPNow() +e.active(True) +print("ESPNow active") + + +def wait_change(pin): + # wait for pin to change value + # it needs to be stable for a continuous 20ms + cur_value = pin.value() + active = 0 + while active < 20: + if pin.value() != cur_value: + active += 1 + else: + active = 0 + time.sleep(0.001) + + +def mos_x4(): + print("I am: MOS_X4") + + mos1 = Pin(16, Pin.OUT) # flash + mos2 = Pin(17, Pin.OUT) + mos3 = Pin(26, Pin.OUT) + mos4 = Pin(27, Pin.OUT) # mute-state + + flash = mos1 + mute = mos4 + + mute.value(0) + flash.value(0) + + timer = Timer(1) + + while True: + host, msg = e.recv() + if msg and host == ETH_01_MAC: + if msg[0] == 1: + # on + print("on") + mute.value(1) + timer.init(mode=Timer.PERIODIC, period=1000, callback=lambda _: flash.toggle()) + elif msg[0] == 0: + # off + print("off") + mute.value(0) + flash.value(0) + timer.deinit() + else: + # ???? + print("??", msg, msg[0]) + ... + +def eth_01(): + print("I am: ETH_01") + + peer = MOS_X4_MAC + e.add_peer(peer) + + button = Pin(12, Pin.IN, Pin.PULL_UP) + + remote_state_on = False + + while True: + wait_change(button) + if button.value() == 0: + remote_state_on = not remote_state_on + print("Setting remote to:", "on" if remote_state_on else "off") + e.send(peer, bytes([1 if remote_state_on else 0])) + + +if my_mac == MOS_X4_MAC: + mos_x4() +elif my_mac == ETH_01_MAC: + eth_01() +else: + print("Unknown device!!!", my_mac)