#define BLYNK_TEMPLATE_ID "TMPL63zM7E58x"
#define BLYNK_TEMPLATE_NAME "DHT RELAY"
#define BLYNK_AUTH_TOKEN "EGcgLE0JNSxUwqeDFLZYxxA5iyMg8Ohs"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Konfigurasi pin dan tipe sensor DHT
#define DHTPIN 13 // Pin data DHT22
#define DHTTYPE DHT22 // Jenis sensor: DHT22
DHT dht(DHTPIN, DHTTYPE);
// Inisialisasi LCD
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 0x27, ukuran LCD 20x4
// Kredensial WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin relay
#define RELAY_PIN 12 // Pin untuk relay
// Fungsi untuk mengendalikan relay berdasarkan switch Blynk
BLYNK_WRITE(V2) {
int pinValue = param.asInt(); // Membaca status switch V2
if (pinValue == 1) {
digitalWrite(RELAY_PIN, HIGH); // Menyalakan relay
lcd.setCursor(0, 2);
lcd.print("Relay ON ");
} else {
digitalWrite(RELAY_PIN, LOW); // Mematikan relay
lcd.setCursor(0, 2);
lcd.print("Relay OFF ");
}
}
void setup() {
// Inisialisasi komunikasi serial
Serial.begin(115200);
// Inisialisasi DHT sensor
dht.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Menampilkan pesan awal pada LCD
lcd.setCursor(0, 0);
lcd.print("Mengukur...");
// Inisialisasi pin relay
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW); // Pastikan relay mati saat awal
// Inisialisasi koneksi WiFi dan Blynk
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
lcd.setCursor(0, 1);
lcd.print("Menghubungkan WiFi");
Serial.print(".");
}
lcd.setCursor(0, 1);
lcd.print("WiFi Terhubung ");
Serial.println("WiFi connected");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop() {
// Jalankan Blynk
Blynk.run();
// Membaca suhu dan kelembapan dari sensor DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Periksa apakah pembacaan valid
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Gagal membaca dari sensor DHT!");
lcd.setCursor(0, 0);
lcd.print("Sensor Error ");
delay(2000);
return;
}
// Menampilkan data pada serial monitor
Serial.print("Suhu: ");
Serial.print(temperature);
Serial.println(" *C");
Serial.print("Kelembapan: ");
Serial.print(humidity);
Serial.println(" %");
// Menampilkan data pada LCD
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temperature);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Kelembapan: ");
lcd.print(humidity);
lcd.print(" % ");
// Mengirim data ke Blynk
Blynk.virtualWrite(V1, temperature);
Blynk.virtualWrite(V0, humidity);
// Tunggu 2 detik sebelum pembacaan berikutnya
delay(2000);
}