from enum import Enum, auto import machine import network import urequests as requests class ButtonState(Enum): IDLE = auto() FWD_1 = auto() FWD_2 = auto() FWD_RDY = auto() REV_1 = auto() REV_2 = auto() REV_RDY = auto() def check_forward_1(handler): if handler.total_change > 30: led_red2.on() handler.reset() return ButtonState.FWD_2 return ButtonState.FWD_1 def check_forward_2(handler): global button_triggered if handler.total_change > 30 and wifi.isconnected(): led_green.on() button_triggered = False return ButtonState.FWD_RDY return ButtonState.FWD_2 def check_forward_trigger(handler): if (button_triggered): # Ping overlay server led_red1.off() led_red2.off() led_green.off() return ButtonState.IDLE return ButtonState.FWD_RDY button_triggered = False def button_handler(pin): global button_triggered button_triggered = True def time_up(timer): global current_state, current_pos current_state = ButtonState.IDLE current_pos = 0 input_handler.reset() def dummy_cb(*args, **kwargs): return current_state def get_state_handler(state): handler_map = { ButtonState.FWD_1: check_forward_1, ButtonState.FWD_2: check_forward_2, ButtonState.FWD_RDY: check_forward_trigger } return handler_map.get(state, dummy_cb) activity_timeout = machine.Timer(-1) current_pos = input_handler.total_change current_state = ButtonState.IDLE while True: while current_state == ButtonState.IDLE: machine.lightsleep(CONFIG['logic']['sleep_time'] * 1000) if input_handler.total_change - current_pos > CONFIG['logic']['wake_threshold']: current_state = ButtonState.FWD_1 elif current_pos - input_handler.total_change > CONFIG['logic']['wake_threshold']: current_state = ButtonState.REV_1 wifi = network.WLAN(network.STA_IF) wifi.active(True) wifi.connect(config['wifi']['ssid'], config['wifi']['password']) led_red1.on() activity_timeout.init(mode=machine.Timer.ONE_SHOT, callback=time_up, period=CONFIG['logic']['active_time'] * 1000) input_handler.reset() while current_state != ButtonState.IDLE: machine.lightSleep(100) handler_func = get_state_handler(current_state) current_state = handler_func(input_handler) wifi.active(False) """ from machine import Pin, Signal LED_PIN = Signal(13, Pin.OUT, invert=False) BUTTON_PIN = Pin(0, Pin.IN) # Turn off "ready" LED LED_PIN.off() # Read configuration from JSON file with open('config.json') as fd: import ujson config = ujson.load(fd) # Configure wireless networking import network wifi_host = network.WLAN(network.AP_IF) wifi_host.active(False) wifi_guest = network.WLAN(network.STA_IF) wifi_guest.active(True) if not wifi_guest.isconnected(): wifi_guest.connect(config['wifi']['ssid'], config['wifi']['password']) while not wifi_guest.isconnected(): pass print(wifi_guest.ifconfig()) # Set up interrupt handler BUTTON_PIN.irq(button_handler, Pin.IRQ_RISING) # Turn on "ready" LED LED_PIN.on() # Enter main loop import time while True: if button_triggered: import urequests as requests LED_PIN.off() btn_id = config['buttonId'] endpoint = 'http://192.168.0.212:42069/rdp?id={0}'.format(btn_id) res = requests.get(endpoint) # print(res.status_code) time.sleep(5) button_triggered = False LED_PIN.on() else: time.sleep(1) """