In this article we will show you how to control the onboard LED of the Pico W using a Web Server.
Code
At the most basic we simply create a html web page which will be served up when an IP address is assigned
We then supply 2 links, one to switch the on board LED on and one to switch it off. There is also debug in the shell, in my case Thonny which is useful for showing the assigned IP address and other debug
Again change the following to match your own Wifi setup
ssid = ‘wifi name here’
password = ‘wifi password here’
import network import socket import time import machine from machine import Pin picoled = machine.Pin("LED", machine.Pin.OUT) ssid = 'wifi name here' password = 'wifi password here' wlan = network.WLAN(network.STA_IF) wlan.active(True) wlan.connect(ssid, password) html = """<!DOCTYPE html> <html> <head> <title>Pico W LED toggle</title> </head> <body> <h1>Pico W LED toggle</h1> <p>PICO W LED toggle</p> <p> <a href='/light/on'>Turn Light On</a> </p> <p> <a href='/light/off'>Turn Light Off</a> </p> <br> </body> </html> """ # Try and connect max_retries = 10 while max_retries > 0: if wlan.status() < 0 or wlan.status() >= 3: break max_retries -= 1 print('waiting for a connection...') time.sleep(1) # Handle connection error if wlan.status() != 3: raise RuntimeError('network connection failed') else: print('connected') status = wlan.ifconfig() print( 'ip = ' + status[0] ) # Open socket myaddress = socket.getaddrinfo('0.0.0.0', 80)[0][-1] mysocket = socket.socket() mysocket.bind(myaddress) mysocket.listen(1) print('listening on', myaddress) ledstate = "" # Listen for connections while True: try: myclient, myaddress = mysocket.accept() print('client connected from', myaddress) request = myclient.recv(1024) print(request) request = str(request) led_on = request.find('/light/on') led_off = request.find('/light/off') print( 'led on = ' + str(led_on)) print( 'led off = ' + str(led_off)) if led_on == 6: print("led is on") picoled.value(1) ledstate = "LED is ON" if led_off == 6: print("led is off") picoled.value(0) ledstate = "LED is OFF" response = html + ledstate myclient.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') myclient.send(response) myclient.close() except OSError as e: myclient.close() print('connection closed')
Now run the code and look at the shell window to get your IP address
This is what I saw
waiting for a connection... waiting for a connection... waiting for a connection... connected Your ip address = 192.168.1.188 listening on ('0.0.0.0', 80)
Now using your favorite web browser visit that web page and you should see something like this
Click on the links and you can toggle the led on and off , if you like at the thonny shell there is debug
You can create buttons instead of links