Module de relais ESP8266 NodeMCU – Contrôler les appareils AC (serveur Web)

Module de relais ESP8266 NodeMCU - Contrôler les appareils AC (serveur Web)

L’utilisation d’un relais avec l’ESP8266 est un excellent moyen de contrôler à distance les appareils électroménagers AC. Ce tutoriel explique comment contrôler un module de relais avec le ESP8266 NodeMCU. Nous verrons comment fonctionne un module de relais, comment connecter le relais à l’ESP8266 et construire un serveur Web pour contrôler un relais à distance (ou autant de relais que vous le souhaitez).

Module de relais ESP8266 - Contrôle des appareils AC (serveur Web)

Apprenez à contrôler un module relais avec la carte ESP32 : Guide pour le module de relais ESP32 – Control AC Appliances + Exemple de serveur Web.

Regardez le didacticiel vidéo

Regardez le didacticiel vidéo suivant ou continuez à lire cette page pour les instructions écrites et toutes les ressources.

YouTube video

Présentation des relais

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

Modules 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 de 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

Il existe des modules relais dont l’électroaimant peut être alimenté en 5V et en 3.3V. Les deux peuvent être utilisés avec 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 l’ESP8266 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 de relais avec un nombre différent de canaux est similaire.

Brochage du module de relais à 2 canaux

Les deux connecteurs (avec trois prises chacun) sur le côté gauche du module de relais connectent la haute tension, et les broches sur le côté droit (basse tension) se connectent aux GPIO ESP8266.

Connexions de tension secteur

Module relais côté tension secteur

Le module de relais illustré 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 vous souhaitez que le relais soit fermé par défaut. Les broches NC et COM sont connectées, ce qui signifie que le courant circule à moins que vous n’envoyiez un signal de l’ESP8266 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 depuis l’ESP8266 pour fermer le circuit.

Broches de contrôle

Module relais 2 canaux

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

Si votre module de 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 descend en dessous d’environ 2V. Cela signifie que vous aurez les scénarios suivants :

  • Configuration normalement fermée (NC):
    • Signal HIGH – le courant circule
    • Signal BAS – le courant est ne pas écoulement
  • Configuration normalement ouverte (NO):
    • Signal HIGH – le courant est ne pas écoulement
    • Signal BAS – le courant circule

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 contrôle du module de relais à 2 canaux

Le deuxième ensemble de broches se compose de Terre, VCC, et JD-VCC épingles. le JD-VCC la 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 de cavalier en place, 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 ESP8266, de sorte que le module de relais et les circuits ESP8266 ne sont pas physiquement isolés les uns des autres.

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

ESP8266 Broches les plus sûres à utiliser avec les relais

Certaines broches ESP8266 émettent un signal de 3,3 V lorsque l’ESP8266 démarre. Cela peut être problématique si vous avez des relais ou d’autres périphériques connectés à ces GPIO.

De plus, certaines broches doivent être tirées HAUT ou BAS afin de démarrer l’ESP8266.

En tenant compte de cela, les broches ESP8266 les plus sûres à utiliser avec les relais sont : GPIO 5, GPIO 4, GPIO 14, GPIO 12 et GPIO 13.

Pour plus d’informations sur les GPIO ESP8266, lisez : Référence de brochage ESP8266 : Quelles broches GPIO devriez-vous utiliser ?

Câblage d’un module de relais à la carte ESP8266 NodeMCU

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

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.

Câblage d'un module de relais à la carte ESP8266 NodeMCU

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 5, vous pouvez utiliser n’importe quel autre GPIO approprié. Voir le Guide de référence ESP8266 GPIO.

Contrôler un module relais avec le NodeMCU ESP8266 – Arduino Sketch

Le code pour contrôler un relais avec 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 LOW pour laisser passer le courant et un signal HIGH pour arrêter le flux de courant.

Contrôlez une lampe avec l'ESP8266 à l'aide d'un relais

Le code suivant allumera votre lampe pendant 10 secondes et l’éteindra pendant 10 secondes supplémentaires.

/*********
  Rui Santos
  Complete project details at https://Raspberryme.com/esp8266-relay-module-ac-web-server/
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

const int relay = 5;

void setup() {
  Serial.begin(115200);
  pinMode(relay, OUTPUT);
}

void loop() {
  // Normally Open configuration, send LOW signal to let current flow
  // (if you're usong Normally Closed configuration send HIGH signal)
  digitalWrite(relay, LOW);
  Serial.println("Current Flowing");
  delay(5000); 
  
  // Normally Open configuration, send HIGH signal stop current flow
  // (if you're usong Normally Closed configuration send LOW signal)
  digitalWrite(relay, HIGH);
  Serial.println("Current not Flowing");
  delay(5000);
}

Afficher le code brut

Comment fonctionne le code

Définissez la broche à laquelle la broche IN du relais est connectée.

const int relay = 5;

Dans le mettre en place(), définissez le relais comme une sortie.

pinMode(relay, OUTPUT);

Dans le boucler(), envoyer un MEUGLER signal pour laisser passer le courant et allumer la lampe.

digitalWrite(relay, LOW);

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

delay(5000); 

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

digitalWrite(relay, HIGH);

Contrôlez plusieurs relais avec le serveur Web ESP8266 NodeMCU

Contrôlez plusieurs relais avec le serveur Web ESP8266

Dans cette section, nous avons créé un exemple de serveur Web qui vous permet de contrôler autant de relais que vous le souhaitez via le serveur Web, qu’ils soient configurés comme normalement ouverts ou normalement fermés. Il vous suffit de modifier quelques lignes de code pour définir le nombre de relais que vous souhaitez contrôler et l’affectation des broches.

Pour construire ce serveur web, nous utilisons le Bibliothèque ESPAsyncWebServer.

Installation de la bibliothèque ESPAsyncWebServer

Suivez les étapes suivantes pour installer le ESPAsyncWebServer bibliothèque:

  1. Cliquez ici pour télécharger la librairie ESPAsyncWebServer. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
  2. Décompressez le dossier .zip et vous devriez obtenir ESPAsyncWebServer-maître dossier
  3. Renommez votre dossier de ESPAsyncWebServer-maître à ESPAsyncWebServer
  4. Bouge le ESPAsyncWebServer dossier dans le dossier des bibliothèques d’installation de votre IDE Arduino

Alternativement, dans votre IDE Arduino, vous pouvez accéder à Esquisser > Inclure la bibliothèque > Ajouter une bibliothèque .ZIP… et sélectionnez la bibliothèque que vous venez de télécharger.

Installation de la bibliothèque ESPAsyncTCP pour ESP8266

le ESPAsyncWebServer la bibliothèque nécessite ESPAsyncTCP bibliothèque pour travailler. Suivez les étapes suivantes pour installer cette bibliothèque :

  1. Cliquez ici pour télécharger la librairie ESPAsyncTCP. Vous devriez avoir un dossier .zip dans votre dossier Téléchargements
  2. Décompressez le dossier .zip et vous devriez obtenir ESPAsyncTCP-maître dossier
  3. Renommez votre dossier de ESPAsyncTCP-maître à ESPAsyncTCP
  4. Bouge le ESPAsyncTCP dossier dans le dossier des bibliothèques d’installation de votre IDE Arduino
  5. Enfin, rouvrez votre IDE Arduino

Alternativement, dans votre IDE Arduino, vous pouvez accéder à Esquisser > Inclure la bibliothèque > Ajouter une bibliothèque .ZIP… et sélectionnez la bibliothèque que vous venez de télécharger.

Après avoir installé les bibliothèques requises, copiez le code suivant dans votre IDE Arduino.

/*********
  Rui Santos
  Complete project details at https://Raspberryme.com/esp8266-relay-module-ac-web-server/
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

// Import required libraries
#include "ESP8266WiFi.h"
#include "ESPAsyncWebServer.h"

// Set to true to define Relay as Normally Open (NO)
#define RELAY_NO    true

// Set number of relays
#define NUM_RELAYS  5

// Assign each GPIO to a relay
int relayGPIOs[NUM_RELAYS] = {5, 4, 14, 12, 13};

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

const char* PARAM_INPUT_1 = "relay";  
const char* PARAM_INPUT_2 = "state";

// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style>
    html {font-family: Arial; display: inline-block; text-align: center;}
    h2 {font-size: 3.0rem;}
    p {font-size: 3.0rem;}
    body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
    .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>
</head>
<body>
  <h2>ESP Web Server</h2>
  %BUTTONPLACEHOLDER%
<script>function toggleCheckbox(element) {
  var xhr = new XMLHttpRequest();
  if(element.checked){ xhr.open("GET", "/update?relay="+element.id+"&state=1", true); }
  else { xhr.open("GET", "/update?relay="+element.id+"&state=0", true); }
  xhr.send();
}</script>
</body>
</html>
)rawliteral";

// Replaces placeholder with button section in your web page
String processor(const String& var){
  //Serial.println(var);
  if(var == "BUTTONPLACEHOLDER"){
    String buttons ="";
    for(int i=1; i<=NUM_RELAYS; i++){
      String relayStateValue = relayState(i);
      buttons+= "<h4>Relay #" + String(i) + " - GPIO " + relayGPIOs[i-1] + "</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"" + String(i) + "\" "+ relayStateValue +"><span class=\"slider\"></span></label>";
    }
    return buttons;
  }
  return String();
}

String relayState(int numRelay){
  if(RELAY_NO){
    if(digitalRead(relayGPIOs[numRelay-1])){
      return "";
    }
    else {
      return "checked";
    }
  }
  else {
    if(digitalRead(relayGPIOs[numRelay-1])){
      return "checked";
    }
    else {
      return "";
    }
  }
  return "";
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);

  // Set all relays to off when the program starts - if set to Normally Open (NO), the relay is off when you set the relay to HIGH
  for(int i=1; i<=NUM_RELAYS; i++){
    pinMode(relayGPIOs[i-1], OUTPUT);
    if(RELAY_NO){
      digitalWrite(relayGPIOs[i-1], HIGH);
    }
    else{
      digitalWrite(relayGPIOs[i-1], LOW);
    }
  }
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP8266 Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });

  // Send a GET request to <ESP_IP>/update?relay=<inputMessage>&state=<inputMessage2>
  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    String inputParam;
    String inputMessage2;
    String inputParam2;
    // GET input1 value on <ESP_IP>/update?relay=<inputMessage>
    if (request->hasParam(PARAM_INPUT_1) & request->hasParam(PARAM_INPUT_2)) {
      inputMessage = request->getParam(PARAM_INPUT_1)->value();
      inputParam = PARAM_INPUT_1;
      inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
      inputParam2 = PARAM_INPUT_2;
      if(RELAY_NO){
        Serial.print("NO ");
        digitalWrite(relayGPIOs[inputMessage.toInt()-1], !inputMessage2.toInt());
      }
      else{
        Serial.print("NC ");
        digitalWrite(relayGPIOs[inputMessage.toInt()-1], inputMessage2.toInt());
      }
    }
    else {
      inputMessage = "No message sent";
      inputParam = "none";
    }
    Serial.println(inputMessage + inputMessage2);
    request->send(200, "text/plain", "OK");
  });
  // Start server
  server.begin();
}
  
void loop() {

}

Afficher le code brut

Définir la configuration du relais

Modifiez la variable suivante pour indiquer si vous utilisez vos relais en configuration normalement ouverte (NO) ou normalement fermée (NC). Met le RELAY_NO variable à vrai pour un système d’exploitation normalement ouvert défini sur faux pour normalement fermé.

#define RELAY_NO true

Définir le nombre de relais (canaux)

Vous pouvez définir le nombre de relais que vous souhaitez contrôler sur le NUM_RELAIS variable. À des fins de démonstration, nous le réglons sur 5.

#define NUM_RELAYS 5

Définir l’affectation des broches des relais

Dans la variable de tableau suivante, vous pouvez définir les GPIO ESP8266 qui contrôleront les relais.

int relayGPIOs[NUM_RELAYS] = {5, 4, 14, 12, 13};

Le nombre de relais réglés sur le NUM_RELAIS la variable doit correspondre au nombre de GPIO attribués dans le relaisGPIO déployer.

Informations d’identification réseau

Insérez vos informations d’identification réseau dans les variables suivantes.

const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Câblage du relais 8 canaux à ESP8266 NodeMCU

À des fins de démonstration, nous contrôlons 5 canaux de relais. Câblez la carte ESP8266 NodeMCU au module de relais comme indiqué dans le schéma suivant.

Schéma de câblage du module de relais à 8 canaux ES8266

Manifestation

Après avoir apporté les modifications nécessaires, téléchargez le code sur votre ESP8266.

Ouvrez le moniteur série à un débit en bauds de 115200 et appuyez sur le bouton ESP8266 RST pour obtenir son adresse IP.

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

Vous devriez obtenir quelque chose comme suit avec autant de boutons que le nombre de relais que vous avez défini dans votre code.

Serveur Web ESP8266 contrôlant la lampe AC avec module de relais

Désormais, vous pouvez utiliser les boutons pour contrôler vos relais à distance à l’aide de votre smartphone.

Enceinte pour la sécurité

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

Boîtier pour module relais

Conclusion

L’utilisation de relais avec l’ESP8266 est un excellent moyen de contrôler à distance les appareils électroménagers AC. Vous pouvez également lire notre autre guide pour contrôler un module de relais avec ESP32.

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

Vous pouvez utiliser nos autres exemples de serveur Web qui contrôlent les sorties pour contrôler les relais. Il vous suffit de faire attention à la configuration que vous utilisez. Si 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 l’ESP8266 avec nos ressources :

Merci d’avoir lu.