KUNJUNGI KAMI

KUNJUNGI KAMI DI TOKOPEDIA, SHOPEE,

Jumat, 02 September 2022

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 server web apakah mereka dikonfigurasi sebagai biasanya dibuka atau ditutup secara normal. Anda hanya perlu mengubah beberapa baris kode untuk menentukan jumlah relai yang ingin Anda kontrol dan penetapan pin.

Untuk membangun server web ini, kami menggunakan library ESPAsyncWebServer .

Menginstal Library ESPAsyncWebServer

Ikuti langkah-langkah selanjutnya untuk menginstal  library ESPAsyncWebServer  :
1. Klik di sini untuk mengunduh library ESPAsyncWebServer . Anda harus memiliki folder .zip di folder Unduhan Anda
2. Buka zip folder .zip dan Anda akan mendapatkan   folder master ESPAsyncWebServer
3. Ganti nama folder Anda dari ESPAsyncWebServer - masterESPAsyncWebServer-master ke  ESPAsyncWebServer
4. Pindahkan  folder ESPAsyncWebServer  ke folder library instalasi Arduino IDE Anda
Atau, di Arduino IDE Anda, Anda bisa pergi ke Sketch > Include Library > Add .ZIP library… dan pilih library yang baru saja Anda unduh.

Menginstal Library Async TCP untuk ESP32

Ikuti langkah-langkah selanjutnya untuk menginstal  library AsyncTCP  :
1. Klik di sini untuk mengunduh library AsyncTCP . Anda harus memiliki folder .zip di folder Unduhan Anda
2. Buka zip folder .zip dan Anda akan mendapatkan folder master AsyncTCP
3. Ganti nama folder Anda dari AsyncTCP-master ke AsyncTCP
4. Pindahkan  folder AsyncTCP  ke folder library instalasi Arduino IDE Anda
Atau, di Arduino IDE Anda, Anda bisa pergi ke Sketch > Include Library > Add .ZIP library… dan pilih library yang baru saja Anda unduh.

PROGRAM

Setelah menginstal Library yang diperlukan, salin kode berikut ke Arduino IDE Anda.
//MONSTERCHIP INDONESIA
// Import required libraries
#include "WiFi.h"
#include "ESPAsyncWebServer.h"

// Set to true to define Relay as Normally Open (NO)
#define RELAY_NO    true

// Set number of relays
#define NUM_RELAYS  5

// Assign each GPIO to a relay
int relayGPIOs[NUM_RELAYS] = {2, 26, 27, 25, 33};

// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

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

// Create AsyncWebServer object on port 80
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>ESP Web Server</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";

// Replaces placeholder with button section in your web page
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();
}

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

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);

  // Set all relays to off when the program starts - if set to Normally Open (NO), the relay is off when you set the relay to HIGH
  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);
    }
  }
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP());

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

  // Send a GET request to <ESP_IP>/update?relay=<inputMessage>&state=<inputMessage2>
  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage;
    String inputParam;
    String inputMessage2;
    String inputParam2;
    // GET input1 value on <ESP_IP>/update?relay=<inputMessage>
    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");
  });
  // Start server
  server.begin();
}
  
void loop() {

}


Tentukan Konfigurasi Relay

Ubah variabel berikut untuk menunjukkan apakah Anda menggunakan relai dalam konfigurasi biasanya terbuka (NO) atau biasanya tertutup (NC). MengaturRELAY_NOvariabel ke true untuk os yang biasanya terbuka diatur ke false untuk biasanya tertutup.
#define RELAY_NO true

Tentukan Jumlah Relay (Saluran)

Anda dapat menentukan jumlah relai yang ingin Anda kendalikan padaNUM_RELAYSvariabel. Untuk tujuan demonstrasi, kami menyetelnya ke 5.
#define NUM_RELAYS 5

Tentukan Tugas Pin Relay

