/****************************************************
* ESP32 + Blynk (dummy data, tanpa sensor)
* - V0 : Temperature (°C)
* - V1 : Humidity (%RH)
* - V2 : Pump (0 = OFF, 1 = ON)
* - V3 : Estimated Water Usage (liter, kumulatif)
****************************************************/
#define BLYNK_TEMPLATE_ID "YOUR_TEMPLATE_ID"
#define BLYNK_TEMPLATE_NAME "Water Usage Demo"
#define BLYNK_AUTH_TOKEN "YOUR_BLYNK_AUTH_TOKEN"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
// Untuk Wokwi biasanya:
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Mapping virtual pin
#define VPIN_TEMP V0
#define VPIN_HUM V1
#define VPIN_PUMP V2
#define VPIN_WATER V3
BlynkTimer timer;
// Variabel internal
float totalLiters = 0.0;
bool pumpOn = false;
unsigned long lastMs;
// Fungsi ini dipanggil periodik untuk kirim data ke Blynk
void sendDummyData() {
unsigned long now = millis();
// Konversi waktu ke menit dan detik relatif
float minutesSinceStart = now / 60000.0; // menit sejak start
int secondsSinceStart = now / 1000; // detik sejak start
// 1. Dummy TEMPERATURE (sekitar 27.4°C)
// 27 + (osilasi kecil sinus)
float temp = 27.4 + 1.0 * sin(minutesSinceStart * 3.14159 / 15.0);
// 2. Dummy HUMIDITY (sekitar 58%)
float hum = 58.0 + 5.0 * sin(minutesSinceStart * 3.14159 / 20.0 + 1.0);
// 3. Status PUMP (nyala 20 detik, mati 40 detik, berulang)
int period = 60; // 60 detik
int s = secondsSinceStart % period;
pumpOn = (s < 20); // 0–19 detik ON, 20–59 detik OFF
// 4. Dummy ESTIMATED WATER USAGE
// Asumsi: debit pompa = 2.0 liter/menit
// Jika pompa ON, totalLiters bertambah sesuai dt.
float dtMin = (now - lastMs) / 60000.0; // selisih waktu (menit)
if (pumpOn) {
float flowRate = 2.0; // liter per menit
totalLiters += flowRate * dtMin;
}
lastMs = now;
// Kirim ke Blynk
Blynk.virtualWrite(VPIN_TEMP, temp);
Blynk.virtualWrite(VPIN_HUM, hum);
Blynk.virtualWrite(VPIN_PUMP, pumpOn ? 1 : 0);
Blynk.virtualWrite(VPIN_WATER, totalLiters);
// Debug di Serial
Serial.print("T=");
Serial.print(temp);
Serial.print("C H=");
Serial.print(hum);
Serial.print("% Pump=");
Serial.print(pumpOn ? "ON" : "OFF");
Serial.print(" Water=");
Serial.print(totalLiters);
Serial.println(" L");
}
void setup() {
Serial.begin(115200);
delay(100);
Blynk.begin(auth, ssid, pass);
lastMs = millis();
// Kirim data ke Blynk tiap 2 detik
timer.setInterval(2000L, sendDummyData);
}
void loop() {
Blynk.run();
timer.run();
}