#define BLYNK_TEMPLATE_ID "TMPL6IsQlHRZO"
#define BLYNK_TEMPLATE_NAME "Latihan 5 Akbar"
#define BLYNK_AUTH_TOKEN "V5dZdlEb0-qreO1g52XFxasGzOCNNEX-"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define DHTPIN 15
#define DHTTYPE DHT22
#define SDA_PIN 21
#define SCL_PIN 22
#define VPIN_SUHU V0
#define VPIN_LEMBAB V1
#define VPIN_KONDISI V2
const float BATAS_PANAS = 30.0;
const float BATAS_DINGIN = 20.0;
const float BATAS_LEMBAB = 70.0;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
BlynkTimer timer;
String tentukanKondisi(float t, float h) {
if (t > BATAS_PANAS) return "Panas";
if (t < BATAS_DINGIN) return "Dingin";
if (h > BATAS_LEMBAB) return "Lembab";
return "Normal";
}
void tampilLCD(int baris, String teks) {
while (teks.length() < 16) teks += ' ';
lcd.setCursor(0, baris);
lcd.print(teks);
}
void sendSensorData() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Gagal membaca dari sensor DHT!");
tampilLCD(0, "Sensor error!");
tampilLCD(1, "Cek kabel DHT22");
return;
}
String kondisi = tentukanKondisi(t, h);
Blynk.virtualWrite(VPIN_SUHU, t);
Blynk.virtualWrite(VPIN_LEMBAB, h);
Blynk.virtualWrite(VPIN_KONDISI, kondisi);
tampilLCD(0, "S:" + String(t, 1) + "C H:" + String(h, 0) + "%");
tampilLCD(1, "Kondisi: " + kondisi);
Serial.printf("Suhu: %.1f C | Lembab: %.1f %% | Kondisi: %s\n", t, h, kondisi.c_str());
}
void setup() {
Serial.begin(115200);
Wire.begin(SDA_PIN, SCL_PIN);
lcd.init();
lcd.backlight();
dht.begin();
tampilLCD(0, "Menghubungkan...");
tampilLCD(1, "Wi-Fi & Blynk");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
lcd.clear();
timer.setInterval(2000L, sendSensorData);
}
void loop() {
Blynk.run();
timer.run();
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4