#define BLYNK_TEMPLATE_ID "TMPL6OjAGItZN"
#define BLYNK_TEMPLATE_NAME "Monitoring Suhu"
#define BLYNK_AUTH_TOKEN "hU-sOxmijC58AyXK6u8DATc8Ay3wJAUN"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
const int DHT_PIN = 15;
byte led = 5;
DHTesp dhtSensor;
float suhu, kelembaban;
void setup()
{
Serial.begin(115200);
Serial.println("š§ Starting System...");
// Initialize WiFi
WiFi.begin(ssid, pass);
Serial.print("š” Connecting to WiFi");
int wifiTimeout = 0;
while (WiFi.status() != WL_CONNECTED && wifiTimeout < 20) {
delay(500);
Serial.print(".");
wifiTimeout++;
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("\nā
WiFi Connected!");
Serial.print("š¶ IP Address: ");
Serial.println(WiFi.localIP());
} else {
Serial.println("\nā WiFi Failed!");
return;
}
// Initialize Blynk
Serial.print("š Connecting to Blynk...");
Blynk.config(BLYNK_AUTH_TOKEN);
int blynkTimeout = 0;
while (!Blynk.connected() && blynkTimeout < 10) {
Blynk.run();
delay(500);
Serial.print(".");
blynkTimeout++;
}
if (Blynk.connected()) {
Serial.println("\nā
Blynk Connected!");
} else {
Serial.println("\nā Blynk Connection Failed!");
}
// Initialize sensor and pins
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(led, OUTPUT);
// Setup timers
timer.setInterval(2000L, bacaSensor); // Baca sensor setiap 2 detik
timer.setInterval(5000L, testEvent); // Test event setiap 5 detik
Serial.println("š System Ready!");
}
void bacaSensor() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhu = data.temperature;
kelembaban = data.humidity;
Serial.println("-----------");
Serial.println("š” Suhu: " + String(suhu, 1) + "°C");
Serial.println("š§ Kelembaban: " + String(kelembaban, 1) + "%");
// Update Blynk
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, kelembaban);
// Cek suhu tinggi
if (suhu > 38) {
Serial.println("šØ SUHU TINGGI! Mengirim event...");
kirimEventSuhuTinggi();
digitalWrite(led, HIGH);
} else {
digitalWrite(led, LOW);
}
}
void testEvent() {
static int testCounter = 0;
if (Blynk.connected()) {
testCounter++;
Serial.println("\nš TEST #" + String(testCounter) + ": Sending Events...");
// Kirim berbagai jenis event
Blynk.logEvent("suhu_tinggi", "Suhu mencapai 40°C - Test " + String(testCounter));
Serial.println("ā
Event 'suhu_tinggi' sent");
delay(1000);
Blynk.logEvent("temperature_alert", "Alert: High temperature detected");
Serial.println("ā
Event 'temperature_alert' sent");
delay(1000);
Blynk.logEvent("test_event", "Test event dari ESP32 - Counter: " + String(testCounter));
Serial.println("ā
Event 'test_event' sent");
Serial.println("š Check Blynk Console for events!");
} else {
Serial.println("ā Blynk not connected - cannot send events");
}
}
void kirimEventSuhuTinggi() {
if (Blynk.connected()) {
String message = "šØ DARURAT! Suhu: " + String(suhu, 1) + "°C";
Blynk.logEvent("suhu_tinggi", message.c_str());
Serial.println("š¢ Emergency event sent: " + message);
}
}
void loop() {
Blynk.run();
timer.run();
}