ESTRUCTURA DEL PROGRAMA
Codi detallat 👇
1. importació de llibreries i mòduls
import socket # el mòdul socket de MicroPython permet crear i gestionar servidors web
import miwifi # la nostra definició de la connexió a WiFi, desada a la carpeta lib del dispositiu
2. configuració del servidor
# crea un objecte socket, que he anomenat servidor:
servidor = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
servidor.bind(('', 80))
servidor.listen(5)
# el mètode bind() enllaça el socket amb l'adreça IP de l'ESP32 ('') i el port 80 (port per defecte per al protocol HTTP)
# el mètode listen() permet que el servidor accepti peticions. 5 és el nombre màxim de connexions permeses
3. definició de la resposta en format pàgina web
La pàgina web la definirem com una variable de text dins d'en una funció amb retorn:
def pag_web( ):
html = """ """ # contingut en format text en varies línies
return html
4. execució de la connexió a WiFi
miwifi.connecta_wifi( ) # la connexió està definida en la funció connecta_wifi a l'arxiu miwifi.py
5. escolta les sol·licituds (request) i envia resposta (response)
while True:
conn, addr = servidor.accept( ) # quan un client es connecti, accepta la connexió
addr_s = str(addr) # cal convertir el format a cadena de caracters (string)
print ('Nova connexió des de', addr_s) # imprimeix l'adreça del client, convertida a string
# una altra manera; print('Nova connexió des de %s' % str(addr))
# conn: nou sòcol per escoltar les sol·licituds entrants i enviar el text HTML com a resposta
# addr: variable on es desa l'adreça del client que es vol connectar al servidor
request = conn.recv(1024) # desa la sol·licitud rebuda al sòcol en la variable request
# l'argument 1024 especifica el màxim de dades que es poden rebre alhora
request = str(request) # cal transformar el format a string perquè s'entingui després
print (request) # imprimeix el contingut de la sol·licitud, en format string
print ('==========') # separador per llegir millor a la consola
response = pag_web() # associa la pàgina web a la resposta a les peticions dels clients
conn.send ('HTTP/1.1 200 OK\n') # codi de resposta HTTP (200: estat satisfactori) \n indica salt de línia
conn.send ('Content-Type: text/html\n')
conn.send ('Connection: close\n\n')
conn.sendall (response) # envia com a resposta el text html retornat per la funció pag_web
conn.close( ) # tanca la connexió amb el client
Codi detallat 👇
def pag_web( ):
html = """<html>
<head>
<title>ESP32 Servidor Web</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<p>Mi Servidor</p>
<p>Hola, """ + addr + """</p>
<p>Servidor web en marxa!</p>
</body>
</html>"""
return html