#define BLYNK_TEMPLATE_ID "TMPL6rOa1JPsw"
#define BLYNK_TEMPLATE_NAME "KONTROL LAMPU DAN MONITORING SUHU"
#define BLYNK_AUTH_TOKEN "rAwPKXsQaEyXGa0oHTRGceKIW-fYZlMx"
// koneksi ke server blynk
#define BLYNK_PRINT Serial //komunikasi seril adengan blynk
#include <WiFi.h> //mengatur koneksi WiFi pada ESP32 agar dapat terhubung ke jaringan WiFi tertentu.
#include <WiFiClient.h> //membuat koneksi TCP/IP dan mengirim permintaan HTTP melalui koneksi WiFi.
#include <BlynkSimpleEsp32.h> //menghubungkan ESP32 dengan platform IoT Blynk.
#include <DHT.h> //untuk membaca nilai suhu dan kelembaban dari sensor DHT22.
char auth[] = "rAwPKXsQaEyXGa0oHTRGceKIW-fYZlMx"; //kode autentikasi blynk
char ssid[] = "Wokwi-GUEST"; //nama hotspot yang digunakan
char pass[] = ""; //password hotspot yang digunakan
#define DHTPIN 5 // konfigurasi pin
#define DHTTYPE DHT22 // definisi konstanta yang menentukan jenis sensor DHT yang digunakan. Pada contoh ini, digunakan sensor DHT22.
DHT dht(DHTPIN, DHTTYPE); //definisi objek DHT yang digunakan untuk membaca nilai suhu dan kelembaban dari sensor DHT22. Objek ini diinisialisasi dengan nomor pin dan jenis sensor DHT yang telah ditentukan sebelumnya.
#define relay 2 //relay terhubung pada pin 2
int SW_relay = 0; //definisi variabel integer yang digunakan untuk menyimpan status relay. Variabel ini akan diubah nilainya tergantung pada sinyal yang diterima dari aplikasi Blynk untuk mengontrol relay
BlynkTimer timer;
BLYNK_WRITE(V0)//fungsi yang dipanggil ketika ada perubahan nilai sinyal pada pin V0 pada aplikasi Blynk. Fungsi ini digunakan untuk mengontrol relay dan menyesuaikan statusnya tergantung pada nilai sinyal yang diterima.
{
SW_relay = param.asInt(); //ilai sinyal pada pin V0 diambil dengan menggunakan param.asInt()
if (SW_relay ==1){//jika nilai relay = 1. pada aplikasi blynk
digitalWrite(relay, HIGH); //maka relay di esp bernilai 1
Serial.println("Relay terbuka");//menmpilkan status relay pada serial monitor
Blynk.virtualWrite(V0, HIGH);//status switch pada blynk adalah 1 atau on
}else{
digitalWrite(relay, LOW);
Serial.println("Relay tertutup");
Blynk.virtualWrite(V0, LOW);
}
}
void setup(){
Serial.begin(115200);//memulai koneksi serial pada ESP32 dengan kecepatan baud rate 115200 bit per detik.
Blynk.begin(auth, ssid, pass);// perintah untuk memulai koneksi antara ESP32 dengan server Blynk. Fungsi ini membutuhkan tiga argumen yaitu token otentikasi Blynk (auth), SSID jaringan WiFi yang digunakan (ssid), dan password WiFi (pass).
// You can also specify server:
//Blynk.begin(auth, ssid, pass, "blynk.cloud", 80);
//Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,100), 8080);
dht.begin();//perintah untuk memulai koneksi antara ESP32 dengan sensor DHT22. Fungsi ini digunakan untuk menginisialisasi sensor DHT22 dan menyiapkan ESP32 untuk membaca nilai suhu dan kelembaban dari sensor tersebut.
timer.setInterval(1000L, sendSensor);
/*perintah untuk mengatur interval pengiriman data suhu dan kelembaban ke server Blynk. Fungsi ini akan menjalankan fungsi sendSensor()*/
//setiap 2.5 detik sekali untuk membaca nilai suhu dan kelembaban dari sensor DHT22 dan mengirimkan nilainya ke server Blynk./
pinMode(relay, OUTPUT);//mengatur pin relay sebagai fungsi output
}
void loop(){
Blynk.run();//perintah yang digunakan untuk mengeksekusi kode program Blynk dan memproses semua perintah yang diterima dari aplikasi Blynk.
timer.run();//perintah yang digunakan untuk mengeksekusi kode program pada objek timer yang telah didefinisikan sebelumnya. Fungsi ini akan menjalankan semua fungsi yang telah ditetapkan
//pada interval waktu tertentu yang telah ditentukan sebelumnya. Pada program ini, timer.run() akan menjalankan fungsi sendSensor() setiap 2.5 detik sekali untuk membaca nilai suhu dan kelembaban dari sensor DHT22 dan mengirimkan nilainya ke server Blynk.
}
void sendSensor(){
float h = dht.readHumidity();//membaca nilai kelembapan dengan type data float
float t = dht.readTemperature();//membaca nilai suhu dengan type data float
if (isnan(h) || isnan(t)) {//jika data yg dibaca bukan nilai (not a number)
Serial.println("gagal membaca nilai sensor dht");//maka akan tertampil pesan error
return;
}
Blynk.virtualWrite(V2, h);//mengirimkan nilai kelembaban yang telah dibaca dari sensor DHT22 ke pin V2 pada server Blynk
Blynk.virtualWrite(V1, t);//mengirimkan nilai suhu yang telah dibaca dari sensor DHT22 ke pin V1 pada server Blynk
Serial.print("suhu : ");//menampilkan suhu
Serial.print(t);//dengan nilai yg terbaca di variabel t
Serial.print(" kelembapan : ");
Serial.println(h);
if(t > 30){
// Blynk.email("[email protected]", "Alert", "Tempeshu lebih dari 28C!");
Blynk.logEvent("temp_alert","Temp above 30 degrees");
}
}