|

Pilotez 2 relais à l’aide d’une carte de développement à double relais ESP32 et d’une interface Web

Prérequis :

Autre :

  • Tutoriel disponible pour téléverser sur la carte de développement à double relais ESP32 ICI

Version IDE :

  • Arduino IDE 2.3.5

Bibliothèque :

Vidéo de démonstration :

Schéma de câblage :

Code :

Code Arduino :
#include "LittleFS.h"
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <WiFi.h>

const char *ssid = "......";  // "Votre Nom_du_routeur"
const char *password = "......";  // "Votre Mot_de_passe_du_routeur"
AsyncWebServer server(80);

int Led = 23;
int Relay1 = 16;
int Relay2 = 17;
int Etatrelay1;
int Etatrelay2;


void setup() {
  Serial.begin(115200);

  pinMode(Led, OUTPUT);
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);

  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  // Imprimer l'adresse IP locale ESP
  Serial.println(WiFi.localIP());

  if (!LittleFS.begin()) {
    Serial.println("An Error has occurred while mounting LittleFS");
    return;
  }

  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(LittleFS, "/index.html", "text/html");
  });

  server.on("/script.js", HTTP_GET, [](AsyncWebServerRequest *request) {
    request->send(LittleFS, "/script.js", "text/javascript");
  });

  server.on("/lire_Etatrelay1", HTTP_GET, [](AsyncWebServerRequest *request) {
    String InfoEtatrelay1 = String(Etatrelay1);
    request->send(200, "text/plain", InfoEtatrelay1);
  });

  server.on("/lire_Etatrelay2", HTTP_GET, [](AsyncWebServerRequest *request) {
    String InfoEtatrelay2 = String(Etatrelay2);
    request->send(200, "text/plain", InfoEtatrelay2);
  });

  server.on("/write_Etatrelay1", HTTP_POST, [](AsyncWebServerRequest *request) {
    if (request->hasParam("Etatrelay1", true)) {
      String message;
      message = request->getParam("Etatrelay1", true)->value();
      Etatrelay1 = message.toInt();
    }
    request->send(204);
  });
  server.on("/write_Etatrelay2", HTTP_POST, [](AsyncWebServerRequest *request) {
    if (request->hasParam("Etatrelay2", true)) {
      String message;
      message = request->getParam("Etatrelay2", true)->value();
      Etatrelay2 = message.toInt();
    }
    request->send(204);
  });

  server.begin();
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) {
    digitalWrite(Led, HIGH);
  } else {
    digitalWrite(Led, LOW);
  }

  if (Etatrelay1 == 1) {
    digitalWrite(Relay1, HIGH);
  } else {
    digitalWrite(Relay1, LOW);
  }

  if (Etatrelay2 == 1) {
    digitalWrite(Relay2, HIGH);
  } else {
    digitalWrite(Relay2, LOW);
  }

  Serial.print("Etat relais 1 :");
  Serial.println(Etatrelay1);
  Serial.print("Etat relais 2 :");
  Serial.println(Etatrelay2);


  delay(500);
}
Code HTML :

( index.html )

<!DOCTYPE html>
<html lang="fr">

<head>
    <title></title>
    <meta name="viewport" content="width=device-width, initial-scale=1" charset="UTF-8" />
    <script type="text/javascript" src="https://webapps1.chicago.gov/cdn/jQuery-3.4.1/jquery-3.4.1.min.js"></script>
    <script type="text/javascript" src="script.js"></script>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
    <style>
        .form-switch.form-switch-xl {
            display: flex;
            justify-content: center;
            align-items: center;
        }

        .form-switch.form-switch-xl .form-check-input {
            height: 2.5rem;
            width: calc(5rem);
            border-radius: 5rem;

        }
    </style>

<body>
    <div class="container text-center">
        <br>
        <div>
            <h4>Relais 1</h4>
        </div>
        <div class="form-check form-switch form-switch-xl">
            <input class="form-check-input" type="checkbox" id="BtEtatrelay1">
        </div>
        <br>

        <div>
            <h4>Relais 2</h4>
        </div>
        <div class="form-check form-switch form-switch-xl">
            <input class="form-check-input " type="checkbox" id="BtEtatrelay2">
        </div>

    </div>
    </div>
</body>

</html>
Code Javascript :

( script.js )

$(document).ready(function () {
    $("#BtEtatrelay1").change(function () {
        var valeur = this.checked ? 1 : 0;
        $.post("write_Etatrelay1", {
            Etatrelay1: valeur
        });
        Etatrelay1();
    });
});

$(document).ready(function () {
    $("#BtEtatrelay2").change(function () {
        var valeur = this.checked ? 1 : 0;
        $.post("write_Etatrelay2", {
            Etatrelay2: valeur
        });
        Etatrelay2();
    });
});


function Etatrelay1() {
    var xhttp = new XMLHttpRequest();
    var ValeurEtatrelay1;
    xhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            ValeurEtatrelay1 = this.responseText;
            if (ValeurEtatrelay1 == 1) {
                document.getElementById("BtEtatrelay1").checked = true;
            } else {
                document.getElementById("BtEtatrelay1").checked = false;
            }
            console.log(ValeurEtatrelay1);
            return ValeurEtatrelay1;
        }
    };
    xhttp.open("GET", "lire_Etatrelay1", true);
    xhttp.send();

};

function Etatrelay2() {
    var xhttp = new XMLHttpRequest();
    var ValeurEtatrelay2;
    xhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            ValeurEtatrelay2 = this.responseText;
            if (ValeurEtatrelay2 == 1) {
                document.getElementById("BtEtatrelay2").checked = true;
            } else {
                document.getElementById("BtEtatrelay2").checked = false;
            }
            console.log(ValeurEtatrelay2);
            return ValeurEtatrelay2;
        }
    };
    xhttp.open("GET", "lire_Etatrelay2", true);
    xhttp.send();

};

Etatrelay1();
Etatrelay2();

function functioninterval() {
    Etatrelay1();
    Etatrelay2();
}

setInterval(functioninterval, 500);

Publications similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *