#define BLYNK_TEMPLATE_ID "TMPL6fLpSkFaM"
#define BLYNK_TEMPLATE_NAME "Monitoring SUhu"
#define BLYNK_AUTH_TOKEN "srSKTDMPt17DB7z_eMNKVKzZBtXjmwLO"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Konfigurasi Blynk
#define BLYNK_PRINT Serial
#define DHTTYPE DHT22 // Tipe sensor DHT
#define DHTPIN 23 // Pin GPIO untuk DHT22
#define LED_PIN 2 // Pin GPIO untuk LED
// Konfigurasi LCD
const int lcdAddress = 0x27; // Alamat I2C LCD
const int lcdColumns = 16;
const int lcdRows = 2;
// Objek DHT dan LCD
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(lcdAddress, lcdColumns, lcdRows);
// Variabel Global
float humidity, temp;
unsigned long previousMillis = 0;
const long interval = 3000;
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
bool isFirstConnect = true;
// Callback saat terhubung ke Blynk
BLYNK_CONNECTED() {
if (isFirstConnect) {
Blynk.syncAll();
isFirstConnect = false;
}
}
// Callback untuk kontrol LED
BLYNK_WRITE(V2) {
int ledState = param.asInt(); // Membaca nilai dari Virtual Pin V2
digitalWrite(LED_PIN, ledState); // Mengontrol LED
Serial.println(ledState ? "LED ON" : "LED OFF");
}
void setup() {
// Inisialisasi Serial Monitor
Serial.begin(9600);
// Inisialisasi Blynk
Blynk.begin(auth, ssid, pass);
// Inisialisasi DHT
dht.begin();
// Inisialisasi LCD
lcd.init();
lcd.backlight(); // Aktifkan backlight
// Inisialisasi LED
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW); // Pastikan LED dalam keadaan mati saat awal
}
void loop() {
Blynk.run();
getTemperature();
}
// Fungsi untuk membaca suhu dan kelembaban
void getTemperature() {
unsigned long currentMillis = millis();
// Baca data setiap interval tertentu
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
// Baca data dari sensor
humidity = dht.readHumidity();
temp = dht.readTemperature();
// Periksa apakah pembacaan data valid
if (isnan(humidity) || isnan(temp)) {
Serial.println("Sensor Tidak Terbaca");
displayErrorOnLCD();
return;
}
// Kirim data ke Blynk
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, humidity);
// Tampilkan data pada Serial Monitor
Serial.print("Temperature: ");
Serial.print(temp);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println("% (Data dikirim ke Blynk)");
// Tampilkan data pada LCD
displayDataOnLCD(temp, humidity);
}
}
// Fungsi untuk menampilkan data di LCD
void displayDataOnLCD(float temp, float humidity) {
lcd.setCursor(0, 0);
lcd.print("Suhu: ");
lcd.print(temp);
lcd.print(" C ");
lcd.setCursor(0, 1);
lcd.print("Lembab: ");
lcd.print(humidity);
lcd.print("% ");
}
// Fungsi untuk menampilkan pesan error pada LCD
void displayErrorOnLCD() {
lcd.setCursor(0, 0);
lcd.print("Error Reading ");
lcd.setCursor(0, 1);
lcd.print("Sensor Data ");
}