#define BLYNK_TEMPLATE_ID "TMPL6QmyR2jZy"
#define BLYNK_TEMPLATE_NAME "Auto Spray System"
#define BLYNK_AUTH_TOKEN "_5S8w8ThdbFxvQkWEw6Rn1Ojm-ZZ2cQo"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h> // Library untuk DHT
#include "RTClib.h"
RTC_DS1307 rtc;
char auth[] = BLYNK_AUTH_TOKEN; // Auth Token
char ssid[] = "Wokwi-GUEST"; // Nama hotspot yang digunakan
char pass[] = ""; // Password hotspot yang digunakan
const int pump = 15;
const int DHT_PIN = 12;
String chk;
DHTesp dht;
BlynkTimer timer;
void sendSensor()
{
TempAndHumidity data = dht.getTempAndHumidity();
// Menampilkan temperature pada Serial monitor
Serial.print("% Temperature: ");
Serial.print(data.temperature);
Serial.println("C ");
Serial.print("% humadity: ");
Serial.print(data.humidity);
Serial.println("% ");
Blynk.virtualWrite(V0, data.temperature); // Mengirimkan data temperatur ke Virtual pin V0 di Blynk Cloud
Blynk.virtualWrite(V1, data.humidity); // Mengirimkan data kelembaban ke Virtual pin V1 di Blynk Cloud
Blynk.virtualWrite(V5, data.temperature);
// Controlling the relay based on temperature condition
if (data.temperature > 30)
{
digitalWrite(pump, HIGH); // Turn on the relay
Blynk.virtualWrite(V4, "Pump ON");
}
else
{
digitalWrite(pump, LOW); // Turn off the relay
Blynk.virtualWrite(V4, "Pump OFF");
}
}
void rtcdata()
{
DateTime time = rtc.now();
// Full Timestamp
Serial.println(String("DateTime::TIMESTAMP_FULL:\t") + time.timestamp(DateTime::TIMESTAMP_FULL));
chk= time.timestamp(DateTime ::TIMESTAMP_FULL);
// chk = time.timestamp(DateTime::TIMESTAMP_TIME);
Serial.println(chk);
Blynk.virtualWrite(V3, chk);
Serial.println("\n");
// Delay 5s
delay(5000);
}
void setup()
{
// Debug console
Serial.begin(115200); // Serial monitor menggunakan baud rate 9600
dht.setup(DHT_PIN, DHTesp::DHT22);
pinMode(pump, OUTPUT);
if (!rtc.begin())
{
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
if (!rtc.isrunning())
{
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
Blynk.begin(auth, ssid, pass); // Memulai Blynk
timer.setInterval(1000, sendSensor); // Mengaktifkan timer untuk pengiriman data setiap 1000ms
timer.setInterval(1000, rtcdata);
}
void loop()
{
Blynk.run(); // Menjalankan Blynk
timer.run(); // Menjalankan timer
}