MicroPython : Serveur Web du module relais ESP32/ESP8266

MicroPython : Serveur Web du module relais ESP32/ESP8266

Ce didacticiel est un guide étape par étape qui explique comment créer un serveur Web autonome ESP32 ou ESP8266 NodeMCU qui contrôle n’importe quel module de relais à l’aide du micrologiciel MicroPython. Nous allons créer un serveur Web ESP32/ESP8266 qui est mobile et accessible avec n’importe quel appareil avec un navigateur sur votre réseau local.

MicroPython ESP32 ESP8266 Module de relais NodeMCU Serveur Web Appareils AC

Si vous voulez savoir comment fonctionne un module de relais, lisez notre Guide MicroPython : Module de relais avec ESP32/ESP8266.

Nous avons des guides similaires utilisant Arduino IDE :

Conditions préalables

Pour suivre ce tutoriel, vous avez besoin du firmware MicroPython installé dans vos cartes ESP32 ou ESP8266. Vous avez également besoin d’un IDE pour écrire et télécharger le code sur votre carte. Nous vous suggérons d’utiliser Thonny IDE ou uPyCraft IDE :

En savoir plus sur MicroPython : eBook de programmation MicroPython avec ESP32 et ESP8266.

Présentation des relais

Un relais est un interrupteur à commande électrique et comme tout autre interrupteur, il peut être allumé ou éteint, laissant passer ou non le courant. Il peut être contrôlé avec des basses tensions, comme le 3,3V fourni par les GPIO ESP32/ESP8266 et nous permet de contrôler des hautes tensions comme le 12V, 24V ou la tension secteur (230V en Europe et 120V aux États-Unis).

Il existe différents modules de relais avec un nombre différent de canaux. Vous pouvez trouver des modules relais avec un, deux, quatre, huit et même seize canaux. Le nombre de canaux détermine le nombre de sorties que vous pouvez contrôler.

Modules de relais avec un nombre différent de canaux 1, 2, 4, 8, 16 canaux

Obtenir un module relais:

Câblage d’un module de relais à l’ESP32/ESP8266

Avertissement: dans cet exemple, nous avons affaire à la tension secteur. Une mauvaise utilisation peut entraîner des blessures graves. Si vous n’êtes pas familier avec la tension secteur, demandez à quelqu’un de vous aider. Lors de la programmation de l’ESP ou du câblage de votre circuit, assurez-vous que tout est déconnecté de la tension secteur.

Alternativement, vous pouvez utiliser une source d’alimentation 12V pour contrôler les appareils 12V.

Schéma de principe ESP32

Connectez le module relais à l’ESP32 comme indiqué dans le schéma suivant. Le schéma montre le câblage d’un module relais à 2 canaux, le câblage d’un nombre différent de canaux est similaire.

Câblage d'un module de relais au circuit schématique ESP32

Dans cet exemple, nous contrôlons une lampe. Nous voulons juste allumer la lampe de temps en temps, il est donc préférable d’utiliser une configuration normalement ouverte.

Nous connectons la broche IN1 à GPIO 26, vous pouvez utiliser n’importe quel autre GPIO approprié. Voir le guide de référence ESP32 GPIO.

Schéma de principe de l’ESP8266 NodeMCU

Suivez le schéma suivant si vous utilisez un ESP8266 NodeMCU.

Câblage d'un module de relais au circuit schématique ESP8266

Nous connectons la broche IN1 au GPIO 5, vous pouvez utiliser n’importe quel autre GPIO approprié. Voir le guide de référence ESP8266 NodeMCU GPIO.

Les meilleures broches ESP8266 à utiliser avec les relais sont : GPIO 5, GPIO 4, GPIO 14, GPIO 12 et GPIO 13.

Code de serveur Web de relais MicroPython (Script)

