#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
// Definisi pin dan objek
const int DHT_SENSOR_PIN = 13;
const int SOIL_MOISTURE_PIN = 36; // ADC0
const int PH_SENSOR_PIN = 39; // ADC1
DHTesp dht;
LiquidCrystal_I2C lcdDisplay(0x27, 16, 2);
void setup() {
// Inisialisasi LCD dan DHT sensor
lcdDisplay.init();
lcdDisplay.backlight();
dht.setup(DHT_SENSOR_PIN, DHTesp::DHT22);
lcdDisplay.setCursor(0, 0);
lcdDisplay.print("Init DHT & LCD");
delay(2000); // Menunggu selama 2 detik
lcdDisplay.clear();
}
void loop() {
// Membaca nilai dari sensor DHT22
TempAndHumidity sensorData = dht.getTempAndHumidity();
// Batasi nilai kelembaban pada rentang 0 - 100%
float humidity = constrain(sensorData.humidity, 0, 100);
// Simulasi pembacaan sensor pH tanah
int phAnalogValue = analogRead(PH_SENSOR_PIN);
float voltage = phAnalogValue * (3.3 / 4095.0); // Konversi nilai ADC ke tegangan (menggunakan resolusi 12-bit ADC ESP32)
float pHValue = 3.5 * voltage + 0.5; // Rumus sederhana untuk menghitung pH
// Mengubah nilai kelembaban menjadi string dengan dua angka di belakang koma
char humidityStr[6];
dtostrf(humidity, 4, 2, humidityStr);
// Mengubah nilai pH menjadi string dengan satu angka di belakang koma
char pHValueStr[5];
dtostrf(pHValue, 4, 1, pHValueStr);
// Menampilkan data suhu, kelembaban, kelembaban tanah, dan pH di LCD
lcdDisplay.setCursor(0, 0);
lcdDisplay.print("Temp: ");
lcdDisplay.print(sensorData.temperature);
lcdDisplay.print(" C");
lcdDisplay.setCursor(0, 1);
lcdDisplay.print("Humidity: ");
lcdDisplay.print(humidityStr);
lcdDisplay.print(" %");
lcdDisplay.setCursor(0, 2);
lcdDisplay.print("Soil Moisture: ");
lcdDisplay.print("N/A");
lcdDisplay.setCursor(0, 3);
lcdDisplay.print("pH Value: ");
lcdDisplay.print(pHValueStr);
delay(2000); // Menunggu 2 detik sebelum pembacaan berikutnya
}