import network
import machine
import socket
import time
# Konfiguracja WiFi
SSID = "Wokwi-GUEST"
PASSWORD = ""
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
print("Łączenie z WiFi...")
sta_if.connect(SSID, PASSWORD)
timeout = 10 # Limit czasu na połączenie
while not sta_if.isconnected() and timeout > 0:
print("Czekam na połączenie...")
time.sleep(1)
timeout -= 1
if sta_if.isconnected():
print("Połączono z WiFi!")
print("Adres IP:", sta_if.ifconfig()[0])
else:
print("Błąd: Nie udało się połączyć z WiFi!")
print("Status:", sta_if.status())
# Konfiguracja pinów
relay = machine.Pin(26, machine.Pin.OUT) # Przekaźnik
led_status = machine.Pin(2, machine.Pin.OUT) # LED statusu ESP32
sensor_open = machine.Pin(14, machine.Pin.IN, machine.Pin.PULL_UP) # Krańcówka otwierania (DIP 8)
sensor_closed = machine.Pin(27, machine.Pin.IN, machine.Pin.PULL_UP) # Krańcówka zamykania (DIP 1)
gpio25 = machine.Pin(25, machine.Pin.OUT) # Sygnał sterujący GPIO25
led2 = machine.Pin(12, machine.Pin.OUT) # LED podłączona do NC przekaźnika
led3 = machine.Pin(13, machine.Pin.OUT) # LED podłączona do NO przekaźnika
# Funkcja do aktualizacji stanu LED2 i LED3 w zależności od przekaźnika
def update_leds():
if relay.value() == 1:
led2.value(0) # NC (Normalnie Zamknięty) wyłączony
led3.value(1) # NO (Normalnie Otwarty) włączony
else:
led2.value(1) # NC (Normalnie Zamknięty) włączony
led3.value(0) # NO (Normalnie Otwarty) wyłączony
# Tworzenie serwera HTTP
def start_server():
global relay_active
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)
print("Serwer HTTP uruchomiony...")
while True:
try:
conn, addr = s.accept()
print('Połączenie z:', addr)
request = conn.recv(1024).decode()
print("Żądanie:", request)
if "/open" in request:
print("Otwieranie bramy...")
relay.value(1) # Włącz przekaźnik
gpio25.value(1) # Ustaw GPIO25 na wysoki stan
led_status.value(1)
update_leds()
# Czekamy na osiągnięcie krańcówki otwarcia
while sensor_open.value() == 1:
time.sleep(0.1)
print("Brama otwarta!")
relay.value(0) # Wyłącz przekaźnik
gpio25.value(0) # Ustaw GPIO25 na niski stan
update_leds()
elif "/close" in request:
print("Zamykanie bramy...")
relay.value(1) # Włącz przekaźnik
gpio25.value(0) # Ustaw GPIO25 na niski stan
led_status.value(1)
update_leds()
# Czekamy na osiągnięcie krańcówki zamknięcia
while sensor_closed.value() == 1:
time.sleep(0.1)
print("Brama zamknięta!")
relay.value(0) # Wyłącz przekaźnik
update_leds()
# Odczyt czujników krańcowych
brama_otwarta = "TAK" if sensor_open.value() == 0 else "NIE"
brama_zamknieta = "TAK" if sensor_closed.value() == 0 else "NIE"
# Odpowiedź HTTP
response = f"""HTTP/1.1 200 OK
Content-Type: text/html
<html>
<head><title>Stan Bramy</title></head>
<body>
<h1>Stan Bramy</h1>
<p>Otwarta: {brama_otwarta}</p>
<p>Zamknieta: {brama_zamknieta}</p>
<p><a href="/open">Otworz</a> | <a href="/close">Zamknij</a></p>
</body>
</html>
"""
conn.send(response.encode())
conn.close()
except Exception as e:
print("Blad serwera:", e)
conn.close()
start_server()
LEFT
RIGHT
PWR MOTOR