#define BLYNK_TEMPLATE_ID "TMPL6CZMa4N9P"
#define BLYNK_TEMPLATE_NAME "DHT22LED"
#define BLYNK_AUTH_TOKEN "Km5sRLZ_03oeu3Rl3yoV_twzQf-6Lr_a"
// Baris-baris ini mendefinisikan konstanta untuk konfigurasi Blynk, termasuk ID template, nama template, dan token otentikasi.
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Baris-baris ini memasukkan pustaka yang diperlukan untuk WiFi, Blynk, dan sensor DHT.
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Nama hotspot yang digunakan
char pass[] = ""; // Password hotspot yang digunakan
// Baris-baris ini mendefinisikan kredensial WiFi dan token otentikasi Blynk.
#define DHTPIN 2 // Menyebutkan pin digital tempat Anda menghubungkan DHT
#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// Baris-baris ini mendefinisikan pin untuk sensor DHT dan jenisnya (DHT22), membuat objek DHT, dan menginisialisasi objek BlynkTimer.
#define LED1 13
#define LED2 14
#define LED3 15
// Baris-baris ini mendefinisikan pin digital yang terhubung ke LED.
void setup() {
Serial.begin(115200);
Blynk.begin(auth, ssid, pass);
dht.begin();
timer.setInterval(2500L, sendSensor);
// Mengatur pin LED sebagai output
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
}
// Fungsi `setup` dijalankan sekali saat perangkat mulai. Ini menginisialisasi komunikasi serial, menghubungkan ke Blynk menggunakan kredensial yang ditentukan, memulai sensor DHT, menetapkan timer untuk memanggil fungsi `sendSensor` setiap 2,5 detik, dan mengonfigurasi pin LED sebagai output.
void loop() {
Blynk.run();
timer.run();
}
// Fungsi `loop` berjalan terus menerus. Ini memproses event Blynk dan menjalankan timer.
void sendSensor() {
float h = dht.readHumidity();
float t = dht.readTemperature(); // atau dht.readTemperature(true) untuk Fahrenheit
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Blynk.virtualWrite(V1, h);
Blynk.virtualWrite(V0, t);
Serial.print("Temperature : ");
Serial.print(t);
Serial.print(" Humidity : ");
Serial.println(h);
if(t > 30) {
Blynk.logEvent("temp_alert","Temp above 30 degrees");
}
}
// Fungsi `sendSensor` membaca kelembapan dan suhu dari sensor DHT. Jika pembacaan tidak valid (NaN), ini mencetak pesan kesalahan ke monitor serial dan kembali. Jika tidak, ini menulis nilai kelembapan dan suhu ke pin virtual V1 dan V0 di aplikasi Blynk dan mencatat peristiwa peringatan suhu jika suhu melebihi 30 derajat Celsius.
BLYNK_WRITE(V2) {
int pinValue = param.asInt();
digitalWrite(LED1, pinValue);
}
BLYNK_WRITE(V3) {
int pinValue = param.asInt();
digitalWrite(LED2, pinValue);
}
BLYNK_WRITE(V4) {
int pinValue = param.asInt();
digitalWrite(LED3, pinValue);
}
// Fungsi-fungsi BLYNK_WRITE ini adalah handler Blynk yang dipicu ketika nilai dari pin virtual V2, V3, dan V4 berubah. Mereka membaca nilai baru (0 atau 1) dan mengatur status LED yang sesuai.
BLYNK_WRITE(V6) {
int pinValue = param.asInt();
digitalWrite(LED1, pinValue);
digitalWrite(LED2, pinValue);
digitalWrite(LED3, pinValue);
}