PROJECT IOT WEB SERVER ESP32

Project IOT Kendali Lampu Rumah dengan web server ESP32

Project IOT cara mengontrol Lampu rumah menggunakan module ESP32 sebagai Web Server yang dikendalikan menggunakan web Browser.

Web Server ESP32

adalah perangkat lunak yang berfungsi sebagai sarana penerimaan atau pengiriman data melalui web browser dan memberi response dalam bentuk situs HTML dan pada tutorial ini digunakan hardware ESP32.

ESP32 merupakan modul microcontroller yang mempunyai fasilitas wifi layaknya keluarga ESP8266 keluaran dari espresif.

Pada kali ini kita gunakan untuk kendali IOT yang berbasi web browser dan ESP32 sebagai main modul nya.

Untuk mengontrol lampu rumah digunakan modul relay yang dihubungkan ke module wifi ESP32. Dan dari module tersebut dikoneksikan ke wifi rumah kita dan dapat menjadi web server yang dapat dikendalikan.

Pengendalian relay tersebut menggunakan web browser dapat dari smartphone atau laptop dengan mengetikan alamat ip address yang muncul sebagai alamat module.

ESP32 Web Server - Control Relay

Selain dapat digunakan mengendalikan lampu dapat juga diaplikasikan mengendalikan pendingin ruangan / AC, motor pompa listrik, serta alat listrik lainnya yang ada dirumah.


Penjelasan Singkat – Apa itu Relay?

Relay merupakan sakelar yang dioperasikan secara elektrik dan seperti sakelar lainnya, dimana dapat dihidupkan atau dimatikan.

Ini dapat dikontrol dengan tegangan rendah, seperti 3.3V yang disediakan oleh ESP32 GPIO dan memungkinkan untuk mengontrol tegangan tinggi seperti 12V, 24V atau tegangan listrik 230V.

Terdapat beberapa macam modul relay yang ada dipasaran dengan jumlah variasi channel 1, 2, 4, 8, 16, dan bahkan 32 channel. Jumlah channel menentukan jumlah output yang dapat kita kendalikan.

RELAY guna web server

Selain itu terdapat modul relay yang dimana dapat mendukung untuk tegangan 5V dan dengan 3,3V.

Keduanya dapat digunakan dengan ESP32 – Anda dapat menggunakan pin VIN yang menyediakan 5V atau pin 3.3V.

Dan beberapa modul dilengkapi dengan optocoupler built-in yang digunakan untuk perlindungan ekstra, secara optik mengisolasi ESP32 dari sirkuit relay.

Relay Pinout

Pada contoh gambar dibawah ini akan ditunjukan pin out dari module relay 1 channel

Relay pin out 1 channel

Pada samping kiri terdapat 1 x 3 pin terminal block yang dihubungkan ke tegangan tinggi misal listrik 220v max 10A, sedangkan pada samping kanan dihubungkan ke output dari ESP32 GPIO dan terdapat mode aktif HIGH.

3 pin terminal block tersebut terdiri dari :

  • COM : hubungkan arus yang ingin Anda kontrol (tegangan listrik)
  • NC (Normally Closed) : konfigurasi yang kondisi awal rangkaian terhubung, dan apabila pada sisi kontrol diaktifkan maka akan terputus
  • NO (Normally Open) : Kebalikan dari NC yang dimana apabila diberikan sinyal pada sisi kontrol maka akan terhubung

Pin Kontrol Relay

Sisi tegangan rendah memiliki satu set empat pin dan satu set tiga pin. Set pertama terdiri dari VCC dan GND untuk menyalakan modul, dan masukan 1 (IN1) dan masukan 2 (IN2) untuk mengontrol relai.

Cara pengecekan modul relay 1 channel bekerja seharusnya yaitu pada sisi kontrol VCC dan GND dihubungkan ke power supply dan pin IN dihubungkan ke VCC.

Apabila berbunyi “klik” maka tanda relay bekerja dan dapat dicek pula kondisi COM dan NC / NO nya.

Saat kondisi itu harus ditemukan kondisi untuk COM dan NO dengan fasilitas buzzer pada multitester harus berbunyi, COM dan NC harus tidak berbunyi.


Tutorial 1 Uji Coba kontrol relay menggunakan ESP32

Bahan yang perlu dipersiapkan

  1. ESP32 (DOIT ESP32 DEV KIT)
  2. Kabel micro USB
  3. Relay 8 channel 
  4. Kabel jumper Female to Female
  5. Konektor DC
  6. Adaptor 5vdc 2A
  7. Komputer + Arduino IDE

Wiring Schematic sederhana

wiring ESP32 Web Server dan Relay 8 Channel

Address GPIO ESP32 dan Relay

ESP32 RELAY
VIN VCC
GND GND
D13 GPIO 11 IN1
D12 10 2
D14 9 3
D27 13 4
D26 12 5
D25 14 6
D33 27 7
D32 26 8

Cara Menambahkan Module Boards ESP-32 di Arduino IDE

instalasi library board esp32

1. Di Arduino IDE Anda, buka File > Preference

2. Masukkan https://dl.espressif.com/dl/package_esp32_index.json ke dalam bidang “URL Pengelola Papan Tambahan” seperti yang ditunjukkan pada gambar di bawah. Kemudian, klik tombol “OK”

Catatan: jika Anda sudah memiliki URL papan ESP8266, Anda dapat memisahkan URL dengan koma sebagai berikut:

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

3. Buka Boards Manager. Buka Tools > Boards > Manager Boards

4. Cari ESP32 dan tekan tombol install untuk ” ESP32 oleh Sistem Espressif

5. Install dan tunggu beberapa saat

6. Buka Tools > Boards > ESP32 Arduino > DOIT ESP32 DEVKIT V1

Kode Program

//www.nyebarilmu.com
//Simple connect relay with esp32

#define relay1 11
#define relay2 10
#define relay3 9
#define relay4 13
#define relay5 12
#define relay6 14
#define relay7 27
#define relay8 26

void setup() {
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  pinMode(relay5, OUTPUT);
  pinMode(relay6, OUTPUT);
  pinMode(relay7, OUTPUT);
  pinMode(relay8, OUTPUT);
}

void loop() {
  digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  digitalWrite(relay3, LOW);
  digitalWrite(relay4, LOW);
  digitalWrite(relay5, LOW);
  digitalWrite(relay6, LOW);
  digitalWrite(relay7, LOW);
  digitalWrite(relay8, LOW);
  delay(3000);

  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  digitalWrite(relay3, HIGH);
  digitalWrite(relay4, HIGH);
  digitalWrite(relay5, HIGH);
  digitalWrite(relay6, HIGH);
  digitalWrite(relay7, HIGH);
  digitalWrite(relay8, HIGH);
  delay(3000);
}

Hasil Program diatas

 


Tutorial 2 Web Server ESP32 Kontrol Relay 8 Channel

Bahan yang perlu dipersiapkan

  1. ESP32 (DOIT ESP32 DEV KIT)
  2. Kabel micro USB
  3. Relay 8 channel
  4. Kabel jumper Female to female
  5. Konektor DC
  6. Adaptor 5vdc 2A
  7. LCD 16×2 dan driver PCF8574
  8. Koneksi Wifi – internet
  9. Modem Router
  10. Komputer / Laptop + Arduino IDE

Wiring Skematik

skematik wiring + i2c lcd web server ESP32

Konsep dasar

Skema Blok diagram

Fungsi dari LCD tersebut sebagai display yang menunjukan alamat IP address yang diketikan di smartphone atau di device yang sama-sama terhubung di satu jaringan yang sama.

Selain itu juga dapat dimanfaatkan untuk menunjukan status dari relay sedang ON atau OFF.

Untuk instalasi library LCD I2C dapat dicek pada postingan sebelumnya :

[irp posts=”742″ name=”Cara mengakses modul display LCD 16×2″]

Koding Program Web Server ESP32

