Skip to content

Instantly share code, notes, and snippets.

@aallan
Created February 2, 2023 16:35
Show Gist options
  • Save aallan/86ffa49e5fa16ee114988bc5fbd04057 to your computer and use it in GitHub Desktop.
Save aallan/86ffa49e5fa16ee114988bc5fbd04057 to your computer and use it in GitHub Desktop.
A webserver on a Raspberry Pi Pico W controlling the onboard LED.
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