Le code pour contrôler un relais avec l’ESP32 ou l’ESP8266 est aussi simple que de contrôler une LED ou toute autre sortie. Dans cet exemple, comme nous utilisons une configuration normalement ouverte, nous devons envoyer un signal BAS pour laisser passer le courant et un signal HAUT pour arrêter le courant.

Contrôler une lampe avec l'ESP32 ou ESP8266 NodeMCU à l'aide d'un module de relais

Copiez le code suivant dans le main.py fichier et téléchargez-le sur votre tableau. Il allume votre lampe pendant 10 secondes et l’éteint encore 10 secondes.

# Complete project details at https://Raspberryme.com

from machine import Pin
from time import sleep

# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)

# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)

while True:
  # RELAY ON
  relay.value(0)
  sleep(10)
  # RELAY OFF
  relay.value(1)
  sleep(10)

Afficher le code brut

Comment fonctionne le code

Importer le Épingler classe de la machine module pour interagir avec les GPIO. Nous importons également les sommeil() méthode de la temps module pour ajouter des délais.

from machine import Pin
from time import sleep

Ensuite, nous définissons un Épingler objet appelé relais au 26 (si vous utilisez un ESP32) et définissez-le comme une sortie.

# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)

Si vous utilisez un ESP8266, utilisez GPIO 5 plutôt. Commentez la ligne précédente et décommentez la suivante.

# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)

Dans la boucle while, envoyez un signal LOW pour allumer la lampe pendant 10 secondes.

# RELAY ON
relay.value(0)
sleep(10)

Si vous utilisez une configuration normalement fermée, envoyez un signal HAUT pour allumer la lampe.

Arrêtez le flux de courant en envoyant un signal HAUT à la broche du relais. Si vous utilisez une configuration normalement fermée, envoyez un signal BAS pour arrêter le flux de courant.

# RELAY OFF
relay.value(1)
sleep(10)

Module de relais de contrôle avec serveur Web MicroPython

Relais de contrôle avec serveur Web - MicroPython ESP32 et ESP8266

Dans cette section, nous avons créé un exemple de serveur Web qui vous permet de contrôler un relais à distance via un serveur Web.

boot.py

Copiez le code suivant dans votre boot.py déposer.

# Complete project details at https://Raspberryme.com

try:
  import usocket as socket
except:
  import socket

from machine import Pin
import network

import esp
esp.osdebug(None)

import gc
gc.collect()

ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

station = network.WLAN(network.STA_IF)

station.active(True)
station.connect(ssid, password)

while station.isconnected() == False:
  pass

print('Connection successful')
print(station.ifconfig())

# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)

# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)

Afficher le code brut

Insérez vos identifiants réseau dans les variables suivantes :

ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'

Décommentez l’une des lignes suivantes en fonction du tableau que vous utilisez. Par défaut, il est configuré pour utiliser le GPIO ESP32.

# ESP32 GPIO 26
relay = Pin(26, Pin.OUT)

# ESP8266 GPIO 5
#relay = Pin(5, Pin.OUT)

main.py

Copiez ce qui suit dans votre main.py déposer.

# Complete project details at https://Raspberryme.com

def web_page():
  if relay.value() == 1:
    relay_state=""
  else:
    relay_state="checked"
  html = """<html><head><meta name="viewport" content="width=device-width, initial-scale=1"><style>
  body{font-family:Arial; text-align: center; margin: 0px auto; padding-top:30px;}
  .switch{position:relative;display:inline-block;width:120px;height:68px}.switch input{display:none}
  .slider{position:absolute;top:0;left:0;right:0;bottom:0;background-color:#ccc;border-radius:34px}
  .slider:before{position:absolute;content:"";height:52px;width:52px;left:8px;bottom:8px;background-color:#fff;-webkit-transition:.4s;transition:.4s;border-radius:68px}
  input:checked+.slider{background-color:#2196F3}
  input:checked+.slider:before{-webkit-transform:translateX(52px);-ms-transform:translateX(52px);transform:translateX(52px)}
  </style><script>function toggleCheckbox(element) { var xhr = new XMLHttpRequest(); if(element.checked){ xhr.open("GET", "/?relay=on", true); }
  else { xhr.open("GET", "/?relay=off", true); } xhr.send(); }</script></head><body>
  <h1>ESP Relay Web Server</h1><label class="switch"><input type="checkbox" onchange="toggleCheckbox(this)" %s><span class="slider">
  </span></label></body></html>""" % (relay_state)
  return html

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 80))
s.listen(5)