[sociallocker id=1344]

#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>

LiquidCrystal_PCF8574 lcd(0x27); //cek menggunakan i2c scanner

// Set nilai relay dengan true
#define RELAY_NO    true

// Jumlah relay yang terpasang
#define NUM_RELAYS  8

// Alamat GPIO ESP32 yang terkonek dengan relay
int relayGPIOs[NUM_RELAYS] = {11, 10, 9, 13, 12, 14, 27, 26};

// Ganti dengan alamat wifi kalian dan password nya
const char* ssid = "Blok21no12";
const char* password = "Komponen08";

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

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> <img src="http://vete.my.id/wp-content/uploads/2018/11/Logo-website.png" alt="lofo-website.png" width="350" height="100"></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";

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 "";
}

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();
}



void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2); //set karakter LCD yang digunakan
  lcd.setBacklight(255);
 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);
    }
  }

  lcd.setCursor(0,0);
  lcd.print("WEB SERVER");
  lcd.setCursor(0,1);
  lcd.print("ESP32 + 8 RELAY");
  delay(3000);
  lcd.clear();

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
    lcd.setCursor(0,0);
    lcd.print("CONNECT WIFI");
  }

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Success Connect");
  delay(2000);
  lcd.clear();

  Serial.println(WiFi.localIP());
  lcd.setCursor(0,0);
  lcd.print("ip address :");
  lcd.setCursor(0,1);
  lcd.print(WiFi.localIP());


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

  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    String inputParam;
    String inputMessage2;
    String inputParam2;

    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");
  });

  server.begin();
}

void loop() {

}

[/sociallocker]

Hasil trial/test program diatas

ESP32 Web Server - Control Relay

 

PROJECT IOT WEB SERVER ESP32

Project IOT Kendali Lampu Rumah dengan web server ESP32

Project IOT cara mengontrol Lampu rumah menggunakan module ESP32 sebagai Web Server yang dikendalikan menggunakan web Browser.

Web Server ESP32

adalah perangkat lunak yang berfungsi sebagai sarana penerimaan atau pengiriman data melalui web browser dan memberi response dalam bentuk situs HTML dan pada tutorial ini digunakan hardware ESP32.

ESP32 merupakan modul microcontroller yang mempunyai fasilitas wifi layaknya keluarga ESP8266 keluaran dari espresif.

Pada kali ini kita gunakan untuk kendali IOT yang berbasi web browser dan ESP32 sebagai main modul nya.

Untuk mengontrol lampu rumah digunakan modul relay yang dihubungkan ke module wifi ESP32. Dan dari module tersebut dikoneksikan ke wifi rumah kita dan dapat menjadi web server yang dapat dikendalikan.

Pengendalian relay tersebut menggunakan web browser dapat dari smartphone atau laptop dengan mengetikan alamat ip address yang muncul sebagai alamat module.

ESP32 Web Server - Control Relay

Selain dapat digunakan mengendalikan lampu dapat juga diaplikasikan mengendalikan pendingin ruangan / AC, motor pompa listrik, serta alat listrik lainnya yang ada dirumah.


Penjelasan Singkat – Apa itu Relay?

Relay merupakan sakelar yang dioperasikan secara elektrik dan seperti sakelar lainnya, dimana dapat dihidupkan atau dimatikan.

Ini dapat dikontrol dengan tegangan rendah, seperti 3.3V yang disediakan oleh ESP32 GPIO dan memungkinkan untuk mengontrol tegangan tinggi seperti 12V, 24V atau tegangan listrik 230V.

Terdapat beberapa macam modul relay yang ada dipasaran dengan jumlah variasi channel 1, 2, 4, 8, 16, dan bahkan 32 channel. Jumlah channel menentukan jumlah output yang dapat kita kendalikan.

RELAY guna web server

Selain itu terdapat modul relay yang dimana dapat mendukung untuk tegangan 5V dan dengan 3,3V.

Keduanya dapat digunakan dengan ESP32 – Anda dapat menggunakan pin VIN yang menyediakan 5V atau pin 3.3V.

