// Definisi kunci untuk template Blynk
#define BLYNK_TEMPLATE_ID "TMPL6qbXjbhP1"
#define BLYNK_TEMPLATE_NAME "ESP32 Monitoring Boiler"
#define BLYNK_AUTH_TOKEN "p0ychEccIsHR601LfO69Z940LUVnG0tr"
// Mengarahkan output Blynk ke Serial Monitor untuk debug
#define BLYNK_PRINT Serial
// Mengimpor library yang diperlukan
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Definisi pin untuk sensor ultrasonik
#define TRIGGER_PIN 13
#define ECHO_PIN 12
// Mengatur kunci otentikasi untuk Blynk
char auth[] = BLYNK_AUTH_TOKEN;
// Konfigurasi WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Konfigurasi sensor DHT22
#define DHTPIN 5
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Membuat objek timer Blynk
BlynkTimer timer;
// Fungsi setup() untuk inisialisasi awal
void setup(){
// Memulai komunikasi serial untuk debug
Serial.begin(115200);
// Memulai koneksi ke Blynk dengan otentikasi dan informasi WiFi
Blynk.begin(auth, ssid, pass);
// Memulai sensor DHT22
dht.begin();
// Mengatur pin untuk sensor ultrasonik sebagai OUTPUT dan INPUT
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Menjadwalkan fungsi sendData() untuk dieksekusi setiap detik
timer.setInterval(1000L, sendData);
}
// Loop utama
void loop(){
// Menjalankan Blynk
Blynk.run();
// Menjalankan timer
timer.run();
}
// Fungsi untuk mengirim data ke Blynk
void sendData(){
// Membaca nilai suhu dan kelembaban dari sensor DHT22
float h = dht.readHumidity();
float t = dht.readTemperature();
// Memeriksa apakah pembacaan sensor DHT22 berhasil
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Transformasi linier: Map 0-80 derajat Celsius ke 0-180 derajat Celsius
//perbandingan nilai asal ke nilai 80:180 atau dapat disederhanakan menjadi 4:9
//nilai suhu asal (0-80 derajat Celsius)
float t_mapped = map(t, 0, 80, 0, 180);
// Mengirim data suhu dan kelembaban ke widget Blynk V0 dan V1
Blynk.virtualWrite(V1, h);
Blynk.virtualWrite(V0, t_mapped);
// Mencetak data suhu dan kelembaban ke Serial Monitor
Serial.print("Temperature : ");
Serial.print(t_mapped);
Serial.print(" Humidity : ");
Serial.println(h);
// Membaca nilai jarak dari sensor ultrasonik
float distance = getUltrasonicDistance();
String level;
// Menentukan tingkat air berdasarkan jarak yang diukur
if (distance >= 1 && distance <= 16) {
level = "low";
} else if (distance > 16 && distance <= 33) {
level = "mid";
} else {
level = "high";
}
// Mengirim data jarak dan tingkat air ke widget Blynk V2 dan V3
Blynk.virtualWrite(V2, distance);
Blynk.virtualWrite(V3, level.c_str());
// Mencetak data jarak dan tingkat air ke Serial Monitor
Serial.print("Distance: ");
Serial.print(distance);
Serial.print(" Level: ");
Serial.println(level);
}
// Fungsi untuk mengukur jarak dengan sensor ultrasonik
float getUltrasonicDistance() {
// Mengirim sinyal trigger ke sensor ultrasonik
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
// Membaca durasi pulsa ekho dan mengubahnya menjadi jarak dalam sentimeter
return pulseIn(ECHO_PIN, HIGH) / 58.0;
}