🛠 Serveur web de commande d'une LED en MicroPython

ESP8266 (module ESP-12E) · intermediaire · Schéma : IMG-esp8266-esp-12e-intermediaire-2-esp8266-serveur-web-led.svg — Module ESP-12E exécutant MicroPython, LED embarquée sur GPIO2 (active-LOW), connecté au réseau local, navigateur d'un ordinateur ou smartphone sur le même réseau.

Objectifs

Faire tourner un mini serveur HTTP sur l'ESP8266 avec MicroPython, sans aucune bibliothèque externe : on utilise directement le module socket pour accepter les connexions TCP sur le port 80, analyser la ligne de requête et renvoyer une page HTML avec deux liens qui allument et éteignent la LED embarquée GPIO2. Ce tutoriel montre une autre façon de programmer la puce (le port MicroPython esp8266 est très léger), le principe actif-LOW de la LED GPIO2 (valeur 0 = allumée), et la récupération de l'IP via ifconfig. À faire depuis un ordinateur du même réseau que le module.

Matériel

Code complet

# 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-réseau", "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

Note : la ligne d'initialisation de la broche peut aussi s'écrire proprement import machine; led = machine.Pin(2, machine.Pin.OUT) si tu colles le code dans un vrai fichier main.py.

Vérification attendue

Après démarrage, la console affiche l'IP du module (par exemple 192.168.1.57). Ouvre cette adresse dans un navigateur du même réseau : la page avec deux boutons apparaît. « ALLUMER » éteint la broche GPIO2 (valeur 0) et allume la LED embarquée ; « ETEINDRE » fait l'inverse. Le module doit rester réactif après plusieurs clics.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels