KUNJUNGI KAMI

KUNJUNGI KAMI DI TOKOPEDIA, SHOPEE,

Senin, 29 Agustus 2022

KOMUNIKASI WI-FI CLIENT-SERVER ESP8266 ANTARA DUA BOARD (NODEMCU)

Pelajari cara membuat komunikasi Wi-Fi (HTTP) antara dua papan NodeMCU ESP8266 untuk bertukar data tanpa perlu terhubung ke internet (Anda tidak memerlukan router).
Anda akan menetapkan satu ESP8266 sebagai Access Point (Server) dan ESP8266 lainnya sebagai Station (Client). Kemudian, server dan klien akan bertukar data (pembacaan sensor) melalui permintaan HTTP. Kami akan memprogram papan ESP8266 menggunakan Arduino IDE .

Dalam contoh ini, kami akan mengirimkan pembacaan sensor DHT11 dari satu papan ke papan lainnya. Penerima akan menampilkan pembacaan pada layar OLED .

Jika Anda memiliki papan ESP32, Anda dapat membaca panduan khusus ini: Komunikasi Wi-Fi Client-Server ESP32 .

Ulasan Proyek

Untuk lebih memahami bagaimana semuanya bekerja, lihat diagram berikut.


Server ESP8266 membuat jaringan nirkabelnya sendiri ( ESP8266 Soft-Access Point ). Jadi, perangkat Wi-Fi lain dapat terhubung ke jaringan itu ( SSID: DHT-WIFI, Password: 12345678).

Klien ESP8266 diatur sebagai stasiun. Jadi, dapat terhubung ke jaringan nirkabel server ESP8266.

Klien dapat membuat permintaan HTTP GET ke server untuk meminta data sensor atau informasi lainnya. Itu hanya perlu menggunakan alamat IP server untuk membuat permintaan pada rute tertentu:/temperature,/humidity

Server mendengarkan permintaan yang masuk dan mengirimkan respons yang sesuai dengan pembacaan.

Klien menerima bacaan dan menampilkannya di layar OLED.

Sebagai contoh, client ESP8266 meminta suhu, kelembaban dan tekanan ke server dengan membuat permintaan pada alamat IP server diikuti dengan/temperature,dan/humidity, masing-masing (HTTP GET).

Server ESP8266 mendengarkan rute tersebut dan ketika permintaan dibuat, ia mengirimkan pembacaan sensor yang sesuai melalui respons HTTP.

Bagian yang Diperlukan


Untuk tutorial ini, Anda memerlukan bagian-bagian berikut:

2x ESP8266 

Pelat Dasar ESP8266

Layar OLED I2C SSD1306

Sensor DHT11

Kabel jumper


Menginstal Library


 Library Asinkron Web Server


Kami akan menggunakan library berikut untuk menangani permintaan HTTP:

 Library ESPAsyncWebServer ( unduh library ESPAsyncWebServer )

 Library ESPAsync TCP ( unduh library ESPAsyncTCP )

Library ini tidak tersedia untuk diinstal melalui Manajer Libaries. Jadi, Anda perlu meng-unzip library dan memindahkannya ke folder library instalasi Arduino IDE.


Atau, Anda dapat pergi ke  Sketch  >  Include Library  >  Add .ZIP library…  dan pilih library yang baru saja Anda unduh.


Note: Lewati langkah-langkah dibawah ini jika kalian telah menginstal library ESPAsyncWebServer dan Async TCP sebelumnya.


Menginstal DHT Sensor Library

Untuk membaca dari sensor DHT menggunakan Arduino IDE, Anda perlu menginstal library sensor DHT . Ikuti langkah selanjutnya untuk menginstal perpustakaan.
1.Klik di sini untuk mengunduh library Sensor DHT . Anda harus memiliki folder .zip di folder Unduhan Anda
2.Buka zip folder .zip dan Anda akan mendapatkan folder   DHT -sensor-library-master
3.Ganti nama folder Anda DHT-sensor-library ke DHT_sensor
4.Pindahkan folder DHT_sensor  ke folder library instalasi Arduino IDE Anda
5.Terakhir, buka kembali IDE Arduino Anda

Menginstal Adafruit Unified Sensor Driver