Dalam variabel array berikut, Anda dapat menentukan GPIO ESP32 yang akan mengontrol relay:
int relayGPIOs[NUM_RELAYS] = {2, 26, 27, 25, 33};
Jumlah relay yang disetel padaNUM_RELAYSvariabel harus sesuai dengan jumlah GPIO yang ditetapkan dalamrelayGPIOHimpunan.


Kredensial Jaringan

Masukkan kredensial jaringan Anda dalam variabel berikut.
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD"
;

Rangkaian Relay 8 Channel ke ESP32

Untuk tujuan demonstrasi, kami mengendalikan 5 saluran relai. Hubungkan ESP32 ke modul relai seperti yang ditunjukkan pada diagram skema berikut.


Demonstrasi

Setelah melakukan perubahan yang diperlukan, unggah kode ke ESP32 Anda.
Buka Serial Monitor pada baud rate 115200 dan tekan tombol ESP32 EN untuk mendapatkan alamat IP-nya.


Kemudian, buka browser di jaringan lokal Anda dan ketik alamat IP ESP32 untuk mendapatkan akses ke server web.
Anda harus mendapatkan sesuatu sebagai berikut dengan tombol sebanyak jumlah relay yang telah Anda tentukan dalam kode Anda.

Sekarang, Anda dapat menggunakan tombol untuk mengontrol relai Anda dari jarak jauh menggunakan ponsel cerdas Anda.




Tutorial by : Riki & Bagas




Kamis, 01 September 2022

#1 PENGENALAN ARDUINO


Apa Itu Arduino???

Menurut situs resmi dari arduino yaitu "arduino.cc". dijelaskan bahwa:

“Arduino adalah platform elektronik open-source yang berbasis pada perangkat keras dan perangkat lunak yang mudah digunakan. Papan Arduino dapat membaca input - menerangi sensor, jari pada tombol, atau pesan Twitter - dan mengubahnya menjadi output - mengaktifkan motor, menyalakan LED, menerbitkan sesuatu secara online. Anda dapat memberi tahu dewan Anda apa yang harus dilakukan dengan mengirimkan satu set instruksi ke mikrokontroler di papan tulis. Untuk melakukannya Anda menggunakan bahasa pemrograman Arduino (berdasarkan Wiring), dan Arduino Software (IDE), berdasarkan Pemrosesan.”

Oke lah jadi begini katanya : Arduino merupakan sebuah platform elektronik bersifat open-source berbasis perangkat keras (hardware) dan perangkat lunak (software) yang mudah untuk digunakan. Papan Arduino dapat membaca input seperti cahaya melalui sensor, input dari jari kita melalui tombol (switch), atau pesan dari twiiter (yang disebutkan hanya contoh saja) dan mengubahnya menjadi output seperti mengaktipan motor , menyalakan LED, dan menerbitkan data secara langsung. Kamu dapat memerintahkan board (Arduino) apa yang harus dia lakukan dengan mengirimkan (menulis) satu set intruksi ke board mikrokontroler (Papan Arduino). Untuk melakukannya kamu mengunakan bahasa pemrograman Arduino (berdasarkan wiring), dan Software Arduino (nama software-nya IDE) yang berbasis pada processing.

Masih belum mengerti juga? 

berikut merupakan pengertian dari wikipedia tentang arduino :

Arduino adalah pengendali mikro single-board yang bersifat open-source, diturunkan dari Wiring platform, dirancang untuk memudahkan penggunaan elektronik dalam berbagai bidang. Hardwarenya memiliki prosesor Atmel AVR dan softwarenya memiliki bahasa pemrograman sendiri.


Arduino juga merupakan platform hardware terbuka yang ditujukan kepada siapa saja yang ingin membuat purwarupa peralatan elektronik interaktif berdasarkan hardware dan software yang fleksibel dan mudah digunakan. Mikrokontroler diprogram menggunakan bahasa pemrograman arduino yang memiliki kemiripan syntax dengan bahasa pemrograman C. Karena sifatnya yang terbuka maka siapa saja dapat mengunduh skema hardware arduino dan membangunnya.

