capteur_web.py

ESP8266 (module ESP-12E) · Fichier : capteur_web.py · Langage : MicroPython · Usage : Servir des mesures en MicroPython pur sur l'ESP8266

MicroPython sur ESP8266, c'est le Wi-Fi dans le langage script : ce logger DHT tient dans 40 lignes sans une compilation. Le module socket sert du HTML brut — suffisant pour un tableau de bord maison.

Matériel requis

Un module ESP-12E (ESP8266EX, Wi-Fi 2,4 GHz) monté sur une carte NodeMCU / Wemos D1 mini, alimentée par micro-USB. 1 DHT11 sur GPIO4 (DATA + pull-up 10 kΩ, VDD 3,3 V, GND).

Branchement

Même câblage que le sketch DHT : DATA sur la broche 4 (D2). Alimenter par USB, le Wi-Fi appelle les pointes de courant.

Fonctionnement

network.WLAN rejoint l'AP, socket bind/listen/accept fait un serveur HTTP minimal : chaque requête déclenche une mesure et renvoie une page. Le try/except encaisse les connexions coupées. Dans l'Arduino IDE, installez le paquet « esp8266 », choisissez « NodeMCU 1.0 (ESP-12E Module) » puis Téléverser (GPIO0 à LOW si le flash échoue). L'ADC A0 lit 0-1 V (diviseur NodeMCU : 0-3,3 V).

Pour aller plus loin

Ajoutez un chemin /api en JSON pour un vrai tableau de bord, ou activez WebREPL pour debugger par Wi-Fi.

capteur_web.py

# MicroPython ESP8266 : DHT sur GPIO4 + mini serveur HTTP + WebREPL.
# Copier en main.py. WebREPL : https://werelup.pythonanywhere.com (optionnel).
import network, dht, machine, socket, time

sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.connect("votre-wifi", "votre-cle")
for _ in range(40):
    if sta.isconnected():
        break
    time.sleep_ms(250)
print("IP:", sta.ifconfig()[0])

dht11 = dht.DHT11(machine.Pin(4))
led = machine.Pin(2, machine.Pin.OUT)

addr = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
addr.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
addr.bind(("", 80))
addr.listen(2)
print("Serveur HTTP sur le port 80")

while True:
    client, _ = addr.accept()
    try:
        client.recv(200)                       # on lit la requete, on l'oublie
        dht11.measure()
        html = ("<h1>T=%.0f C  HR=%.0f %%</h1>" %
                (dht11.temperature(), dht11.humidity()))
        reponse = ("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n"
                   "Content-Length: %d\r\n\r\n%s" % (len(html), html))
        client.send(reponse)
        led.value(not led.value())
    except OSError:
        pass
    finally:
        client.close()

← Retour à la fiche