En éste circuito buscaremos la simplicidad al solo encender un LED pero lo haremos usando la función de Hot-Spot de la placa de desarrollo Esp32. El código hará lo siguiente:
Permitir a los usuarios encender un LED a través del Wi-Fi usando un servidor Web, todo ejecutado desde el Esp-32, el cliente podrá ver dos botones accediendo a la dirección IP del dispositivo desde su navegador, y el sistema enviará una solicitud de tipo POST al servidor el cual responderá encendiendo/apagando el LED según sea el caso.
Primero veamos que es una solicitud de tipo POST:
¿Qué es una solicitud de tipo POST?
En el contexto de HTTP (Hypertext Transfer Protocol), una solicitud POST es un método que permite enviar datos al servidor para que sean procesados. A diferencia de las solicitudes GET, que se utilizan principalmente para solicitar datos del servidor, las solicitudes POST se utilizan para enviar datos al servidor. Las solicitudes POST son muy útiles cuando se quiere enviar información desde un formulario web, cargar archivos, o realizar acciones que requieran cambios en el servidor.
Uso de la solicitud POST en el código
En el código proporcionado, la solicitud POST se utiliza para enviar el comando de encender o apagar el LED desde la página web al servidor que se ejecuta en el ESP32. Aquí está cómo se integra:
Este fragmento de HTML crea un formulario con dos botones. Cada botón envía una solicitud POST al servidor cuando se hace clic. El atributo name="action"
y los valores value="on"
y value="off"
especifican la acción que se desea realizar (encender o apagar el LED).
Iniciando con el código, como primer paso agregamos las librerías necesarias.
import network
import machine
import usocket as socket
Definimos el nombre y la clave de la red
ssid = 'ESP32_IOT'
password = 'MiContra$eña'
Éstas dos líneas definen las credenciales de la red con las cuales nos tendremos que autenticar.
Creamos una simple interfaz HTML que el usuario podrá ver a través del servidor.
html = """<!DOCTYPE html>
<html>
<head>
<title>LED Control</title>
</head>
<body>
<h1>Control de LED</h1>
<form action="/" method="post">
<button name="action" value="on" type="submit">Encender</button>
<button name="action" value="off" type="submit">Apagar</button>
</form>
</body>
</html>
"""
Usamos el Pin Digital 2 como Salida.
led_pin = machine.Pin(2, machine.Pin.OUT)
Creamos el Access Point
def create_access_point():
ap = network.WLAN(network.AP_IF)
ap.active(True)
ap.config(essid=ssid, password=password)
print(“Access Point started:”, ssid)
Ésta función crea el HotSpot con los parámetros definidos previamente,
Manejamos las solicitudes del cliente:
def handle_client(client_sock):
req = client_sock.recv(1024)
print("Request:", req)
if req:
if "POST / HTTP/1.1" in req:
if "action=on" in req:
led_pin.on()
elif "action=off" in req:
led_pin.off()
Ésta función es llamada cada vez que el cliente envía una solicitud al servidor, consulta si la solicitud es de tipo POST y si contiene alguna de las acciones declaradas “action=on” o “action=off”, de ser así enciende o apaga el led respectivamente.
Creamos el Servidor y el loop principal.
def main():
create_access_point()
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 80))
server.listen(5)
print("Server started")
while True:
client_sock, _ = server.accept()
handle_client(client_sock)
La funcion main(), inicia creando el punto de acceso Wi-Fi, también crea el servidor web que escuchará las solicitudes entrantes por el puerto 80, dentro de un loop infinito. Acepta las conexiones de los clientes y la cede a la funcion “hande_client()” para ser procesada.
Recuerda que es necesario primero tener instalado el driver correspondiente para tu tarjeta de desarrollo, así como también deber haber configurado el interprete adecuado en Thonny.
Para nuestro caso el driver necesario lo encuentras Aquí.
Descarga el código completo Aquí.