Arduino menggunakan keluarga mikrokontroler ATMega yang dirilis oleh Atmel sebagai basis, namun ada individu/perusahaan yang membuat clone arduino dengan menggunakan mikrokontroler lain dan tetap kompatibel dengan arduino pada level hardware. Untuk fleksibilitas, program dimasukkan melalui bootloader meskipun ada opsi untuk mem-bypass bootloader dan menggunakan downloader untuk memprogram mikrokontroler secara langsung melalui port ISP.


Masih gak ngerti?? Intinya gini ajah deh..Arduino adalah sebuah Perangkat yang terdiri dari papan Arduino dan Software Arduino (namanya IDE) yang bersifat open-source yang bisa kita pakai untuk mengontrol apapun yang dapat kita kontrol secara elektronik ataupun mendeteksi apapun yang bisa diubah menjadi besaran elektronik sebagai inputnya.


Jenis-jenis Papan (BOARD) Arduino

Dipasaran banyak sekali jenis Board Arduino yang beredar, entah itu berdasarkan besar-kecilnya, fungsinya, banyak pin nya, dll. namun berikut adalah beberapa arduino yang paling umum dipakai dan paling kita rekomendaikan.


    1. Arduino Uno

Arduino Uno merupakan Papan atau Board Arduino yang paling umum digunakan selain Arduino Nano dan Arduino Mega. Arduino Uno ini memang jenis Arduino yang memang paling banyak juga beredar dipasaran dan juga paling banyak digunakan di tutorial-tutorial  

Arduino UNO R3 masih merupakan produk "THE BEST" untuk agan2 yang ingin mulai belajar arduino. Arduino UNO R3 paling populer dan banyak digunakan. Bahkan bagi user yg sudah jagoan sekalipun, Arduino Uno R3 tetap bisa diandalkan.

Board mikrokontroller uno ini menggunakan IC ATmega328P-PU. memiliki 14 digital input/output (6 diantaranya bisa digunakan sebagai output PWM), 6 input analog, crystal 16MHz, koneksi USB, power jack, header ISP dan tombol reset. Untuk memulai, cukup hubungkan uno dengan komputer via kabel USB atau kasih tegangan dari adapter AC-DC agan, lalu agan bisa mulai terjun mengoprek dan bereksperimen, dengan UNO R3 ini.


Technical specs:

==============================

- Microcontroller : ATmega328P

- Operating Voltage : 5V

- Input Voltage (recommended) : 7-12V

- Input Voltage (limit) : 6-20V

- Digital I/O Pins : 14 (of which 6 provide PWM output)

- PWM Digital I/O Pins : 6

- Analog Input Pins : 6

- DC Current per I/O Pin : 20 mA

- DC Current for 3.3V Pin 50 mA

- Flash Memory : 32 KB (ATmega328P) of which 0.5 KB used by bootloader

- SRAM : 2 KB (ATmega328P)

- EEPROM : 1KB (ATmega328P)

- Clock Speed : 16 MHz

- Length : 68.6 mm

- Width : 53.4 mm



    2. Arduino Nano

Walaupun otaknya sama dengan UNO, yaitu ATmega328P, Arduino NANO ini berukuran lebih kecil dan compact. Fungsionalitas si kecil NANO ini 11-12 dengan abangnya UNO tetapi dengan harga yang lebih terjangkau. Alasannya, selain karena ukurannya, komunikasi USB to serial-nya menggunakan IC CH340 yang lebih lebih ekonomis namun tak sedikitpun menurunkan fungsinya.


Link Pembelian: Disini

