#define BLYNK_TEMPLATE_ID "TMPLfuBo4apa"
#define BLYNK_TEMPLATE_NAME "Quickstart Template"
#define BLYNK_AUTH_TOKEN "nPTiM9a2XSW1kDWWkb0NnFKDdVR2SGcl"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h> //Library untuk DHT
char auth[] = BLYNK_AUTH_TOKEN ; //Auth Token
char ssid[] = "Wokwi-GUEST"; //nama hotspot yang digunakan
char pass[] = ""; //password hotspot yang digunakan
const int DHT_PIN = 15;
float temp;
float rH;
int led_green = 32;
int led_yellow = 33;
int led_red = 25;
DHTesp dht;
BlynkTimer timer;
//function untuk pengiriman sensor
void sendSensor()
{
TempAndHumidity data = dht.getTempAndHumidity();
temp = data.temperature;
rH = data.humidity;
//menampilkan temperature pada Serial monitor
Serial.print("% Temperature: ");
Serial.print(temp);
Serial.println("C ");
Serial.print("% Humidity: ");
Serial.print(rH);
Serial.println("% ");
Blynk.virtualWrite(V0, temp); //mengirimkan data temperatur ke Virtual pin VO di Blynk Cloud
Blynk.virtualWrite(V1, rH); //mengirimkan data kelemaban ke Virtual pin V1 di Blynk Cloud
if ((20<=temp && temp<=25) && (45<=rH && rH<=55))
{
//ideal range
digitalWrite(led_green, HIGH);
Blynk.virtualWrite(V2, HIGH);
digitalWrite(led_yellow, LOW);
Blynk.virtualWrite(V3, LOW);
digitalWrite(led_red, LOW);
Blynk.virtualWrite(V4, LOW);
}
else if (temp<18 || temp>27 || rH<40 || rH>60)
{
//out of range
digitalWrite(led_red, HIGH);
Blynk.virtualWrite(V4, HIGH);
digitalWrite(led_green, LOW);
Blynk.virtualWrite(V2, LOW);
digitalWrite(led_yellow, LOW);
Blynk.virtualWrite(V3, LOW);
}
else
{
//border
digitalWrite(led_yellow, HIGH);
Blynk.virtualWrite(V3, HIGH);
digitalWrite(led_green, LOW);
Blynk.virtualWrite(V2, LOW);
digitalWrite(led_red, LOW);
Blynk.virtualWrite(V4, LOW);
}
}
void setup()
{
// Debug console
Serial.begin(115200); //serial monitor menggunakan bautrate 9600
dht.setup(DHT_PIN, DHTesp::DHT22);
pinMode(led_green, OUTPUT);
pinMode(led_yellow, OUTPUT);
pinMode(led_red, OUTPUT);
Blynk.begin(auth, ssid, pass); //memulai Blynk
timer.setInterval(2000, sendSensor); //Mengaktifkan timer untuk pengiriman data 1000ms
}
void loop()
{
Blynk.run(); //menjalankan blynk
timer.run(); //menjalankan timer
}