#define BLYNK_TEMPLATE_ID "TMPL6VtGnqE8w"
#define BLYNK_TEMPLATE_NAME "SISTEM MONITORING PH"
#define BLYNK_AUTH_TOKEN "EYP9zS3hVv_PAaf6AfruyYdwhXhTJcWK"
#define BLYNK_PRINT Serial
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include <BlynkSimpleEsp32.h>
Servo servo;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define DHT_PIN 2 // Pin data sensor DHT22 terhubung ke pin 2 pada ESP32
#define DHT_TYPE DHT22 // Jenis sensor DHT22
#define POT_PIN 34 // Pin analog potensiometer terhubung ke pin 34 pada ESP32
DHT dht(DHT_PIN, DHT_TYPE);
LiquidCrystal_I2C lcd(0x27, 16, 4);
WidgetLCD lcd1(V3);
const int ledMerah = 13;
const int ledKuning = 12;
const int ledHijau = 14;
const int servoPin = 18;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd1.clear();
dht.begin();
servo.attach(servoPin);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
}
void loop() {
Blynk.run();
delay(2000); // Tunda 2 detik antara pembacaan nilai
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
pinMode(POT_PIN, INPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(ledKuning, OUTPUT);
// Periksa apakah pembacaan suhu dan kelembaban berhasil
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca sensor DHT22!");
return;
}
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.print(" °C\t");
Serial.print("Kelembaban: ");
Serial.print(humidity);
Serial.println(" %");
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Kelembaban: ");
lcd.print(humidity);
lcd.print(" %");
// Baca nilai potensiometer
int potValue = analogRead(POT_PIN);
// Konversi nilai potensiometer menjadi nilai pH
float ph = map(potValue, 0, 4095, 1, 100);
// Tampilkan nilai potensiometer pada Serial Monitor
Serial.print("PH: ");
Serial.println(ph);
// Tampilkan nilai potensiometer pada LCD
lcd.setCursor(0, 2);
lcd.print("PH: ");
lcd.print(ph);
lcd.print(" ");
if (ph < 7) {
digitalWrite(ledHijau, HIGH);
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Basa");
lcd1.print(0,0, " ");
lcd1.print(0,0, "Basa");
Blynk.logEvent("kondisi", "Basa");
} else if (ph == 7) {
digitalWrite(ledHijau, LOW);
digitalWrite(ledMerah, LOW);
digitalWrite(ledKuning, HIGH);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Normal");
lcd1.print(0,0, " ");
lcd1.print(0,0, "Normal");
Blynk.logEvent("kondisi", "Normal");
} else if (ph > 7 ) {
digitalWrite(ledHijau, LOW);
digitalWrite(ledMerah, HIGH);
digitalWrite(ledKuning, LOW);
lcd.setCursor(0, 3);
lcd.print(" ");
lcd.setCursor(0, 3);
lcd.print("Asam");
lcd1.print(0,0, " ");
lcd1.print(0,0, "Asam");
Blynk.logEvent("kondisi", "Asam");
}
if (humidity > 25 && temperature > 25) {
servo.write(180);
lcd1.print(0,1, " ");
lcd1.print(0,1, "Servo Menyala");
Blynk.logEvent("servo", "Servo Menyala");
} else {
servo.write(0);
lcd1.print(0,1, " ");
lcd1.print(0,1, "Servo Mati");
Blynk.logEvent("servo", "Servo Mati");
}
Blynk.virtualWrite(V0, humidity);
Blynk.virtualWrite(V1, temperature);
Blynk.virtualWrite(V2, ph);
}