Arduino NANO ini memiliki beberapa keunggulan. Pertama, karena menggunakan IC SMD ATmega328P-AU, analog input NANO ada 8, bukan 6 seperti UNO. Kedua, NANO lebih breadboard friendly sehingga lebih memudahkan agan ketika melakukan prototyping di breadboard. Agan tinggal tancep di breadboard, colok kabel MINI USB ke laptop, dan GO!!! agan ready untuk untuk ngoprek.

Technical details:

===========================

- Nano V3

- ATmega328 (16Mhz) microcontroller,

- CH340G - USB-UART interface,

- Operating Voltage (logic level) : 5 V

- Input Voltage (recommended) : 7-9 V

- Input Voltage (limits) : 6-20 V

- Digital I/O Pins :14 (of which 6 provide PWM output)

- Analog Input Pins: 8

- DC Current per I/O Pin: 40 mA

- Flash Memory : 32 KB of which 2 KB used by bootloader

- SRAM : 2 KB

- EEPROM : 1 KB

- Clock Speed : 16 MHz

- Length : 45 mm

- Width : 18 mm


    3. Arduino Mega 

 MEGA 2560 ini di desain untuk project agan yang lebih kompleks. Dengan 54 digital I/O, 16 input analog, dan memori Flash yang lebih besar untuk diisi sketch, board ini cocok untuk project printer 3D ataupun aplikasi robotik.

Selain memiliki 54 pin digital input/output (dimana 15 diantaranya bisa digunakan sebagai output PWM), board ini dilengkapi juga dengan 4 UART (serial port hardware), crystal osilator 16MHz, koneksi USB, power jack, header ISP, dan tombol reset. Cukup hubungkan MEGA 2560 dengan komputer via kabel USB, agan bisa langsung ngoprek.

MEGA 2560 ini juga compatible dengan berbagai macam shield dan module yang biasa dipakai di UNO gan. Dukungan library, dan tutorialnya ada lengkap di jagad internet. :D


Technical specs :


- Microcontroller : ATmega2560

- Operating Voltage : 5V

- Input Voltage (recommended) : 7-12V

- Input Voltage (limit) : 6-20V

- Digital I/O Pins : 54 (of which 15 provide PWM output)

- Analog Input Pins : 16

- DC Current per I/O Pin : 20 mA

- DC Current for 3.3V Pin : 50 mA

- Flash Memory : 256 KB of which 8 KB used by bootloader

- SRAM : 8 KB - EEPROM : 4 KB

- Clock Speed : 16 MHz- Length : 101.52 mm

- Width : 53.3 mm


Nah Itulah 3 jenis Arduino yang kita rekomendasikan untuk kalian para pemula,, 


CREATED BY : BAGAS DIRGANTARA

                            RIKI SUBAGJA


==========================================================================

Pengenalan Arduino

apa itu arduino

arduino adalah

arduino uno adalah

arduino nano adalah

perbedaan arduino

arduino mega adalah


arduino merupakan

arduino uno merupakan

arduino nano merupakan

arduino mega merupakan

perbedaan arduino uno dan nano

perbedaan arduino nano dan uno

perbandingan jenis arduino

pengertian arduino

tutorial arduino

belajar arduino

spesifikasi arduino uno

sepsifikasi arduino nano

spesifikasi arduino mega

Rabu, 31 Agustus 2022

KONTROL RELAY/LED MENGGUNAKAN BLUETOOTH ESP32



Pada Kesempatan kali ini kita akan mencoba untuk riset salah satu mikrokontroller yang sedang ramai diperbincangkan saat ini yaitu ESP32, kali ini kita akan mencoba akses Bluetooth ESP32 untuk mengontrol RELAY.


sekarang kita akan menggunakan Fitur Bluetooth yang tersedia dari Mikrokontroller ESP32.

baiklah, disini kita akan membuat kendali Relay, atau Kontrol Relay menggunakan Android dengan komunikasi Bluetooth.


berikut adalah program Arduino IDE untuk ESP32 Bluetooth :
#include "BluetoothSerial.h"

#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)

