#define BLYNK_TEMPLATE_ID "TMPL61od_fOeT"
#define BLYNK_TEMPLATE_NAME "New Template"
#define BLYNK_AUTH_TOKEN "vIFjdSxLrexmEufvwjO56_egDG2HyCfH"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Masukkan informasi WiFi
char ssid[] = "Kania's iPhone (2)";
char pass[] = "Namnam22-";
// Pin untuk LED Built-in ESP32
const int ledPin = LED_BUILTIN; // Pada ESP32, biasanya LED Built-in terhubung ke GPIO 2
// Variabel global
bool powerStatus = false;
int fanSpeed = 0; // Kecepatan kipas (0-3)
unsigned long timerCountdown = 0;
bool timerActive = false;
// Timer untuk Blynk
BlynkTimer timer;
// Fungsi untuk memperbarui LED dan Blynk
void updateFanStatus() {
digitalWrite(ledPin, powerStatus ? LOW : HIGH); // LED menyala jika powerStatus = true
Blynk.virtualWrite(V1, powerStatus ? "ON" : "OFF");
Blynk.virtualWrite(V2, fanSpeed);
Blynk.virtualWrite(V3, timerActive ? timerCountdown : 0);
Serial.printf("[Timestamp: %lu ms] Power: %s, Speed: %d, Timer: %s (%lus)\n",
millis(), powerStatus ? "ON" : "OFF", fanSpeed,
timerActive ? "Active" : "Inactive", timerCountdown);
}
// Tombol Power
BLYNK_WRITE(V0) {
powerStatus = param.asInt();
if (!powerStatus) {
fanSpeed = 0; // Reset kecepatan jika kipas mati
timerActive = false; // Matikan timer jika kipas mati
}
updateFanStatus();
}
// Tombol Speed Up
BLYNK_WRITE(V4) {
if (powerStatus && fanSpeed < 3) {
fanSpeed++;
updateFanStatus();
}
}
// Tombol Speed Down
BLYNK_WRITE(V5) {
if (powerStatus && fanSpeed > 0) {
fanSpeed--;
updateFanStatus();
}
}
// Timer untuk pengaturan waktu
BLYNK_WRITE(V6) {
if (powerStatus) {
timerCountdown = param.asInt(); // Waktu dalam detik
timerActive = timerCountdown > 0;
updateFanStatus();
}
}
// Fungsi countdown timer
void handleTimer() {
if (timerActive && timerCountdown > 0) {
timerCountdown--;
if (timerCountdown == 0) {
powerStatus = false;
fanSpeed = 0;
timerActive = false;
}
updateFanStatus();
}
}
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(115200);
// Inisialisasi Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Inisialisasi pin LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
// Tambahkan timer untuk countdown setiap detik
timer.setInterval(1000L, handleTimer);
// Update status awal
updateFanStatus();
}
void loop() {
Blynk.run();
timer.run();
}