مشروع استخدام Relay مع ESP8266طريقة رائعة للتحكم في الأجهزة المنزلية عن بُعد باستخدام شبكتك المحلية Web - DIY Channel3

DIY Channel3

Arduino│ESP8266│ESP32│Drone│Robot

مشروع استخدام Relay مع ESP8266طريقة رائعة للتحكم في الأجهزة المنزلية عن بُعد باستخدام شبكتك المحلية Web

مشاركة هذا

 


- هذا المشروع عبارة عن دليل خطوة بخطوة يغطي كيفية إنشاء خادم ويب ESP8266 NodeMCU مستقل يتحكم في أي وحدة ترحيل Relay سننشئ خادم ويب ESP8266 يستجيب للجوال ويمكن الوصول إليه من أي جهاز باستخدام متصفح في شبكتك المحلية Relay هو مفتاح يعمل بالكهرباء ومثل أي مفتاح آخر ، يمكن تشغيله أو إيقاف تشغيله ، مما يسمح للتيار بالمرور أم لا. يمكن التحكم فيه بجهد منخفض ، مثل 3.3 فولت التي توفرها ESP GPIOs ويسمح لنا بالتحكم في الفولتية العالية مثل 12 فولت ، 24 فولت أو جهد التيار الكهربائي (230 فولت في أوروبا). توجد وحدات ترحيل relay مختلفة مع عدد مختلف من القنوات. يمكنك العثور على وحدات الترحيل relay بقناة واحدة ، وقناتين ، وأربع ، وثمانية وحتى ستة عشر قناة. يحدد عدد القنوات عدد المخرجات التي يمكنك التحكم فيها

- COM: قم بتوصيل التيار الذي تريد التحكم فيه (جهد التيار الكهربائي). - NC (مغلق عادة): يتم استخدام التكوين المغلق عادة عندما تريد إغلاق المرحل افتراضيًا. NC عبارة عن دبابيس COM متصلة ، مما يعني أن التيار يتدفق ما لم ترسل إشارة من ESP8266 إلى وحدة الترحيل لفتح الدائرة وإيقاف التدفق الحالي. - NO (عادةً مفتوح): يعمل التكوين المفتوح عادةً في الاتجاه المعاكس: لا يوجد اتصال بين دبابيس NO و COM ، لذلك تنقطع الدائرة ما لم ترسل إشارة من ESP8266 لإغلاق الدائرة.


- المكونات الرئيسية :

- ESP8266 NODEMCU
- 4ch 5V Relay Module

- 4PCS 5MM LED
- Resistor 220 ohm

- MINI BERADBOARD

- JUMPER WIRES



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


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

// ESP8266 4CH Relay Module With LED 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: #296F31}
    input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
  </style>
</head>
<body style="background-color:#b1bb00;">
  <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>LED #" + 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,esp 8266,eso8266 iot,dht11 esp8266,esp8266 server,esp8266 spiffs,esp8266 module,arduino esp8266,node red esp8266,nodemcu esp8266,esp8266 arduino,esp8266 website,esp8266 tutorial,esp8266 projects,how to use esp8266,esp8266 webserver,esp8266 web server,esp8266 dht22 + matt,esp8266 wifi module,thingspeak esp8266,nodemcu esp8266 iot,esp8266 wifi station,esp8266 smartconfig,esp8266 programming,server dengan esp8266,nodemcu esp8266 dht11,lolin nodemcu esp8266,esp8266 web server code

No comments:

Post a Comment