#define BLYNK_TEMPLATE_ID "TMPLeemEzNyO"
#define BLYNK_TEMPLATE_NAME "Home Automation System"
#define BLYNK_AUTH_TOKEN "gQBw__UnbdXKR2sKm4QqRfr_LoAEkVse"
#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 DHT_PIN = 12;
int duration;
int distance;
#define trig 4
#define echo 2
int inputPin = 5;
int pirState;
int ldrvalue=0;
#define LDR 14
#define flame 13
float flamelevel = 0; // mapped and inverted % of sensor range
DHTesp dht;
BlynkTimer timer;
//function untuk pengiriman sensor
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(V1, data.temperature); //mengirimkan data temperatur ke Virtual pin VO di Blynk Cloud
Blynk.virtualWrite(V2, data.humidity); //mengirimkan data kelemaban ke Virtual pin V1 di Blynk Cloud
}
void sonardata()
{
digitalWrite(trig, LOW); // Makes trigPin low
delayMicroseconds(2); // 2 micro second delay
digitalWrite(trig, HIGH); // tigPin high
delayMicroseconds(10); // trigPin high for 10 micro seconds
digitalWrite(trig, LOW); // trigPin low
duration = pulseIn(echo, HIGH); //Read echo pin, time in microseconds
distance = duration * 0.034 / 2; //Calculating actual/real distance
Serial.print("Distance = "); //Output distance on arduino serial monitor
Serial.println(distance);
if(distance<20)
{
Serial.print("tank full");
else
{
if(distance>150)
{
Serial.print("empty");
}
}
Blynk.virtualWrite(V3,distance);
}
void ldrdata()
{
ldrvalue = digitalRead(LDR);
if(ldrvalue==1)
{
Serial.println("Brightness");
}
else
{
Serial.println("darkness");
}
Blynk.virtualWrite(V4,ldrvalue);
}
void pirdata()
{
pirState=digitalRead(inputPin);
Blynk.virtualWrite(V5,pirState);
if(pirState==1)
{
Serial.println("motion");
}
else
{
Serial.println("no motion");
}
}
void flamedata()
{
flamelevel = digitalRead(flame);
// Serial.print("flamelevel = ");
// Serial.println(flamelevel);
if(flamelevel==1)
{
Serial.print("fire ");
}
else{
Serial.print(" no fire ");
}
Blynk.virtualWrite(V6,flamelevel);
}
void rtcdata()
{
DateTime time = rtc.now();
//Full Timestamp
Serial.println(String("DateTime::TIMESTAMP_FULL:\t")+time.timestamp(DateTime::TIMESTAMP_FULL));
//Date Only
Serial.println(String("DateTime::TIMESTAMP_DATE:\t")+time.timestamp(DateTime::TIMESTAMP_DATE));
//Full Timestamp
Serial.println(String("DateTime::TIMESTAMP_TIME:\t")+time.timestamp(DateTime::TIMESTAMP_TIME));
Serial.println("\n");
//Delay 5s
delay(5000);
}
void setup()
{
// Debug console
Serial.begin(115200); //serial monitor menggunakan bautrate 9600
dht.setup(DHT_PIN, DHTesp::DHT22);
pinMode(trig, OUTPUT); // Sets the trigPin as an Output
pinMode(echo, INPUT); // Sets the echoPin as an Inpu
pinMode(inputPin, INPUT_PULLUP);
pinMode(LDR, INPUT);
pinMode(flame, INPUT);
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!");
// When time needs to be set on a new device, or after a power loss, the
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
//pinMode(ldrPin, INPUT);
Blynk.begin(auth, ssid, pass); //memulai Blynk
timer.setInterval(1000, sendSensor); //Mengaktifkan timer untuk pengiriman data 1000ms
timer.setInterval(1000, sonardata);
timer.setInterval(1000, pirdata);
timer.setInterval(1000, ldrdata);
timer.setInterval(1000, flamedata);
timer.setInterval(1000, rtcdata);
}
void loop()
{
Blynk.run(); //menjalankan blynk
timer.run(); //menjalankan timer
// LDRvalue=digitalRead(2);
// Serial.print("LDR value =");
// Serial.println(LDRvalue);
}