while True:
  try:
    if gc.mem_free() < 102000:
      gc.collect()
    conn, addr = s.accept()
    conn.settimeout(3.0)
    print('Got a connection from %s' % str(addr))
    request = conn.recv(1024)
    conn.settimeout(None)
    request = str(request)
    print('Content = %s' % request)
    relay_on = request.find('/?relay=on')
    relay_off = request.find('/?relay=off')
    if relay_on == 6:
      print('RELAY ON')
      relay.value(0)
    if relay_off == 6:
      print('RELAY OFF')
      relay.value(1)
    response = web_page()
    conn.send('HTTP/1.1 200 OKn')
    conn.send('Content-Type: text/htmln')
    conn.send('Connection: closenn')
    conn.sendall(response)
    conn.close()
  except OSError as e:
    conn.close()
    print('Connection closed')

Afficher le code brut

Nous n’expliquerons pas comment fonctionne ce code car nous avons déjà un tutoriel très similaire avec une explication détaillée de chaque ligne de code. Lire le prochain projet :

Manifestation

Après avoir apporté les modifications nécessaires, téléchargez le boot.py et main.py fichiers sur votre tableau. Appuyez sur le bouton EN/RST et dans le Shell, vous devriez obtenir l’adresse IP ESP.

Adresse IP du serveur Web de relais ESP32 ESP8266

Ensuite, ouvrez un navigateur sur votre réseau local et saisissez l’adresse IP ESP pour accéder au serveur Web.

Vous devriez obtenir une page Web avec un bouton à bascule qui vous permet de contrôler votre relais à distance à l’aide de votre smartphone ou de votre ordinateur.

Contrôler un relais avec un serveur Web à l'aide d'ESP32 ou ESP8266 NodeMCU à l'aide du micrologiciel MicroPython

Boîtier pour la sécurité

Pour un projet final, assurez-vous de placer votre module relais et ESP à l’intérieur d’un boîtier pour éviter que les broches AC soient exposées.

Boîtier en plastique pour la sécurité et masquer les broches CA exposées du module de relais

Conclusion

L’utilisation de relais avec l’ESP est un excellent moyen de contrôler à distance les appareils électroménagers AC. Vous pouvez également lire nos guides complets sur les modules relais :

En savoir plus sur MicroPython avec l’ESP32 et l’ESP8266 avec nos ressources :

Merci d’avoir lu.

  • AZDelivery NodeMCU Lolin V3 Module ESP8266 (ESP-12F), Carte de développement Development Board Wi-FI avec CH340, NodeMCU V3 Wireless Compatible avec Arduino incluant Un Ebook!
    ✅ Puissant microcontrôleur ESP8266 (ESP-12E) avec WLAN 802.11 b/g/n et antenne intégrée de 20dBm ✅ Prototypage pratique grâce à une programmation aisée via un script Lua et une conception compatible avec le breadboard (espacement des broches de 27.5 mm entre les en-têtes) ✅ Dimensions (L xlx H): 58 mm x 31 mm x 13 mm ✅ Livre électronique avec instructions d'installation et exemples de script ! ✅ Ce produit inclut un E-Book qui fournit des informations utiles sur la façon de commencer votre projet. Il permet une installation rapide et fait gagner du temps sur le processus de configuration. On y trouve une série d'exemples d'applications, des guides d'installation complets et des bibliothèques.