#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it

#endif

#define relay 15

BluetoothSerial SerialBT;

String Data;

void setup() {

  Serial.begin(115200);

  SerialBT.begin("ESP32 BT MONSTERCHIP"); //Bluetooth device name

  Serial.println("The device started, now you can pair it with bluetooth!");

  pinMode(relay, OUTPUT);

}

void loop() {

  while (SerialBT.available() > 0) {

    char c = SerialBT.read();

    Data += c;

  }

  if (Data.length() > 0) {

    Serial.println(Data);

    if (Data == "relay nyala") {

      digitalWrite(relay, 1);

    }

    else if (Data == "relay mati") {

      digitalWrite(relay, 0);

    }

    Data = "";

  }

  delay(20);

}
nah dari program di atas, silahkan buka HP Android Kalian, dan Pasangkan Bluetooth HP dengan Bluetooth ESP32. kemudian buka aplikasi dibawah :

>> ARDUINO BLUETOOTH CONTROLLER <<

1. Buka Aplikasi pada HP, kemudian sambungkan pada “ESP32 BT MONSTERCHIP





2. Kemudian tekan “SWITCH MODE







3. Lalu setelah muncul tampilan awal, setting switch sesuai dengan indikator command/perintah pada program.




4. Kembali pada tampilan awal, Tekan indikator untuk menyalakan/mematikan relay.




Berikut ini merupakan tampilan Serial Monitor pada Arduino IDE Laptop:

CREATED BY : BAGAS DIRGANTARA

                            RIKI SUBAGJA






Selasa, 30 Agustus 2022

TUTORIAL DHT11 MENGGUNAKAN ESP32 WEB SERVER


MENGINSTAL LIBRARY

Menginstal DHT Sensor Library 

Untuk membaca dari sensor DHT menggunakan Arduino IDE, Anda perlu menginstal library
sensor DHT. Ikuti langkah selanjutnya untuk menginstal library.
1. Klik di sini untuk mengunduh library Sensor DHT . Anda harus memiliki folder .zip di folder Unduhan Anda
2. Buka folder zip .zip dan Anda akan mendapatkan folder DHT -sensor-librarymaster
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 perpustakaan.
1. Klik di sini untuk mengunduh library Adafruit Unified Sensor . Anda harus memiliki folder .zip di folder Unduhan Anda
2. Buka folder zip .zip dan Anda akan mendapatkan folder Adafruit_sensormaster
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


Catatan: Lewati langkah-langkah di bawah ini jika Anda telah menginstal perpustakaan
ESPAsyncWebServer dan Async TCP sebelumnya.

 

Menginstal Library ESPAsyncWebServer 

Ikuti langkah-langkah selanjutnya untuk menginstal ESPAsyncWebServer library:
5. Klik di sini untuk mengunduh library ESPAsyncWebServer. Anda harus memiliki folder .zip di folder Unduhan Anda
6. Buka folder zip .zip dan Anda akan mendapatkan master folder  ESPAsyncWebServer
7. Ganti nama folder Anda dari ESPAsyncWebServermaster  ESPAsyncWebServer-master  ke  ESPAsyncWebServer
8.  Pindahkan folder ESPAsyncWebServer ke folder library instalasi Arduino atau, di Arduino IDE Anda, Anda bisa pergi ke Sketch > Include Library > Add .ZIP library… dan pilih library yang baru saja Anda unduh.

 

Menginstal Library Async TCP untuk ESP32

Ikuti langkah-langkah selanjutnya untuk menginstal perpustakaan Async TCP :
5. Klik di sini untuk mengunduh perpustakaan Async TCP . Anda harus memiliki  folder .zip di folder Unduhan Anda
6. Buka folder zip .zip dan Anda akan mendapatkan folder master  ESPAsyncWebServer
7. Ganti nama folder Anda dari ESPAsyncWebServer - masterESPAsyncWebServermaster  ke  ESPAsyncWebServer
8.  Pindahkan folder ESPAsyncWebServer ke folder library instalasi Arduino IDE Anda atau, di Arduino IDE Anda, Anda bisa pergi ke Sketch > Include Library > Add .ZIP library… dan pilih library yang baru saja Anda unduh.
 

