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
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
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)

Diagram skematik
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
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:
#2 ESP8266 Klien (Stasiun)
Diagram skematik
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
Tidak ada komentar:
Posting Komentar