Control the onboard LED of the Pico W using a Web Server

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 is used to switch the on board LED on and other one is used 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'

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 in the Thonny REPL

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 IP address and you should see something like this

Click on the links and you can toggle the led on and off , if you look at the thonny shell there is debug

You can create buttons instead of links

Related posts

Get the latest Bitcoin Price in Micropython

SHT31 humidity sensor and Raspberry Pi Pico example

Create a basic Raspberry Pi Pico Web Server