#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <ESP32Servo.h>
#include "ThingSpeak.h"
Servo servo;
const char* ssid = "Wokwi-GUEST"; // your network SSID (name)
const char* password = ""; // your network password
WiFiClient client;
unsigned long myChannelNumber = 2388067;
const char * myWriteAPIKey = "XG6MFGS9CT3ED14Z";
#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(115200);
lcd.init();
lcd.backlight();
lcd.clear();
dht.begin();
WiFi.mode(WIFI_STA);
if(WiFi.status() != WL_CONNECTED){
Serial.print("Attempting to connect");
while(WiFi.status() != WL_CONNECTED ){
WiFi.begin(ssid, password);
delay(1000);
}
Serial.println("\nConnected. ");
}
servo.attach(servoPin);
ThingSpeak.begin(client); // Initialize ThingSpeak
}
void loop() {
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");
} 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");
} 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");
}
if (humidity > 25 && temperature > 25) {
servo.write(180);
} else {
servo.write(0);
}
ThingSpeak.setField(1, ph);
ThingSpeak.setField(2, temperature);
ThingSpeak.setField(3, humidity);
int x = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey );
if(x == 200){
Serial.println("Channel update successful." );
}
else{
Serial.println("Problem updating channel. HTTP error code " + String(x) );
}
delay(15000);
}