import time
time.sleep(0.1) # Wait for USB to become ready
print("Hello, Pi Pico W!")
import machine
import network
import socket
import time
from machine import Pin, PWM
# ==================== Wokwi WiFi 固定 ====================
WIFI_SSID = "Wokwi-GUEST"
WIFI_PASSWORD = ""
import network
import time
print("Connecting to WiFi", end="")
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect('Wokwi-GUEST', '')
while not sta_if.isconnected():
print(".", end="")
time.sleep(0.1)
print(" Connected!")
# 6路灯光引脚
PINS = [2,3,4,5,6,7]
KEY_PIN = 17
# ========================================================
# 初始化6路PWM
lights = []
for pin in PINS:
pwm = PWM(Pin(pin))
pwm.freq(1000)
pwm.duty_u16(0)
lights.append(pwm)
key = Pin(KEY_PIN, Pin.IN, Pin.PULL_UP)
light_states = [False]*6
brightness = 32768 # 50%亮度
last_key_time = 0
# ---------------- WiFi连接 ----------------
def connect_wifi():
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
print("Connecting Wokwi-GUEST...")
wlan.connect(WIFI_SSID, WIFI_PASSWORD)
for _ in range(30):
if wlan.isconnected():
break
time.sleep(0.1)
if wlan.isconnected():
ip = wlan.ifconfig()[0]
print("IP:", ip)
print("http://"+ip)
return ip
else:
print("WiFi Fail")
return None
# ---------------- 按键总开关 ----------------
def key_handler(pin):
global last_key_time
current_time = time.ticks_ms()
if current_time - last_key_time > 200:
any_on = any(light_states)
for i in range(6):
light_states[i] = not any_on
lights[i].duty_u16(brightness if light_states[i] else 0)
print("KEY ALL", "OFF" if any_on else "ON")
last_key_time = current_time
key.irq(trigger=Pin.IRQ_FALLING, handler=key_handler)
# ---------------- 网页控制界面 ----------------
def web_page():
rows = ""
for i in range(6):
st = "ON" if light_states[i] else "OFF"
color = "#4CAF50" if light_states[i] else "#ccc"
rows += f'''
<div style="margin:8px">
灯光{i+1} <span style="color:{color}">{st}</span>
<a href="/on{i}"><button>开</button></a>
<a href="/off{i}"><button>关</button></a>
</div>
'''
return f"""HTTP/1.1 200 OK
Content-Type: text/html
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>6路灯光控制</title>
</head>
<body style="text-align:center; margin-top:30px">
<h2>Pico W 6路灯光控制</h2>
{rows}
<p><a href="/all_on"><button style="padding:8px 20px">全开</button></a></p>
<p><a href="/all_off"><button style="padding:8px 20px">全关</button></a></p>
</body>
</html>
"""
# ---------------- 服务器 ----------------
def start_server():
ip = connect_wifi()
if not ip:
return
s = socket.socket()
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(('0.0.0.0', 80))
s.listen(1)
while True:
try:
conn, addr = s.accept()
req = conn.recv(1024).decode()
# 单独控制
for i in range(6):
if f"/on{i}" in req:
light_states[i] = True
lights[i].duty_u16(brightness)
if f"/off{i}" in req:
light_states[i] = False
lights[i].duty_u16(0)
# 总控
if "/all_on" in req:
for i in range(6):
light_states[i] = True
lights[i].duty_u16(brightness)
if "/all_off" in req:
for i in range(6):
light_states[i] = False
lights[i].duty_u16(0)
conn.send(web_page())
conn.close()
except:
conn.close()
if __name__ == "__main__":
try:
ip_address = connect_wifi()
start_server(ip_address)
except KeyboardInterrupt:
print("\n程序已停止")