MicroPython : Module Relais avec ESP32/ESP8266 (Guide + Serveur Web)

MicroPython : Module Relais avec ESP32/ESP8266 (Guide + Serveur Web)

L’utilisation d’un relais avec l’ESP32 ou l’ESP8266 est un excellent moyen de contrôler à distance les appareils électroménagers AC. Ce tutoriel explique comment contrôler un module relais avec l’ESP32 ou l’ESP8266 à l’aide du firmware MicroPython.

Module de relais MicroPython avec ESP32 et ESP8266 : Guide et serveur Web

Nous verrons comment fonctionne un module de relais, comment connecter le relais aux cartes ESP32 ou ESP8266 et créer un serveur Web pour contrôler un relais à distance.

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).

Modules de relais 1, 2, 4, 8, 16 canaux

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 nous pourrons contrôler.

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

Il existe des modules relais dont l’électro-aimant peut être alimenté en 5V et en 3,3V. Les deux peuvent être utilisés avec l’ESP32 ou l’ESP8266 – vous pouvez utiliser la broche VIN (qui fournit 5V) ou la broche 3,3V.

De plus, certains sont livrés avec un optocoupleur intégré qui ajoute une « couche » de protection supplémentaire, isolant optiquement les cartes ESP du circuit de relais.

Obtenir un module relais:

Brochage du relais

À des fins de démonstration, examinons le brochage d’un module de relais à 2 canaux. L’utilisation d’un module relais avec un nombre différent de canaux est similaire.

Brochage du module de relais à 2 canaux

Sur le côté gauche, il y a deux ensembles de trois prises pour connecter les hautes tensions, et les broches sur le côté droit (basse tension) se connectent aux GPIO ESP.

Connexions de tension secteur

Module relais côté tension secteur

Le module relais montré sur la photo précédente possède deux connecteurs, chacun avec trois prises : commun (COM), Normalement fermé (NC) et normalement ouvert (NON).

  • COM : connectez le courant que vous souhaitez contrôler (tension secteur).
  • NC (Normalement Fermé) : la configuration normalement fermée est utilisée lorsque l’on souhaite que le relais soit fermé par défaut. Les broches NC sont COM sont connectées, ce qui signifie que le courant circule à moins que vous n’envoyiez un signal de l’ESP au module de relais pour ouvrir le circuit et arrêter le flux de courant.
  • NON (normalement ouvert) : la configuration normalement ouverte fonctionne dans l’autre sens : il n’y a pas de connexion entre les broches NO et COM, donc le circuit est interrompu à moins que vous n’envoyiez un signal de l’ESP pour fermer le circuit.

Broches de contrôle

Module relais 2 canaux

Le côté basse tension a un jeu de quatre broches et un jeu de trois broches. Le premier ensemble se compose de VCC et GND pour mettre le module sous tension, et l’entrée 1 (EN 1) et l’entrée 2 (EN 2) pour contrôler respectivement les relais inférieur et supérieur.

Si votre module relais n’a qu’un seul canal, vous n’aurez qu’une seule broche IN. Si vous avez quatre canaux, vous aurez quatre broches IN, et ainsi de suite.

Le signal que vous envoyez aux broches IN détermine si le relais est actif ou non. Le relais est déclenché lorsque l’entrée passe en dessous d’environ 2V. Cela signifie que vous aurez les scénarios suivants :

  • Configuration normalement fermée (NF):
    • Signal HAUT – le courant circule
    • Signal FAIBLE – le courant est ne pas écoulement
  • Configuration normalement ouverte (NON):
    • Signal HAUT – le courant est ne pas écoulement
    • Signal FAIBLE – courant en circulation

Vous devez utiliser une configuration normalement fermée lorsque le courant doit circuler la plupart du temps et que vous ne souhaitez l’arrêter qu’occasionnellement.

Utilisez une configuration normalement ouverte lorsque vous souhaitez que le courant circule occasionnellement (par exemple, allumez une lampe de temps en temps).

Sélection de l’alimentation

Broches de commande du module relais à 2 canaux

Le deuxième jeu de broches se compose de GND, VCC, et JD-VCC épingles. le JD-VCC broche alimente l’électroaimant du relais. Notez que le module a un capuchon de cavalier reliant les broches VCC et JD-VCC ; celui montré ici est jaune, mais le vôtre peut être d’une couleur différente.

Avec le capuchon du cavalier, le VCC et JD-VCC les broches sont connectées. Cela signifie que l’électroaimant du relais est directement alimenté par la broche d’alimentation ESP, de sorte que le module relais et les circuits ESP ne sont pas physiquement isolés les uns des autres.

Sans le capuchon du cavalier, vous devez fournir une source d’alimentation indépendante pour alimenter l’électro-aimant du relais via le JD-VCC épingler. Cette configuration isole physiquement les relais de l’ESP grâce à l’optocoupleur intégré au module, ce qui évite d’endommager l’ESP en cas de pointes électriques.

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 ESP8266

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

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 GPIO ESP8266.

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

Contrôle d’un module de relais – Code 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 l'ESP8266 à l'aide d'un module 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 d'ESP8266 à 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

Dans ce didacticiel, vous avez appris à contrôler les relais avec l’ESP32 ou l’ESP8266 à l’aide de MicroPython. Nous avons des guides similaires utilisant Arduino IDE :

Contrôler un relais avec l’ESP32 ou l’ESP8266 est aussi simple que de contrôler n’importe quelle autre sortie, il vous suffit d’envoyer des signaux HAUT et BAS comme vous le feriez pour contrôler une LED.

Vous pouvez utiliser nos exemples de serveur Web qui contrôlent les sorties pour contrôler les relais. Vous devez juste faire attention à la configuration que vous utilisez. Dans le cas où vous utilisez une configuration normalement ouverte, le relais fonctionne avec une logique inversée. Vous pouvez utiliser les exemples de serveur Web suivants pour contrôler votre relais :

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

Merci d’avoir lu.