PROGRAM 

Kami akan memprogram ESP32 menggunakan Arduino IDE, jadi pastikan Anda telah menginstal add-on ESP32 sebelum melanjutkan: 
Buka Arduino IDE Anda dan salin kode berikut. 
COK
// Import required libraries
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <Adafruit_Sensor.h>
#include <DHT.h>

// Replace with your network credentials
const char* ssid = "GANTI DENGAN NAMA WIFI YANG AKAN DIHUBUNGKAN";
const char* password = "MASUKKAN SANDI WIFI";

#define DHTPIN 18     // Digital pin connected to the DHT sensor, jika tidak terbaca
pindahkan pada pin 27 

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

DHT dht(DHTPIN, DHTTYPE);

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

String readDHTTemperature() {
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  //float t = dht.readTemperature(true);
  // Check if any reads failed and exit early (to try again).
  if (isnan(t)) {    
    Serial.println("Failed to read from DHT sensor!");
    return "--";
  }
  else {
    Serial.println(t);
    return String(t);
  }
}

String readDHTHumidity() {
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  if (isnan(h)) {
    Serial.println("Failed to read from DHT sensor!");
    return "--";
  }
  else {
    Serial.println(h);
    return String(h);
  }
}

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css"
integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr"
crossorigin="anonymous"> 
  <style> 
    html {
     font-family: Arial;
     display: inline-block;
     margin: 0px auto;
     text-align: center;
    }
    h2 { font-size: 3.0rem; }
    p { font-size: 3.0rem; }
    .units { font-size: 1.2rem; }
    .dht-labels{
      font-size: 1.5rem;
      vertical-align:middle;
      padding-bottom: 15px;
    }
  </style>
</head>
<body> 
  <h2>ESP32 DHT Server</h2>
  <p>
    <i class="fas fa-thermometer-half" style="color:#059e8a;"></i> 
    <span class="dht-labels">Temperature</span> 
    <span id="temperature">%TEMPERATURE%</span>
    <sup class="units">&deg;C</sup>
  </p>
  <p>
    <i class="fas fa-tint" style="color:#00add6;"></i> 
    <span class="dht-labels">Humidity</span>
    <span id="humidity">%HUMIDITY%</span>
    <sup class="units">&percnt;</sup>
  </p>
</body>
<script>
setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("temperature").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/temperature", true);
  xhttp.send();
}, 10000 ) ;

setInterval(function ( ) {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("humidity").innerHTML = this.responseText;
    }
  };
  xhttp.open("GET", "/humidity", true);
  xhttp.send();
}, 10000 ) ;
</script>
</html>)rawliteral";

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

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);

  dht.begin();
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP32 Local IP Address
  Serial.println(WiFi.localIP()); 

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });
  server.on("/temperature", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", readDHTTemperature().c_str());
  });
  server.on("/humidity", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/plain", readDHTHumidity().c_str());
  });

  // Start server
  server.begin();
}
 
void loop(){
  
}


UPLOAD PROGRAM

Sekarang, unggah program ke ESP32 Anda. Pastikan Anda memilih board dan port COM yang tepat. Setelah mengunggah, buka Serial Monitor dengan baud rate 115200. Tekan tombol reset ESP32. Alamat IP ESP32 harus dicetak di monitor serial. 

Demonstrasi Server Web 

Buka browser dan ketik alamat IP ESP32. Server web Anda akan menampilkan pembacaan sensor terbaru.
Perhatikan bahwa membaca suhu dan kelembaban secara otomatis tanpa perlu me-refresh halaman web. 

  Tutorial by: Riki & Bagas






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