#include "DHTesp.h" //import library DHTesp, digunakan untuk berinteraksi dengan sensor suhu dan kelembaban DHT
#include <LiquidCrystal_I2C.h> //import library LiquidCrystal_I2C, digunakan untuk mengendalikan LCD dengan protokol I2C.
LiquidCrystal_I2C lcd(0x27, 20, 4); //Membuat objek lcd dengan alamat I2C 0x27 dengan ukuran 20 kolom dan 4 baris.
//Blynk
#define BLYNK_TEMPLATE_ID "TMPL6WjUN9gkA"
#define BLYNK_TEMPLATE_NAME "PROJEK INFOR RM"
#define BLYNK_AUTH_TOKEN "ENAYPRdy1EMdOsnyCHDCOA4KNxei27aw"
#define POT_PIN 34 // Pin yang terhubung ke wiper potensiometer
#define OUTPUT_PIN 3 // Ganti dengan pin yang Anda gunakan
const int DHT_PIN = 15; //Pin DHT yang disambungkan ke ESP32.
DHTesp dhtSensor; //Membuat objek dari kelas DHTesp untuk menghubungkan sensor DHT
int suhu; //Mendeklarasikan variabel untuk menyimpan nilai suhu.
int kelembaban; //Mendeklarasikan variabel untuk menyimpan nilai kelembaban.
#define BLYNK_PRINT Serial //Mengonfigurasi library Blynk agar menggunakan objek Serial untuk output debug.
//Mengimpor library yang diperlukan untuk koneksi WiFi dan Blynk.
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
int jam,menit,detik,hari,tanggal,bulan,tahun;
char temp [33];
char nama_hari[7][7] = {"Mingg","Senin","Sel","Rabu","Kamis","Jumat","Sabtu"};
//Mengatur nama dan kata sandi jaringan WiFi.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// interval pengiriman data ke server Blynk.
BlynkTimer timer;
/*membaca suhu dan kelembaban dari sensor DHT,
mengirim data ke server Blynk, dan menampilkan informasi di Serial dan LCD. */
void myTimerEvent()
{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhu=data.temperature;
kelembaban=data.humidity;
Blynk.virtualWrite(V0, suhu);
Blynk.virtualWrite(V1, kelembaban);
// Blynk.virtualWrite(V2, current);
// Blynk.virtualWrite(V3,voltage);
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Kelembaban: " + String(data.humidity, 2) + "%");
Serial.println("============");
lcd.setCursor(0,0);
lcd.print("Temp= " + String(data.temperature, 2) + " C");
lcd.setCursor(0,1);
lcd.print("kelembaban= " + String(data.humidity, 1) + "%");
delay(4000);
}
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(1000L, myTimerEvent);
pinMode(OUTPUT_PIN, OUTPUT); // Set pin sebagai OUTPUT
lcd.init();
lcd.backlight();
lcd.backlight();
lcd.init();
lcd.setCursor(4,0);
lcd.print("b and f");
lcd.setCursor(2,1);
lcd.print("rumah pintar"); delay(2000); lcd.clear();
rtc.begin();
Serial.println("program siap");
}
/*memanggil Blynk.run() dan timer.run() untuk menjaga koneksi Blynk dan
menjalankan timer. */
void loop() {
int potValue = analogRead(POT_PIN); // Membaca nilai potensiometer
//float voltage = (potValue / 4095.0) * 3.3; // Menghitung tegangan (0-3.3V)
float voltage = (potValue / 4095.0) * 3.3; // Menghitung tegangan (0-3.3V)
float resistance = 1000; // contoh: 1k ohm
float current = voltage / resistance; // Menghitung arus (I = V/R)
// Menghitung daya (P = V * I)
float power = voltage * current; // Daya dalam watt
Blynk.virtualWrite(V2, current);
Blynk.virtualWrite(V3,voltage);
Blynk.virtualWrite(V4,power);
// Mengaktifkan output
digitalWrite(OUTPUT_PIN, HIGH);
delay(500); // Aktif selama 500 ms
// Menonaktifkan output
digitalWrite(OUTPUT_PIN, LOW);
delay(500); // Nonaktif selama 500 ms
Serial.print("Potensiometer Value: ");
Serial.print(potValue);
Serial.print(" - Voltage: ");
Serial.print(voltage);
Serial.print(" V - Current: ");
Serial.print(current);
Serial.print(" A - Power: ");
Serial.print(power);
Serial.println(" W");
DateTime now = rtc.now();
jam = now.hour();
menit = now.minute();
detik = now.second();
hari = now.dayOfTheWeek();
tanggal = now.day();
bulan = now.month();
tahun = now.year();
sprintf (temp, "jam %02d:%02d:%02d WIB", jam, menit, detik);
lcd.setCursor(0,0);lcd.print(temp);
Serial.println(temp);
sprintf (temp, "%s,%02d-%02d-%d", nama_hari[hari],tanggal,bulan,tahun);
lcd.setCursor(0,1);lcd.print(temp);
Serial.println(temp);
delay(3000); lcd.clear();
Blynk.run();
timer.run();
delay(1000); // Delay 1 detik
}