#define BLYNK_TEMPLATE_ID "TMPL6PK3cdZ9F"
#define BLYNK_TEMPLATE_NAME "TUGAS AICHE"
#define BLYNK_AUTH_TOKEN "nbxrhYIZ5GYQ5dRf489bHhxSwIIzEgr4"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include "DFRobot_ESP_PH.h"
#include "EEPROM.h"
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
char auth[] = BLYNK_AUTH_TOKEN;
BlynkTimer timer;
#define relay 26
int SW_relay = 0;
boolean relay0n = false;
unsigned long startTime = 0;
unsigned long checkInterval = 10000L;
DFRobot_ESP_PH ph;
#define ESPADC 4096.0
#define ESPVOLTAGE 3300
#define PH_PIN 14
DFRobot_ESP_PH ph(PH_PIN);
float voltage, phValue, temperature = 25;
#define relay2 23
int SW_relay2 = 0;
boolean relay20n = false;
unsigned long startTime2 = 0;
unsigned long checkInterval2 = 10000L;
void setup() {
Serial.begin(115200);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print("."); }
Serial.println(" Connected!");
Blynk.begin(auth, ssid, pass);
pinMode(relay, OUTPUT);
digitalWrite(relay, LOW);
timer.setTimeout(checkInterval, checkRelay);
EEPROM.begin(32);
ph.begin();
pinMode(relay2, OUTPUT);
digitalWrite(relay2, LOW);
timer.setTimeout(checkInterval2, checkRelay2);
}
void loop() {
delay(100);
Blynk.run();
timer.run();
}
void checkRelay() {
if (relay0n && (millis() - startTime >= 10000)){
digitalWrite(relay, LOW);
delay(100);
Serial.println("AUTOMATICALLY TURNED OFF");
relay0n = false;
delay(100);
Blynk.virtualWrite(V0,LOW);
}
timer.setTimeout(checkInterval, checkRelay);
}
BLYNK_WRITE(V0){
SW_relay = param.asInt();
if (SW_relay == 1){
digitalWrite(relay, HIGH);
startTime = millis();
delay(100);
Serial.println("ON");
relay0n = true;
delay(100);
Blynk.virtualWrite(V0,HIGH);
}
else{
digitalWrite(relay, LOW);
delay(100);
Serial.println("OFF");
relay0n = false;
delay(100);
Blynk.virtualWrite(V0,LOW);
}
Blynk.virtualWrite(V0, relay0n);
}
BLYNK_WRITE(V1){
static unsigned long timepoint = millis();
if (millis() - timepoint > 10000){
timepoint = millis();
voltage = analogRead(PH_PIN) / ESPADC * ESPVOLTAGE;
Serial.print("voltage:");
Serial.println(voltage, 4);
Serial.print("temperature:");
Serial.println(temperature, 1);
phValue = ph.readPH(voltage, temperature);
Serial.print("pH:");
Serial.println(phValue, 4);}
ph.calibration(voltage, temperature);
Blynk.virtualWrite(V1, pHValue);
}
void checkRelay2() {
phValue = ph.readPH(voltage, temperature);
if(phValue >= 8.5 || phValue <= 6.5){
digitalWrite(relay2, HIGH);
startTime2 = millis();
delay(100);
Serial.println("REPUMP");
relay20n = true;
delay(100);
Blynk.virtualWrite(V2,HIGH);}
if (relay20n && (millis() - startTime2 >= 10000)){
digitalWrite(relay2, LOW);
delay(100);
Serial.println("REPUMP AUTOMATICALLY TURNED OFF");
relay20n = false;
delay(100);
Blynk.virtualWrite(V2,LOW);
}
timer.setTimeout(checkInterval2, checkRelay2);
}
BLYNK_WRITE(V2){
SW_relay2 = param.asInt();
digitalWrite(relay2, LOW);
delay(100);
relay20n = false;
delay(100);
Blynk.virtualWrite(V2,LOW);
}