#define BLYNK_TEMPLATE_ID "TMPL6IOFiX5ur"
#define BLYNK_TEMPLATE_NAME "Firmware IOT"
#define BLYNK_AUTH_TOKEN "cuUs3k8ffAEygXV-8cFhj5xp_3EUWxAA"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <ESP32Servo.h>
#include "RTClib.h"
#define AUTH BLYNK_AUTH_TOKEN
#define WIFI_AP "Wokwi-GUEST"
#define WIFI_PASS ""
#define DHTPIN 32 //inisiasi pin yang digunakan sensor DHT
#define DHTTYPE DHT22 //inisiasi type sensor (22)
DHT dht(DHTPIN, DHTTYPE);
Servo servo1;
const byte Led1 = 23;
RTC_DS1307 rtc;
BlynkTimer timer;
char daysOfTheWeek[7][12] = {"Minggu", "Senin", "Selasa", "Rabu", "Kamis", "Jum'at", "Sabtu"};
String tahun, bulan, hari;
String jam, menit, detik;
String tanggal;
String waktu;
String hariIni;
void setup() {
Serial.begin(115200);
servo1.attach(19);
pinMode(Led1, OUTPUT);
rtc.begin();
Blynk.begin(AUTH, WIFI_AP, WIFI_PASS);
timer.setInterval(1000L, kasihMakan); //
timer.setInterval(100L, kirimData);
timer.setInterval(100L, saatIni);
dht.begin();
}
void saatIni(){ //kirim data real time clock ke blynk dan serial monitor
DateTime now = rtc.now();
tahun = now.year();
bulan = now.month();
hari = now.day();
jam = now.hour();
menit = now.minute();
detik = now.second();
hariIni = daysOfTheWeek[now.dayOfTheWeek()];
tanggal = hari + "." + bulan + "." + tahun ; //hari.bulan.tahun
waktu = jam + ":" + menit + ":" + detik ; //jam:menit:detik
Serial.print("hari: ");
Serial.print(hariIni);
Serial.print(", tanggal: ");
Serial.print(tanggal);
Serial.print(", waktu: ");
Serial.println(waktu);
Blynk.virtualWrite(V5, hariIni);
Blynk.virtualWrite(V6, tanggal);
Blynk.virtualWrite(V7, waktu);
}
BLYNK_WRITE(V0){ //membuat servo bisa digerakan melalui blynk
int gerak = param.asInt();
servo1.write(gerak);
Blynk.virtualWrite(V0, gerak); //mengupdate nilai Virtual Pin V0 di server Blynk
}
void kirimData(){ //kirim data suhu dan kelembapan dari DHT22 ke serial monitor dan blynk
float t = dht.readTemperature();
float h = dht.readHumidity();
if (isnan(t) || isnan(h)) { // mengecek apakah t *atau* h itu ada
Serial.println("Gagal membaca data dari sensor DHT22!");
} else {
Blynk.virtualWrite(V3, t); // mengirim data temperatur ke Blynk (v3)
Blynk.virtualWrite(V4, h); // mengirim data kelembaban ke Blynk (v4)
Serial.println("Suhu: ");
Serial.print(t);
Serial.print(" *C, Kelembapan: ");
Serial.print(h);
Serial.println(" %");
}
}
BLYNK_WRITE(V2){ //mengontrol led1 melalui blynk
int pinValue = param.asInt();
digitalWrite(Led1, pinValue);
}
void kasihMakan() { //memberi makan atau memutar servo dari 0° ke 90° sesuai jam
DateTime now = rtc.now();
int jamMakan = now.hour();
int menitMakan = now.minute();
int detikMakan = now.second();
// Cek apakah waktu saat ini sesuai dengan jadwal pemberian makan
if ((jamMakan == 8 || jamMakan == 14 || jamMakan == 16) && menitMakan == 0 && detikMakan == 0) {
Serial.println("Waktunya memberi makan!");
servo1.write(90); // Gerakkan servo ke 90 derajat
delay(500); // Tunggu sebentar
servo1.write(0); // Kembalikan servo ke 0 derajat
}
}
void loop() {
Blynk.run();
timer.run(); // Menjalankan fungsi yang dijadwalkan dengan timer
}