Anda juga perlu menginstal library Adafruit Unified Sensor Driver agar dapat bekerja dengan sensor DHT. Ikuti langkah selanjutnya untuk menginstal library.
1.Klik di sini untuk mengunduh library Adafruit Unified Sensor . Anda harus memiliki folder .zip di folder Unduhan Anda
2.Buka zip folder .zip dan Anda akan mendapatkan   folder Adafruit_sensor-master
3.Ganti nama folder Anda ke  Adafruit_sensor
4.Pindahkan folder Adafruit_sensor ke folder library instalasi Arduino IDE Anda
5.Terakhir, buka kembali IDE Arduino Anda

Menginstal Library OLED I2C SSD1306

Untuk berinteraksi dengan tampilan OLED, Anda memerlukan library berikut. Ini dapat diinstal melalui Arduino Library Manager. Buka Sketch > include Library > Manager Library dan cari nama perpustakaan.
Adafruit SSD1306
Perpustakaan Adafruit GFX


#1 Server ESP8266 (Titik Akses)


Server ESP8266 adalah Access Point (AP) , yang mendengarkan permintaan di/temperature,dan /humidity URL. Ketika mendapat permintaan pada URL tersebut, ia mengirimkan pembacaan sensor DHT terbaru.

Diagram skematik

Hubungkan ESP8266 ke Sensor DHT seperti yang ditunjukkan pada diagram skema berikut.



Program Arduino untuk #1 ESP8266 Server

// Import required libraries
#include <ESP8266WiFi.h>
#include "ESPAsyncWebServer.h"

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>

// Set your access point network credentials
const char* ssid = "DHT-WIFI";
const char* password = "12345678";

#define DHTPIN 2     // D4 pin connected to the DHT sensor

// Uncomment the type of sensor in use:
#define DHTTYPE    DHT11     // DHT 11
//#define DHTTYPE    DHT22     // DHT 22 (AM2302)
//#define DHTTYPE    DHT21     // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

float t = 0.0;
float h = 0.0;


// Create AsyncWebServer object on port 80
AsyncWebServer server(80);


// Generally, you should use "unsigned long" for variables that hold time
// The value will quickly become too large for an int to store
unsigned long previousMillis = 0;    // will store last time DHT was updated

// Updates DHT readings every 10 seconds
const long interval = 10000;  

// Replaces placeholder with DHT values
String processor(const String& var){
  //Serial.println(var);
  if(var == "TEMPERATURE"){
    return String(t);
  }
  else if(var == "HUMIDITY"){
    return String(h);
  }
  return String();
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);
  Serial.println();
  dht.begin();
  
  // Setting the ESP as an access point
  Serial.print("Setting AP (Access Point)…");
  // Remove the password parameter, if you want the AP (Access Point) to be open
  WiFi.softAP(ssid, password);

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);

  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", String(t).c_str());
  });
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", String(h).c_str());
  });
  
  // Start server
  server.begin();
}
 
void loop(){
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    // save the last time you updated the DHT values
    previousMillis = currentMillis;
    // Read temperature as Celsius (the default)
    float newT = dht.readTemperature();
    // Read temperature as Fahrenheit (isFahrenheit = true)
    //float newT = dht.readTemperature(true);
    // if temperature read failed, don't change t value
    if (isnan(newT)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    else {
      t = newT;
      Serial.println(t);
    }
    // Read Humidity
    float newH = dht.readHumidity();
    // if humidity read failed, don't change h value 
    if (isnan(newH)) {
      Serial.println("Failed to read from DHT sensor!");
    }
    else {
      h = newH;
      Serial.println(h);
    }
  }
}


Menguji Server ESP8266


Ini berarti titik akses telah berhasil diatur.
Sekarang, untuk memastikannya mendengarkan permintaan suhu, dan kelembaban, Anda harus terhubung ke jaringannya.
Di ponsel cerdas Anda, buka pengaturan Wi-Fi dan sambungkan ke DHT-WIFI. Kata sandinya adalah 12345678.



Saat terhubung ke titik akses, buka browser Anda dan ketik192.168.4.1/temperature

Anda harus mendapatkan nilai suhu di browser Anda:




