import network import socket import time import machine import config from machine import Pin relay1 = Pin(config.RELAY1_PIN, Pin.OUT) relay2 = Pin(config.RELAY2_PIN, Pin.OUT) door_sensor1 = Pin(config.DOOR1_SENSOR_PIN, Pin.IN, Pin.PULL_UP) door_sensor2 = Pin(config.DOOR2_SENSOR_PIN, Pin.IN, Pin.PULL_UP) relay1.value(config.RELAY_OFF) relay2.value(config.RELAY_OFF) last_press_time = {"door1": 0, "door2": 0} wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(config.WIFI_SSID, config.WIFI_PASSWORD) max_retries = 30 while not wlan.isconnected() and max_retries > 0: time.sleep(1) max_retries -= 1 if wlan.isconnected(): wlan.ifconfig((config.STATIC_IP, config.SUBNET, config.GATEWAY, config.DNS)) ip_address = config.STATIC_IP else: ip_address = None def toggle_door(door_num): current_time = int(time.time()) door_key = f"door{door_num}" if current_time - last_press_time[door_key] < config.PRESS_COOLDOWN: return False last_press_time[door_key] = current_time if door_num == 1: relay1.value(config.RELAY_ON) else: relay2.value(config.RELAY_ON) time.sleep(0.5) if door_num == 1: relay1.value(config.RELAY_OFF) else: relay2.value(config.RELAY_OFF) return True def get_door_status(door_num): if door_num == 1: sensor = door_sensor1 else: sensor = door_sensor2 return "open" if sensor.value() == config.DOOR_OPEN else "closed" def get_html(status1, status2, msg="", client_ip=""): return ( """ Garage Door Control

Garage Door Control

Door 1

Door is """ + status1.upper() + """

Door 2

Door is """ + status2.upper() + """
""" + ('
' + msg + "
" if msg else "") + """

Activity Log

IP: """ + (ip_address or "Not connected") + """
""" ) def web_server(): addr = socket.getaddrinfo("0.0.0.0", 80)[0][-1] s = socket.socket() s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(addr) s.listen(1) while True: try: cl, addr = s.accept() client_ip = addr[0] request = cl.recv(1024) request_str = request.decode("utf-8") message = "" if "POST" in request_str: if "toggle1" in request_str: if toggle_door(1): message = "" else: message = "Please wait before pressing again" elif "toggle2" in request_str: if toggle_door(2): message = "" else: message = "Please wait before pressing again" status1 = get_door_status(1) status2 = get_door_status(2) response = get_html(status1, status2, message, client_ip) cl.send("HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n") cl.send(response) cl.close() except Exception as e: pass if __name__ == "__main__": if ip_address: print("Connected, IP:", ip_address) web_server() else: print("Failed to connect to WiFi")