🛠 Serveur web de commande d'une LED en MicroPython
Objetivos
Hacer funcionar un mini servidor HTTP en el ESP8266 con MicroPython, sin ninguna biblioteca externa: se utiliza directamente el módulo socket para aceptar conexiones TCP en el puerto 80, analizar la línea de solicitud y devolver una página HTML con dos enlaces que encienden y apagan el LED integrado GPIO2. Este tutorial muestra otra forma de programar el chip (el puerto MicroPython esp8266 es muy ligero), el principio activo-LOW del LED GPIO2 (valor 0 = encendido) y la obtención de la IP mediante ifconfig. A realizar desde un ordenador de la misma red que el módulo.
Material
- 1 módulo ESP8266-ESP-12E (o NodeMCU) con MicroPython flasheado (puerto esp8266, binario « generic-esp8266 »)
- 1 cable micro-USB/USB o adaptador serie para el flasheo y el IDE (Thonny recomendado)
- LED integrado GPIO2 (o LED externo + resistencia 330 Ω)
- Red Wi-Fi de 2,4 GHz y un navegador en la misma red
Código completo
# main.py MicroPython (port esp8266) - serveur LED sur GPIO2
import network
import socket
led = network and __import__("machine").Pin(2, 1) # GPIO2 en sortie
sta = network.WLAN(network.STA_IF)
sta.active(True)
if not sta.isconnected:
sta.connect("mon-reseau", "mot-de-passe")
import time
for _ in range(40):
if sta.isconnected:
break
time.sleep_ms(250)
print("IP =", sta.ifconfig[0])
html = ("<h1>ESP-12E</h1>"
"<a href='/on'><button>ALLUMER</button></a> "
"<a href='/off'><button>ETEINDRE</button></a>")
def handle(req):
if req.startswith("GET /on"): # LED active-LOW : 0 = allumee
led.value(0)
elif req.startswith("GET /off"):
led.value(1)
return html
s = socket.socket
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("0.0.0.0", 80))
s.listen(1)
while True:
cl, _ = s.accept
req = cl.recv(100).decode
cl.send("HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n" + handle(req))
cl.close
Nota: la línea de inicialización del pin también puede escribirse correctamente como import machine; led = machine.Pin(2, machine.Pin.OUT) si pegas el código en un archivo main.py real.
Verificación esperada
Tras el arranque, la consola muestra la IP del módulo (por ejemplo, 192.168.1.57). Abre esta dirección en un navegador de la misma red: aparece la página con dos botones. « ENCENDER » apaga el pin GPIO2 (valor 0) y enciende el LED integrado; « APAGAR » hace lo contrario. El módulo debe seguir siendo receptivo tras varios clics.
Errores frecuentes
- Confundir la lógica: en el LED integrado, led.value(0) enciende y led.value(1) apaga (activo-LOW), lo contrario de lo que se espera intuitivamente.
- El navegador muestra « conexión restablecida » para el icono favicon.ico: es normal, la solicitud /favicon.ico cae en el mismo gestor; simplemente devuelve la página.
- Un solo cliente a la vez con listen(1): si una conexión permanece abierta, el siguiente navegador espera; mantén cl.close sistemáticamente.
- Olvidar que el puerto 80 esté libre: algunas redes empresariales lo bloquean; prueba en un router doméstico.
- Sobrescribir main.py durante la ejecución: el servidor se reinicia, es normal en desarrollo, detén el código con Ctrl-C en el IDE antes de recargar.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.inoArduinobouton-led.inoArduinorespiration.inoArduinodht11.inoArduinoluxmetre.inoArduinoserveur-web.inoArduino