Dan beberapa modul dilengkapi dengan optocoupler built-in yang digunakan untuk perlindungan ekstra, secara optik mengisolasi ESP32 dari sirkuit relay.

Relay Pinout

Pada contoh gambar dibawah ini akan ditunjukan pin out dari module relay 1 channel

Relay pin out 1 channel

Pada samping kiri terdapat 1 x 3 pin terminal block yang dihubungkan ke tegangan tinggi misal listrik 220v max 10A, sedangkan pada samping kanan dihubungkan ke output dari ESP32 GPIO dan terdapat mode aktif HIGH.

3 pin terminal block tersebut terdiri dari :

  • COM : hubungkan arus yang ingin Anda kontrol (tegangan listrik)
  • NC (Normally Closed) : konfigurasi yang kondisi awal rangkaian terhubung, dan apabila pada sisi kontrol diaktifkan maka akan terputus
  • NO (Normally Open) : Kebalikan dari NC yang dimana apabila diberikan sinyal pada sisi kontrol maka akan terhubung

Pin Kontrol Relay

Sisi tegangan rendah memiliki satu set empat pin dan satu set tiga pin. Set pertama terdiri dari VCC dan GND untuk menyalakan modul, dan masukan 1 (IN1) dan masukan 2 (IN2) untuk mengontrol relai.

Cara pengecekan modul relay 1 channel bekerja seharusnya yaitu pada sisi kontrol VCC dan GND dihubungkan ke power supply dan pin IN dihubungkan ke VCC.

Apabila berbunyi “klik” maka tanda relay bekerja dan dapat dicek pula kondisi COM dan NC / NO nya.

Saat kondisi itu harus ditemukan kondisi untuk COM dan NO dengan fasilitas buzzer pada multitester harus berbunyi, COM dan NC harus tidak berbunyi.


Tutorial 1 Uji Coba kontrol relay menggunakan ESP32

Bahan yang perlu dipersiapkan

  1. ESP32 (DOIT ESP32 DEV KIT)
  2. Kabel micro USB
  3. Relay 8 channel 
  4. Kabel jumper Female to Female
  5. Konektor DC
  6. Adaptor 5vdc 2A
  7. Komputer + Arduino IDE

Wiring Schematic sederhana

wiring ESP32 Web Server dan Relay 8 Channel

Address GPIO ESP32 dan Relay

ESP32 RELAY
VIN VCC
GND GND
D13 GPIO 11 IN1
D12 10 2
D14 9 3
D27 13 4
D26 12 5
D25 14 6
D33 27 7
D32 26 8

Cara Menambahkan Module Boards ESP-32 di Arduino IDE

instalasi library board esp32

1. Di Arduino IDE Anda, buka File > Preference

2. Masukkan https://dl.espressif.com/dl/package_esp32_index.json ke dalam bidang “URL Pengelola Papan Tambahan” seperti yang ditunjukkan pada gambar di bawah. Kemudian, klik tombol “OK”

Catatan: jika Anda sudah memiliki URL papan ESP8266, Anda dapat memisahkan URL dengan koma sebagai berikut:

https://dl.espressif.com/dl/package_esp32_index.json, http://arduino.esp8266.com/stable/package_esp8266com_index.json

3. Buka Boards Manager. Buka Tools > Boards > Manager Boards

4. Cari ESP32 dan tekan tombol install untuk ” ESP32 oleh Sistem Espressif

5. Install dan tunggu beberapa saat

6. Buka Tools > Boards > ESP32 Arduino > DOIT ESP32 DEVKIT V1

Kode Program

//www.nyebarilmu.com
//Simple connect relay with esp32

#define relay1 11
#define relay2 10
#define relay3 9
#define relay4 13
#define relay5 12
#define relay6 14
#define relay7 27
#define relay8 26

