ESP8266 Arduino IDE – Dual Communication ESP8266 Button LED

Pada artikel sebelumnya kita pernah membahas mengenai komunikasi client server antara dua esp8266 yang saling terhubung satu sama lain dan memberikan sebuah output data yang dikirimkan dari client ke server (Baca juga : ESP8266 Arduino IDE – Client Server Communication).

Nah pada tutorial kali ini kita akan membahas lebih lanjut tentang komunikasi dua esp8266. Hasil dari percobaan kali ini kita akan coba untuk mengirimkan data yang dihasilkan dari switch yang terhubung ke esp8266 client (station mode) untuk menghidupkan led yang terhubung ke esp8266 server (hotspot mode).

Skema rangkaian dapat dilihat seperti dibawah ini.

Skematic Dual ESP communication

Berikut kode program ESP8266 Client :

#include <ESP8266WiFi.h>
#Define button 5

const char* ssid = "warriornux.com";       // Nama SSID AP/Hotspot
const char* password = "1234567890";       // Password Wifi

IPAddress host(192,168,4,1);       // IP Server

int buttonstate = 0;

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

  pinMode(button, INPUT);
  
// Connect to WiFi network ------------------------------------------------
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

// Mengatur WiFi ----------------------------------------------------------
  WiFi.mode(WIFI_STA);                      // Mode Station
  WiFi.begin(ssid, password);               // Mencocokan SSID dan Password
  
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

// Print status Connect ---------------------------------------------------
  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop(){
  buttonstate = digitalRead(button);

  const char* url;
  if (buttonstate == HIGH) {
    url="ledoff";
  }
  else {
    url="ledon";
  }

int value = 0;

  delay(5000);
  ++value;

  Serial.print("connecting to ");
  Serial.println(host);
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  // We now create a URI for the request  
  Serial.print("Requesting URL: ");
  Serial.println(url);
  
  // This will send the request to the server
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" + 
               "Connection: close\r\n\r\n");
  unsigned long timeout = millis();
  while (client.available() == 0) {
    if (millis() - timeout > 5000) {
      Serial.println(">>> Client Timeout !");
      client.stop();
      return;
    }
  }
  
  // Read all the lines of the reply from server and print them to Serial
  while(client.available()){
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
  
  Serial.println();
  Serial.println("closing connection");
}

Berikut kode program ESP8266 Server :

#include <ESP8266WiFi.h>
#define LED 14

const char* ssid = "warriornux.com";      // Nama AP/Hotspot
const char* password = "1234567890";    // Password AP/Hotspot

WiFiServer server(80);
void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(LED, OUTPUT);
  digitalWrite(LED, LOW);
   
 // Mengatur WiFi ----------------------------------------------------------
  Serial.println();
  Serial.print("Configuring access point...");
   
  WiFi.mode(WIFI_AP);             // Mode AP/Hotspot
  WiFi.softAP(ssid, password);
  
 // Start the server -------------------------------------------------------
  server.begin();
  Serial.println("Server dijalankan");
  
 // Print the IP address ---------------------------------------------------
  Serial.println(WiFi.localIP());
 }


void loop() {
  // Check if a client has connected
  WiFiClient client = server.available();
  if (!client) {
    return;
  }
  
  // Wait until the client sends some data
  Serial.println("new client");
  while(!client.available()){
    delay(1);
  }
  
  // Read the first line of the request -------------------------------------
   String req = client.readStringUntil('\r');
   Serial.println(req);
   client.flush();
  
   //Command LED -------------------------------------------------------------
    if (req.indexOf("ledon") != -1){
      digitalWrite(LED, HIGH);
    }
   else if (req.indexOf("ledoff") != -1){
      digitalWrite(LED, LOW);
    }
   else {
     Serial.println("invalid request");
     client.stop();
     return;
    }
  
   client.flush();
   Serial.println("Client disonnected");
  
  // The client will actually be disconnected 
  // when the function returns and 'client' object is detroyed
}

Penjelasan : Ketika button pada esp8266 client ditekan, maka client tersebut akan mengirimkan data ledon kepada esp8266 server, sehingga nantinya led pada esp8266 server akan hidup. Akan tetapi apabila button tidak ditekan, maka esp8266 client akan mengirim data berupa ledoff.

Berikut video demonya :

Sekian merupakan tutorial komunikasi dua esp8266 untuk menghidupkan led, jangan lupa like, subscribe, dan bagikan artikel ini kepada kawan kawan kalian, agar banyak temanmu yang semakin belajar. Selamat mencoba kawan kawan.

Tresna Widiyaman Avatar
Subscribe
Notify of
10 Comments
Most Voted
Newest Oldest
Inline Feedbacks
View all comments
Prajanji Kukuh
Prajanji Kukuh
5 years ago

Mas Tresna, pada program Client saya ada error “ambiguous overload for ‘operator+’ (operand types are ‘StringSumHelper’ and ‘IPAddress’)” tertuju pada bagian “client.print(String(“GET “) + url + ” HTTP/1.1rn” + “Host: ” + host + “rn” + “Connection: closernrn”);” apakah karna beda library / board manager ya? saya pakai esp8266 by ESP8266 Community v2.5.0. mohon bantuannya. Terima Kasih

Eril
Eril
4 years ago

Selama siang kak,
apakah bisa dibuatkan turorial seperti di atas tapi menggunakan aplikasi blynk kak?

terima kasih kak

januarman maulana putra
januarman maulana putra
5 years ago

mas inikan kalo ditekan dia nyala kalo gak diteken buttonnya dia mati,nas sy mau taruh pakek sensor sentuh tapi bagaimana programnya agar ketika disentuh dia nyala dan disentuh lagi dia mati,,soalnya kalo menggunakan program diatas dia harus disentuh aja baru nyala pas dilepas dia mati

Wahyu
Wahyu
4 years ago

Selamat Siang, Saya mau Tanya kalau misalkan kita pakai 3 Esp8266,, jadi 1 server 2 client
dan masing” esp8266 terdapat tombol dan Led,, jadi ketika di jalan kan salah satu led langsung nyala dan ketika tombol yg di led nyala tersebut di tekan led tersebut mati,, esp8266 yg lain lednya nyala.,,
dan begitu seterusnya,, apa bisa di buat gtu..??

Reynaldi Cahya Putra
Reynaldi Cahya Putra
4 years ago

minta library esp8266 nya bang

Risky Putra Utama
Risky Putra Utama
4 years ago

ini masalahnya apa ya mas?comment image

Irvan Saputra
Irvan Saputra
4 years ago

mas kalo servernya ingin konek juga ke internet sehingga bisi kirim data ke internet apakah bisa?