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.

  • YINETTECH ESP8266 ESP-01S 5V Module de Relais WiFi pour Commutateur de Télécommande Maison Intelligente
    Basé sur le module WIFI ESP-01S. Entrée de tension large, prend en charge DC 5V. Poids léger, taille compacte et très facile à installer dans un petit boîtier. Il peut être utilisé pour bricoler votre propre interrupteur intelligent. Les appareils ménagers intelligents, les ventilateurs de connexion, les illuminateurs, les commutateurs intelligents peuvent être contrôlés à distance par l'application pour téléphone portable n'importe où.
  • ESP8266 OLED ESP12F Node-MCU Carte de Développement avec écran OLED de 0,96 Pouces,Pilote CH340,Module sans Fil ESP-12E WiFi, et Micro USB,pour la Programmation Arduino IDE/Micropython
    La carte ESP8266 Display Node-MCU possède toutes les caractéristiques du module ESP8266 traditionnel, avec la même taille et les mêmes ports périphériques, et offre une intégration transparente avec un écran OLED de 0,96 pouce. L'écran présente une haute résolution de 128x64 avec un pilote 1306 et est compatible avec les interfaces I2C et SPI. Cette ESP8266 Display carte utilise l'I2C pour se connecter à un écran OLED via les broches SDA (D6 / GPIO12) et SCL (D5 / GPIO14). Avec cette carte, il est facile d'afficher une variété d'informations et de données. La carte ESP8266 Node-MCU est équipée d'un module ESP12E, qui contient le microprocesseur RISC Tensilica Xtensa 32-bit LX106 alimentant la puce ESP8266. Ce microprocesseur supporte le RTOS et fonctionne à une fréquence d'horloge réglable entre 80 MHz et 160 MHz. Pour installer la nouvelle version du pilote CH340, il suffit de rechercher les mots clés "CH340 Driver" sur Google.com ou Bing.com et de suivre les instructions d'installation fournies.Recommandé pour le système d'exploitation Win10. Cette ESP8266 Display Node-MCU carte est une option exceptionnelle pour divers projets d'Internet des objets (IoT). Elle peut être utilisée pour afficher l'état de la connexion réseau,les informations de surveillance, les niveaux de puissance et d'autres données pertinentes.
  • ANGEEK D1 V3.0.0 4MB WiFi IoT Carte de développement, Module WLAN pour ESP8266 pour MicroPython, Arduin, Nodemcu (Trois Packs)
    Il s'agit du module D1 V3.0 pour le module WIFI ESP8266. La nouvelle version v3.0.0 ajoute maintenant la fonctionnalité de cavalier de sommeil profond et des circuits optimisés. Il est compatible avec MicroPython et NodeMCU. est une carte de développement WLAN avec une puce CH340C et une interface micro USB. Compacte, elle offre 4 Mo de mémoire flash pour tous vos projets. Cette carte de développement possède 11 broches d'entrée/sortie numériques, qui ont toutes (sauf D0) une fonction d'interruption/PWM/I2C/simple ligne.