Coba jalur URL ini untuk kelembapan192.168.4.1/humidity:


Jika Anda mendapatkan bacaan yang valid, itu berarti semuanya berfungsi dengan baik. Sekarang, Anda perlu menyiapkan papan (klien) ESP8266 lainnya untuk membuat permintaan tersebut untuk Anda dan menampilkannya di layar OLED.

#2 ESP8266 Klien (Stasiun)


Klien ESP8266 adalah stasiun Wi-Fi yang terhubung ke Server ESP8266. Klien meminta suhu, kelembaban, dan tekanan dari server dengan membuat permintaan HTTP GET di/temperature, dan /humidity,rute URL. Kemudian, ini menampilkan pembacaan pada layar OLED. 

Diagram skematik

Hubungkan layar OLED ke papan ESP8266 Anda seperti yang ditunjukkan pada diagram skema berikut.



Program Arduino untuk Klien # 2 ESP8266

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>

#include <ESP8266WiFiMulti.h>
ESP8266WiFiMulti WiFiMulti;

const char* ssid = "DHT-WIFI";
const char* password = "12345678";

//Your IP address or domain name with URL path
const char* serverNameTemp = "http://192.168.4.1/temperature";
const char* serverNameHumi = "http://192.168.4.1/humidity";

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

String temperature;
String humidity;

unsigned long previousMillis = 0;
const long interval = 5000; 

void setup() {
  Serial.begin(115200);
  Serial.println();
  
  // Address 0x3C for 128x64, you might need to change this value (use an I2C scanner)
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextColor(WHITE);
 
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Connected to WiFi");
}

void loop() {
  unsigned long currentMillis = millis();
  
  if(currentMillis - previousMillis >= interval) {
     // Check WiFi connection status
    if ((WiFiMulti.run() == WL_CONNECTED)) {
      temperature = httpGETRequest(serverNameTemp);
      humidity = httpGETRequest(serverNameHumi);
      Serial.println("Temperature: " + temperature + " *C - Humidity: " + humidity);
      
      display.clearDisplay();
      
      // display temperature
      display.setTextSize(2);
      
      display.setCursor(0,0);
      display.print("T: ");
      display.print(temperature);
      display.print(" ");
      display.setTextSize(1);
      display.cp437(true);
      display.write(248);
      display.setTextSize(2);
      display.print("C");
      
      // display humidity
      display.setTextSize(2);
      display.setCursor(0, 25);
      display.print("H: ");
      display.print(humidity);
      display.print(" %"); 
           
      display.display();
      
      // save the last HTTP GET Request
      previousMillis = currentMillis;
    }
    else {
      Serial.println("WiFi Disconnected");
    }
  }
}

String httpGETRequest(const char* serverName) {
  WiFiClient client;
  HTTPClient http;
    
  // Your IP address with path or Domain name with URL path 
  http.begin(client, serverName);
  
  // Send HTTP POST request
  int httpResponseCode = http.GET();
  
  String payload = "--"; 
  
  if (httpResponseCode>0) {
    Serial.print("HTTP Response code: ");
    Serial.println(httpResponseCode);
    payload = http.getString();
  }
  else {
    Serial.print("Error code: ");
    Serial.println(httpResponseCode);
  }
  // Free resources
  http.end();

  return payload;
}

Menguji Klien ESP8266

Setelah kedua papan cukup dekat dan bertenaga, Anda akan melihat bahwa ESP #2 menerima pembacaan suhu, dan kelembaban baru setiap 5 detik dari ESP #1.

Tutorial oleh: Riki & Bagas





esp esp8266 esp32 espnow nodemcu NodeMCU V3 NodeMCU V1 espwifi espclientserver espserver esp8266 dht esp oled oled esp dht esp tutorial esp tutorial esp32 tutorial esp8266 tutorial nodemcu v3 dht nodemcu oled nodemcu tutorial dht server dht web server oled web server dht wifi  dht11 dht22 dht21

TUTORIAL MENGONTROL RELAY DENGAN HP MENGGUNAKAN ESP32 WEB SERVER

  Di bagian ini, kami telah membuat contoh server web yang memungkinkan Anda untuk mengontrol relai sebanyak yang Anda inginkan melalui serv...