#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
// --- Konfigurasi Pin dan Sensor ---
#define DHTPIN 15 // Pin data DHT22 terhubung ke pin D4 (15) ESP32
#define DHTTYPE DHT22 // Jenis sensor DHT22
const int sen_tegangan = 34;
const int sen_arus = 35;
// --- Inisialisasi LCD dan DHT ---
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat default I2C untuk LCD 16x2
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Inisialisasi komunikasi
Serial.begin(115200);
lcd.init();
lcd.backlight();
dht.begin();
// Pesan awal
lcd.setCursor(0, 0);
lcd.print("T=");
lcd.setCursor(0, 1);
lcd.print("H=");
lcd.setCursor(9, 0);
lcd.print("V=");
lcd.setCursor(9, 1);
lcd.print("I=");
delay(2000);
lcd.clear();
}
void loop() {
// Baca data dari sensor DHT22
float suhu = dht.readTemperature(); // dalam Celcius
float kelembaban = dht.readHumidity(); // dalam %
// 1. Membaca nilai analog (0-4095)
int analogValue1 = analogRead(sen_tegangan);
int analogValue2 = analogRead(sen_arus);
// 2. Konversi nilai ADC ke tegangan (0 - 5V)
// ADC ESP32 adalah 12-bit (0-4095)
float voltage = (analogValue1 / 4095.0) * 5;
float current = (analogValue2 / 4095.0) * 5;
// Cek apakah pembacaan berhasil
if (isnan(suhu) || isnan(kelembaban)) {
Serial.println("Gagal membaca dari sensor DHT22!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor Error!");
delay(2000);
return;
}
// Tampilkan di LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(suhu, 1);
lcd.print((char)223); // simbol derajat °
lcd.print("C ");
//lcd.print(kondisi);
lcd.setCursor(0, 1);
lcd.print("H:");
lcd.print(kelembaban, 1);
lcd.print("%");
lcd.setCursor(9, 0);
lcd.print("V: ");
lcd.print(voltage, 2); // Menampilkan 1 angka di belakang koma
lcd.print(" V ");
lcd.setCursor(9, 1);
lcd.print("I: ");
lcd.print(current, 2); // Menampilkan 1 angka di belakang koma
lcd.print(" A ");
delay(500); // Update setiap 0.5 detik
// Delay pembacaan
delay(3000);
}