import network
import socket
import time
from machine import Pin
# Nastavení vestavěné LED
led = Pin("LED", Pin.OUT)
led_stav = "Vypnuto"
# Název a heslo pro Wi-Fi síť, kterou Pico vytvoří
SSID_AP = "PicoW-LED-Server"
PASSWORD_AP = "pico12345" # Heslo musí mít alespoň 8 znaků
# Nastavení režimu Access Point (AP)
ap = network.WLAN(network.AP_IF)
ap.config(essid=SSID_AP, password=PASSWORD_AP)
ap.active(True)
# Čekání na aktivaci AP
while not ap.active():
time.sleep(1)
print("Access Point aktivní.")
print("Připojte se k Wi-Fi síti:", SSID_AP)
print("IP adresa serveru je:", ap.ifconfig()[0])
# Funkce pro generování HTML stránky
def web_page():
global led_stav
html = f"""
<!DOCTYPE html>
<html>
<head>
<title>Pico W LED</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
html {{ font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center; }}
h1 {{ color: #0F3376; }}
button {{ background-color: #4CAF50; border: none; color: white; padding: 16px 40px;
text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer; }}
a {{ text-decoration: none; }}
</style>
</head>
<body>
<h1>Raspberry Pi Pico W - LED</h1>
<p>Stav LED: <strong>{led_stav}</strong></p>
<a href="/?led=on"><button>ZAPNOUT</button></a>
<a href="/?led=off"><button>VYPNOUT</button></a>
</body>
</html>
"""
return html
s = None # Inicializujeme proměnnou pro socket
try:
# Otevření socketu
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
# NOVÝ ŘÁDEK: Umožní znovu použít stejnou adresu, řeší chybu EADDRINUSE
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(1)
print('Poslouchám na:', addr)
# Hlavní smyčka pro obsluhu požadavků
while True:
cl, addr = s.accept()
print('Klient připojen z', addr)
request = cl.recv(1024)
request = str(request)
# Zpracování požadavku
led_on = request.find('/?led=on')
led_off = request.find('/?led=off')
if led_on == 6:
print("LED ZAPNUTA")
led.on()
led_stav = "Zapnuto"
if led_off == 6:
print("LED VYPNUTA")
led.off()
led_stav = "Vypnuto"
# Odeslání odpovědi (HTML stránky)
response = web_page()
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
finally:
# TENTO BLOK SE SPUSTÍ VŽDY PŘI UKONČENÍ PROGRAMU
# Zajistí korektní uvolnění prostředků
if s:
s.close()
ap.active(False)
print("Socket uzavřen, AP deaktivován.")