Menghidupkan dan Mematikan Relay 4 Channel dengan NodeMCU / ESP8266 Sebagai Acces Point

Konten [Tampil]
    Tampilan WebServer

    Membuat Web Server dengan NodeMCU dan 4 Relay

    NodeMCU adalah board berbasis ESP8266 yang sangat populer untuk proyek IoT. Dalam artikel ini, kita akan membahas cara membuat web server menggunakan NodeMCU sebagai akses point dan mengontrol 4 relay dengan logika invers (relay aktif saat pin berlogika false). Relay ini dapat digunakan untuk mengontrol perangkat listrik seperti lampu, kipas angin, dan sebagainya.

    Alat dan Bahan

    1. NodeMCU (ESP8266)
    2. 4 Relay Module 5V
    3. Breadboard dan Jumper Wires
    4. Sumber Daya 5V
    5. Komputer dengan Arduino IDE
    6. Koneksi Wi-Fi (jika diperlukan)

    Skema Rangkaian
    Berikut adalah skema sederhana untuk menghubungkan NodeMCU dengan relay:

    - Relay 1: D1
    - Relay 2: D2
    - Relay 3: D3
    - Relay 4: D4

    Wiring , Vcc dan Gnd sambungkan ke 5V (Max Voltage) 2A (minimal current)

    Koneksi:
    - Hubungkan pin D1-D4 dari NodeMCU ke IN1-IN4 pada modul relay.
    - Hubungkan GND dari NodeMCU ke GND pada modul relay.
    - Hubungkan VCC dari modul relay ke sumber daya 5V.

    Kode Program
    Berikut adalah contoh kode untuk mengatur NodeMCU sebagai web server dan mengontrol relay:

    #include <ESP8266WiFi.h>
    #include <ESP8266WebServer.h>

    const char* ssid = "Your_SSID";  // Ganti dengan SSID Anda
    const char* password = "mypasswordxyz";  // Ganti dengan password Anda

    ESP8266WebServer server(80);

    // Definisi pin relay
    const int relay1Pin = D1;
    const int relay2Pin = D2;
    const int relay3Pin = D3;
    const int relay4Pin = D4; //Builtin_LED_Onboard

    bool relayStates[4] = {false, false, false, false}; // Status awal relay

    void setup() {
      Serial.begin(115200);
     
      pinMode(relay1Pin, OUTPUT);
      pinMode(relay2Pin, OUTPUT);
      pinMode(relay3Pin, OUTPUT);
      pinMode(relay4Pin, OUTPUT);
     
      digitalWrite(relay1Pin, HIGH); // Matikan semua relay
      digitalWrite(relay2Pin, HIGH);
      digitalWrite(relay3Pin, HIGH);
      digitalWrite(relay4Pin, HIGH);
     
      WiFi.softAP(ssid, password);
      Serial.println("Access Point siap. IP Address: ");
      Serial.println(WiFi.softAPIP());
     
      // Menetapkan route untuk homepage
      server.on("/", handleRoot);
      // Menetapkan route untuk mengontrol relay
      server.on("/relay", handleRelay);
     
      server.begin();
    }

    void loop() {
      server.handleClient(); // Menangani klien
    }

    void handleRoot() {
      String html = "<!DOCTYPE HTML><html>";
      html += "<head><meta name='viewport' content='width=device-width, initial-scale=1'>";
      html += "<style>body { font-family: Arial, sans-serif; background-color: #e3f2fd; margin: 0; padding: 20px; }";
      html += "h1 { color: #333; text-align: center; } .container { max-width: 600px; margin: auto; }";
      html += ".relay { background: white; border-radius: 10px; padding: 15px; margin: 10px 0; box-shadow: 0 2px 10px rgba(0,0,0,0.1); text-align: center; }";
      html += ".status { font-size: 1.2em; margin: 10px 0; } .on { color: green; } .off { color: red; }";
      html += "a { text-decoration: none; color: white; padding: 10px 15px; border-radius: 5px; }";
      html += ".btn-on { background-color: #4caf50; } .btn-off { background-color: #f44336; }</style>";
      html += "</head><body><div class='container'><h1>Kontrol Relay</h1>";

      // Menampilkan status setiap relay
      for (int i = 0; i < 4; i++) {
        html += "<div class='relay'>Relay " + String(i + 1) + "<div class='status'>Status: ";
        html += relayStates[i] ? "<span class='on'>ON</span>" : "<span class='off'>OFF</span>";
        html += "</div><a class='btn-on' href=\"/relay?num=" + String(i) + "&state=on\">Hidupkan</a> ";
        html += "<a class='btn-off' href=\"/relay?num=" + String(i) + "&state=off\">Matikan</a></div>";
      }

      html += "</div></body></html>";
      server.send(200, "text/html", html); // Mengirim HTML
    }

    void handleRelay() {
      if (server.hasArg("num") && server.hasArg("state")) {
        int relayNum = server.arg("num").toInt(); // Mendapatkan nomor relay
        String state = server.arg("state"); // Mendapatkan status

        if (relayNum >= 0 && relayNum < 4) {
          int pin = (relayNum == 0) ? relay1Pin : (relayNum == 1) ? relay2Pin : (relayNum == 2) ? relay3Pin : relay4Pin;

          if (state == "on") {
            digitalWrite(pin, LOW); // Hidupkan relay
            relayStates[relayNum] = true;
            Serial.print("Relay ");
            Serial.print(relayNum + 1);
            Serial.println(" dinyalakan.");
          } else if (state == "off") {
            digitalWrite(pin, HIGH); // Matikan relay
            relayStates[relayNum] = false;
            Serial.print("Relay ");
            Serial.print(relayNum + 1);
            Serial.println(" dimatikan.");
          }

          server.sendHeader("Location", "/"); // Redirect ke homepage
          server.send(302, "text/plain", ""); // Mengirim response
        } else {
          Serial.println("Relay number out of bounds.");
          server.send(400, "text/plain", "Bad Request");
        }
      } else {
        server.send(400, "text/plain", "Bad Request");
      }
    }

    Penjelasan Kode
    1. Konfigurasi WiFi: NodeMCU diatur sebagai akses point dengan SSID dan password yang ditentukan.
    2. Pin Relay: Didefinisikan array `relayPins` yang berisi pin yang digunakan untuk relay.
    3. Web Server: Server dimulai dan mendengarkan permintaan pada port 80. Ketika klien terhubung, server akan mengirimkan halaman HTML dengan tautan untuk menghidupkan atau mematikan relay.
    4. Kontrol Relay: Ketika tautan diklik, status relay akan diubah sesuai permintaan (ON atau OFF).

    Mengupload dan Menjalankan
    1. Pastikan Anda telah menginstal pustaka ESP8266 di Arduino IDE.
    2. Pilih board "NodeMCU" dan port yang sesuai.
    3. Upload kode ke NodeMCU.
    4. Buka browser dan masukkan alamat IP yang ditampilkan di Serial Monitor untuk mengakses web server.

    Tampilan WebServer

    Dengan mengikuti langkah-langkah di atas, Anda telah berhasil membuat web server dengan NodeMCU yang dapat mengontrol 4 relay. Anda dapat memperluas proyek ini dengan menambahkan lebih banyak fitur atau integrasi dengan sensor lainnya. Selamat mencoba!

    Umbrella Electronica 





    Next Post Previous Post
    No Comment
    Add Comment
    comment url