void setup() {
  pinMode(relay1, OUTPUT);
  pinMode(relay2, OUTPUT);
  pinMode(relay3, OUTPUT);
  pinMode(relay4, OUTPUT);
  pinMode(relay5, OUTPUT);
  pinMode(relay6, OUTPUT);
  pinMode(relay7, OUTPUT);
  pinMode(relay8, OUTPUT);
}

void loop() {
  digitalWrite(relay1, LOW);
  digitalWrite(relay2, LOW);
  digitalWrite(relay3, LOW);
  digitalWrite(relay4, LOW);
  digitalWrite(relay5, LOW);
  digitalWrite(relay6, LOW);
  digitalWrite(relay7, LOW);
  digitalWrite(relay8, LOW);
  delay(3000);

  digitalWrite(relay1, HIGH);
  digitalWrite(relay2, HIGH);
  digitalWrite(relay3, HIGH);
  digitalWrite(relay4, HIGH);
  digitalWrite(relay5, HIGH);
  digitalWrite(relay6, HIGH);
  digitalWrite(relay7, HIGH);
  digitalWrite(relay8, HIGH);
  delay(3000);
}

Hasil Program diatas

 


Tutorial 2 Web Server ESP32 Kontrol Relay 8 Channel

Bahan yang perlu dipersiapkan

  1. ESP32 (DOIT ESP32 DEV KIT)
  2. Kabel micro USB
  3. Relay 8 channel
  4. Kabel jumper Female to female
  5. Konektor DC
  6. Adaptor 5vdc 2A
  7. LCD 16×2 dan driver PCF8574
  8. Koneksi Wifi – internet
  9. Modem Router
  10. Komputer / Laptop + Arduino IDE

Wiring Skematik

skematik wiring + i2c lcd web server ESP32

Konsep dasar

Skema Blok diagram

Fungsi dari LCD tersebut sebagai display yang menunjukan alamat IP address yang diketikan di smartphone atau di device yang sama-sama terhubung di satu jaringan yang sama.

Selain itu juga dapat dimanfaatkan untuk menunjukan status dari relay sedang ON atau OFF.

Untuk instalasi library LCD I2C dapat dicek pada postingan sebelumnya :

[irp posts=”742″ name=”Cara mengakses modul display LCD 16×2″]

Koding Program Web Server ESP32

[sociallocker id=1344]

#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <LiquidCrystal_PCF8574.h>
#include <Wire.h>

LiquidCrystal_PCF8574 lcd(0x27); //cek menggunakan i2c scanner

// Set nilai relay dengan true
#define RELAY_NO    true

// Jumlah relay yang terpasang
#define NUM_RELAYS  8

// Alamat GPIO ESP32 yang terkonek dengan relay
int relayGPIOs[NUM_RELAYS] = {11, 10, 9, 13, 12, 14, 27, 26};

// Ganti dengan alamat wifi kalian dan password nya
const char* ssid = "Blok21no12";
const char* password = "Komponen08";

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

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> <img src="http://vete.my.id/wp-content/uploads/2018/11/Logo-website.png" alt="lofo-website.png" width="350" height="100"></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";

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 "";
}

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();
}



void setup(){
  Serial.begin(9600);
  lcd.begin(16, 2); //set karakter LCD yang digunakan
  lcd.setBacklight(255);
 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);
    }
  }

  lcd.setCursor(0,0);
  lcd.print("WEB SERVER");
  lcd.setCursor(0,1);
  lcd.print("ESP32 + 8 RELAY");
  delay(3000);
  lcd.clear();

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
    lcd.setCursor(0,0);
    lcd.print("CONNECT WIFI");
  }

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Success Connect");
  delay(2000);
  lcd.clear();

  Serial.println(WiFi.localIP());
  lcd.setCursor(0,0);
  lcd.print("ip address :");
  lcd.setCursor(0,1);
  lcd.print(WiFi.localIP());


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

  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    String inputParam;
    String inputMessage2;
    String inputParam2;

    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");
  });

  server.begin();
}

void loop() {

}

[/sociallocker]

Hasil trial/test program diatas

ESP32 Web Server - Control Relay

 

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *