Created
October 24, 2022 10:18
-
-
Save CytronVN/ac8e159e537005977a1e52f4e478ff6c to your computer and use it in GitHub Desktop.
Raspberry Pi Pico W - Web Server
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 | |
from time import sleep | |
from picozero import pico_temp_sensor, pico_led | |
import machine | |
ssid = 'WiFi-SSID' | |
password = 'WiFi-Password' | |
def connect(): | |
#Connect to WLAN | |
wlan = network.WLAN(network.STA_IF) | |
wlan.active(True) | |
wlan.connect(ssid, password) | |
while wlan.isconnected() == False: | |
print('Waiting for connection...') | |
sleep(1) | |
ip = wlan.ifconfig()[0] | |
print(f'Connected on {ip}') | |
return ip | |
def open_socket(ip): | |
# Open a socket | |
address = (ip, 80) | |
connection = socket.socket() | |
connection.bind(address) | |
connection.listen(1) | |
return connection | |
def webpage(temperature, state): | |
#Template HTML | |
html = f""" | |
<!DOCTYPE html> | |
<html> | |
<form action="./lighton"> | |
<input type="submit" value="Light on" /> | |
</form> | |
<form action="./lightoff"> | |
<input type="submit" value="Light off" /> | |
</form> | |
<p>LED is {state}</p> | |
<p>Temperature is {temperature}</p> | |
</body> | |
</html> | |
""" | |
return str(html) | |
def serve(connection): | |
#Start a web server | |
state = 'OFF' | |
pico_led.off() | |
temperature = 0 | |
while True: | |
client = connection.accept()[0] | |
request = client.recv(1024) | |
request = str(request) | |
try: | |
request = request.split()[1] | |
except IndexError: | |
pass | |
if request == '/lighton?': | |
pico_led.on() | |
state = 'ON' | |
elif request =='/lightoff?': | |
pico_led.off() | |
state = 'OFF' | |
temperature = pico_temp_sensor.temp | |
html = webpage(temperature, state) | |
client.send(html) | |
client.close() | |
try: | |
ip = connect() | |
connection = open_socket(ip) | |
serve(connection) | |
except KeyboardInterrupt: | |
machine.reset() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment