// Program monitoring suhu dan kelembapan dan mengontrol LED menggunakan aplikasi Blynk dan Wokwi
// Sebagai tugas pelatihan IoT
// Dibuat oleh (Atiek Wasiyati) SMK Unggul Negeri 2 Banyuasin III
//untuk menghubungkan ke Wokwi, kita membutuhkan template ID, name dan token
#define BLYNK_TEMPLATE_ID "TMPL6jpFWFcyH"
#define BLYNK_TEMPLATE_NAME "Dht 22"
#define BLYNK_AUTH_TOKEN "rWXBk8yMo3tCxLlkBfTxEViRtaN3P9Nc"
#define BLYNK_PRINT Serial
//kita membutuhkan library wifi, wifi client dan Blynk
//terdapat banyak library, library yang digunakan yaitu dhth, baris 16
#include <WiFi.h> //instal library DHT library
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
//koneksi ke internet
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
// Membuat variabel yang dibutuhkan yaitu SENSOR DHT & LED
const int DHT_PIN = 15; // variabel bisa diubah dht_pin ke pindht
const int LED_PIN = 13;
const int tipedht = DHT22;
DHT dht(DHT_PIN, tipedht);
// Variabel Global
int mode = 0;
int tekan = 0;
//kita akan membuat fungsi yang namanya kirim data
void KirimData() {
//variabel membaca suhu dan kelembapan ke konsol
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca sensor DHT!");
return;
}
//variabel membaca suhu dan kelembapan ke konsol
Serial.println("Suhu: " + String(suhu, 1) + "°C");
Serial.println("Kelembapan: " + String(kelembapan, 1) + "%");
Serial.println("Mode: " + String(mode == 0 ? "Otomatis" : "Manual"));
Serial.println("---");
// Mengirim data ke Virtual Pin Blynk
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, kelembapan);
// Logika LED dan Notifikasi
//jika suhu >70 maka lampu LED akan menyala
//jika selain itu maka LED akan mati
if (mode == 0) {
if (suhu > 70) {
digitalWrite(LED_PIN, HIGH);
Blynk.logEvent("suhu_panas", "Peringatan! Suhu melebihi 70°C");
} else {
digitalWrite(LED_PIN, LOW);
}
}
}
// buat fungsi tombol saklar di Blynk (V3)
BLYNK_WRITE(V3) {
tekan = param.asInt();
if (mode == 1) { // Hanya berfungsi jika mode Manual
digitalWrite(LED_PIN, tekan);
Serial.print("LED Manual: ");
Serial.println(tekan == HIGH ? "ON" : "OFF");
}
}
// Switch Mode di Blynk (V2) - 0 untuk Otomatis, 1 untuk Manual
BLYNK_WRITE(V2) {
mode = param.asInt(); // variabel global
Serial.print("Mode berubah ke: ");
Serial.println(mode == 0 ? "Otomatis" : "Manual");
}
void setup() {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
dht.begin();
Blynk.begin(auth, ssid, pass);
timer.setInterval(3000L, KirimData);
}
void loop() {
Blynk.run();
timer.run();
}