import socket
from time import sleep_ms
html = b"""
hello world
"""
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
import uos, machine
#uos.dupterm(None, 1) # disable REPL on UART(0)
import gc
#import webrepl
#webrepl.start()
gc.collect()
# - - - NETWORKING - - -
import network
sta_if = network.WLAN(network.STA_IF)
def connectWifi():
sta_if.active(True)
# PSID and password for wifi
sta_if.connect('', '')
return sta_if
def disconnectWifi():
sta_if.active(False)
if not sta_if.isconnected():
print('connecting to network...')
connectWifi()
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())
from machine import Pin
from time import sleep
pin = Pin(0, Pin.OPEN_DRAIN)
pin(1)
s = socket.socket()
ai = socket.getaddrinfo("0.0.0.0", 8080)
print("Bind address info:", ai)
addr = ai[0][-1]
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(addr)
s.listen(5)
print("Listening, connect your browser to http://{}:8080/".format(addr))
class Headers(object):
def __init__(self, headers):
self.__dict__.update(headers)
def __getitem__(self, name):
return getattr(self, name)
def get(self, name, default=None):
return getattr(self, name, default)
class Request(object):
def __init__(self, sock):
header_off = -1
data = ''
while header_off == -1:
data += sock.recv(2048).decode('utf-8')
header_off = data.find('\r\n\r\n')
header_string = data[:header_off]
self.content = data[header_off+4:]
print('data', data)
# lines = []
# while len(header_string) > 0:
# match = self.header_re.search(header_string)
# group = match.group(0)
# print('mathc', group)
# lines.append(group)
# header_string = header_string[len(group) + 2:]
lines = header_string.split('\r\n')
first = lines.pop(0)
self.method, path, protocol = first.split(' ')
self.headers = Headers(
(header.split(': ')[0].lower().replace('-', '_'), header.split(': ')[1]) for header in lines
)
self.path = path
if self.method in ['POST', 'PUT']:
content_length = int(self.headers.get('content_length', 0))
while len(self.content) < content_length:
self.content += sock.recv(4096).decode('utf-8')
if self.content == 'on':
turnOn()
elif self.content == 'off':
turnOff()
def turnOn():
print('turning on')
pin(0)
sleep_ms(1450)
pin(1)
def turnOff():
print('turning off')
pin(0)
sleep_ms(3500)
pin(1)
while True:
socket, addr = s.accept()
print('client connected from', addr)
req = Request(socket)
if req.path == '/on':
turnOn()
elif req.path == '/off':
turnOff()
if req.method == 'POST':
print('this was a post')
print('req', req.path)
print('content', req.content)
socket.send(b'HTTP/1.1 200 OK\n\n' + html)
socket.close()