كيفية التحكم في Relay Module مع 4 قنوات متعددة باستخدام خادم ويب (web server) و ESP8266 nodemcu - DIY Channel3

DIY Channel3

Arduino│ESP8266│ESP32│Drone│Robot

كيفية التحكم في Relay Module مع 4 قنوات متعددة باستخدام خادم ويب (web server) و ESP8266 nodemcu

مشاركة هذا

 


يعد استخدام مرحل مع ESP8266 طريقة رائعة للتحكم في الأجهزة المنزلية بالتيار المتردد عن بُعد. يشرح هذا البرنامج التعليمي كيفية التحكم في وحدة الترحيل (رولي) باستخدام ESP8266 NodeMCU. سنلقي نظرة على كيفية عمل وحدة الترحيل ، وكيفية توصيل المرحل(رولي) بـ ESP8266 وبناء خادم ويب للتحكم في الترحيل عن بُعد (أو أي عدد تريده من المرحلات او رولي )

التتابع هو مفتاح يعمل بالكهرباء ومثل أي مفتاح آخر ، يمكن تشغيله أو إيقاف تشغيله ، مما يسمح للتيار بالمرور أم لا. يمكن التحكم فيه بجهد منخفض ، مثل 3.3 فولت التي توفرها ESP8266 GPIOs ويسمح لنا بالتحكم في الفولتية العالية مثل 12 فولت

- هذا البرنامج التعليمي عبارة عن دليل خطوة بخطوة يغطي كيفية إنشاء خادم ويب ESP32 أو ESP8266 NodeMCU مستقل يتحكم في أي وحدة ترحيل. سننشئ خادم ويب ESP32 / ESP8266 يستجيب للجوال ويمكن الوصول إليه من أي جهاز باستخدام متصفح في شبكتك المحلية.

- إدخال التبديلات التتابع هو مفتاح يعمل بالكهرباء ومثل أي مفتاح آخر ، يمكن تشغيله أو إيقاف تشغيله ، مما يسمح للتيار بالمرور أم لا. يمكن التحكم فيه بجهد منخفض ، مثل 3.3 فولت التي توفرها ESP8266 GPIOs ويسمح لنا بالتحكم في الفولتية العالية مثل 12 فولت ، 24 فولت أو جهد التيار الكهربائي (230 فولت في أوروبا و 120 فولت في الولايات المتحدة). - 1 ، 2 ، 4 ، 8 ، 16 وحدة ترحيل القنوات توجد وحدات ترحيل مختلفة بعدد مختلف من القنوات. يمكنك العثور على وحدات الترحيل بقناة واحدة ، وقناتين ، وأربع ، وثمانية وحتى ستة عشر قناة. يحدد عدد القنوات عدد المخرجات التي سنتمكن من التحكم فيها.

- المكونات الرئيسية : 
- ESP8266 NODEMCU
- 4ch 5V Relay Module

- SMARTPHONE

- JUMPER WIRES


- مخطط الرسم البياني :

- تحميل كود أردوينو :

// ESP8266 4CH Relay Module Web Server
// By : DIY Channel
// My YouTube Channel :https://www.youtube.com/c/DIYChannel2019

// 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  4

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

// Replace with your network credentials
const char* ssid = "Smart";
const char* password = "00001111";

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 style="background-color:#ff6347;">
  <h2>ESP 8266 4CH Relay Module Web Server
  By : DIY Channel </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() {

}

------------------------------------------------------------------------
esp8266,eps8266,esp 8266,esp8266-12,esp8266 12e,iot esp8266,esp8266 car,esp8266 pins,esp8266 flash,blynk esp8266,esp8266 blynk,esp8266driver,esp8266 server,esp8266 sheets,esp8266 series,esp8266 nodemcu,nodemcu esp8266,esp8266 upgrade,node mcu esp8266,esp8266 project,arduino esp8266,esp8266 tutorial,esp8266 projects,esp8266 firmware,esp8266nodemcuu,esp8266 whatsapp,esp8266 wifi hack,esp8266 deauther,nodemcu v3 esp8266,esp8266 web server,esp8266 to esp8266,esp8266 beginners,esp8266 webserver

No comments:

Post a Comment