#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#define DHTPIN 13
#define DHTTYPE DHT22
#define LEDPIN 12
#define TEMP_THRESHOLD 30.0 // batas suhu (°C)
DHT dht(DHTPIN, DHTTYPE);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* token = "sV98HRKT1UmfnIR8cCaeH3K_SRW6m1MZ";
const char* server = "https://sgp1.blynk.cloud";
void setup() {
Serial.begin(115200);
pinMode(LEDPIN, OUTPUT);
digitalWrite(LEDPIN, LOW);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
dht.begin();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("WiFi disconnected, reconnecting...");
WiFi.reconnect();
delay(5000);
return;
}
float suhu = dht.readTemperature();
float kelembapan = dht.readHumidity();
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Sensor Error");
delay(2000);
return;
}
// Kirim data suhu & kelembapan ke Blynk
HTTPClient http;
String urlSend = String(server) +
"/external/api/batch/update?token=" + token +
"&V0=" + String(suhu, 2) +
"&V1=" + String(kelembapan, 2);
http.begin(urlSend);
int httpCodeSend = http.GET();
if (httpCodeSend == 200) {
Serial.println("Data sensor terkirim ke Blynk");
} else {
Serial.print("Gagal kirim data, HTTP code: ");
Serial.println(httpCodeSend);
}
http.end();
// Periksa apakah suhu melebihi ambang batas → alarm ON
bool alarmActive = suhu > TEMP_THRESHOLD;
if (alarmActive) {
Serial.println("SUHU MELEBIHI BATAS, ALARM DIAKTIFKAN! ");
digitalWrite(LEDPIN, HIGH);
} else {
Serial.println("LED DIMATIKAN (tidak ada alarm)");
digitalWrite(LEDPIN, LOW);
}
// Ambil status manual dari Blynk (V2) untuk override alarm
String urlGet = String(server) + "/external/api/get?token=" + token + "&pin=V2";
http.begin(urlGet);
int httpCodeGet = http.GET();
if (httpCodeGet == 200) {
String payload = http.getString();
payload.trim();
} else {
Serial.print("Gagal baca status manual, HTTP code: ");
Serial.println(httpCodeGet);
}
http.end();
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.println(" °C");
Serial.print("Kelembapan: ");
Serial.print(kelembapan);
Serial.println(" %");
Serial.println(" ");
delay(5000); // Update setiap 5 detik
}