Created
February 2, 2023 16:35
-
-
Save aallan/86ffa49e5fa16ee114988bc5fbd04057 to your computer and use it in GitHub Desktop.
A webserver on a Raspberry Pi Pico W controlling the onboard LED.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import network | |
import socket | |
import time | |
from machine import Pin | |
led = Pin("LED", Pin.OUT) | |
ssid = 'SSID' | |
password = 'PASSWORD' | |
wlan = network.WLAN(network.STA_IF) | |
wlan.active(True) | |
wlan.connect(ssid, password) | |
html = """<!DOCTYPE html> | |
<html> | |
<head> <title>Pico W</title> </head> | |
<body> <h1>Pico W</h1> | |
<p>%s</p> | |
<form action="%s"> | |
<input type="submit" value="%s" /> | |
</form> | |
</body> | |
</html> | |
""" | |
max_wait = 10 | |
while max_wait > 0: | |
if wlan.status() < 0 or wlan.status() >= 3: | |
break | |
max_wait -= 1 | |
print('waiting for connection...') | |
time.sleep(1) | |
if wlan.status() != 3: | |
raise RuntimeError('network connection failed') | |
else: | |
print('connected') | |
status = wlan.ifconfig() | |
print( 'ip = ' + status[0] ) | |
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] | |
s = socket.socket() | |
s.bind(addr) | |
s.listen(1) | |
print('listening on', addr) | |
# Listen for connections | |
while True: | |
try: | |
cl, addr = s.accept() | |
print('client connected from', addr) | |
request = cl.recv(1024) | |
print(request) | |
request = str(request) | |
led_on = request.find('/light/on') | |
led_off = request.find('/light/off') | |
favicon = request.find('/favicon.ico') | |
print( 'led on = ' + str(led_on)) | |
print( 'led off = ' + str(led_off)) | |
print( 'favicon = ' + str(favicon)) | |
if favicon == 6: | |
print("request for favicon. ignore.") | |
elif led_on == 6: | |
print("led on") | |
led.value(1) | |
stateis = "LED is ON" | |
linkis = "http://"+status[0]+"/light/off" | |
textis = "Turn LED OFF" | |
elif led_off == 6: | |
print("led off") | |
led.value(0) | |
stateis = "LED is OFF" | |
linkis = "http://"+status[0]+"/light/on" | |
textis = "Turn LED ON" | |
else: | |
print("unknown") | |
led.value(0) | |
stateis = "LED is OFF" | |
linkis = "http://"+status[0]+"/light/on" | |
textis = "Turn LED ON" | |
response = html % (stateis,linkis,textis) | |
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') | |
cl.send(response) | |
cl.close() | |
except OSError as e: | |
cl.close() | |
print('connection closed') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment