# Acknowledgement # Code in the file is based on the code share in the following Github Gist # https://gist.github.com/zatarra/fcb9409ef1c1835fa5fb25a860991751 # https://www.davidgouveia.net/category/iot/ import machine import socket import ure import mp3 RELAYS = [machine.Pin(i, machine.Pin.OUT) for i in (12, 13, 14, 15)] html = """ MP3 Player

WiFi MP3 Player

Prev Play Pause Resume Next

1 5 10 15 20

""" def play_track(track): if track is None: track=1 mp3.play_track(int(track)) return "track %s" % (int(track)) def play_next(): mp3.next() return "done" def play_prev(): mp3.previous() return "done" def pause_play(): mp3.pause() return "Paused" def resume_play(): mp3.resume() return "resumed" def parseURL(url): #PARSE THE URL AND RETURN THE PATH AND GET PARAMETERS parameters = {} path = ure.search("(.*?)(\?|$)", url) while True: vars = ure.search("(([a-z0-9]+)=([a-z0-8.]*))&?", url) if vars: parameters[vars.group(2)] = vars.group(3) url = url.replace(vars.group(0), '') else: break return path.group(1), parameters def buildResponse(response): # BUILD DE HTTP RESPONSE HEADERS global html return '''HTTP/1.0 200 OK\r\nContent-type: text/html\r\nContent-length: %d\r\n\r\n%s''' % (len(html), html) addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] s = socket.socket() s.bind(addr) s.listen(1) print('listening on', addr) while True: cl, addr = s.accept() print('client connected from', addr) request = str(cl.recv(1024)) print("REQUEST: ", request) obj = ure.search("GET (.*?) HTTP\/1\.1", request) print(obj.group(1)) if not obj: cl.send(buildResponse("INVALID REQUEST")) else: path, parameters = parseURL(obj.group(1)) if path.startswith("/play"): track=parameters.get("track",None) cl.send(buildResponse("Playing:\n%s" % play_track(track))) elif path.startswith("/next"): cl.send(buildResponse("Next :\n%s" % play_next())) elif path.startswith("/prev"): cl.send(buildResponse("Previous :\n%s" % play_prev())) elif path.startswith("/resume"): cl.send(buildResponse("Pause play:\n%s" % resume_play())) elif path.startswith("/pause"): cl.send(buildResponse("Pause play:\n%s" % pause_play())) elif path.startswith("/halt"): cl.send(buildResponse("Shutting down server\n")) break else: cl.send(buildResponse("UNREGISTERED ACTION\r\nPATH: %s\r\nPARAMETERS: %s" % (path, parameters))) cl.close()