// Mendefinisikan informasi template Blynk, termasuk ID, nama, dan token otentikasi
#define BLYNK_TEMPLATE_ID "TMPL6wxx7lGkB"
#define BLYNK_TEMPLATE_NAME "Tugas P6 Mentoring by Muhammad"
#define BLYNK_AUTH_TOKEN "Zz6hnMdY1w1S-bx822O5mb88h3E-m4Mm"
// Menggunakan Serial untuk output debug
#define BLYNK_PRINT Serial
// Menggunakan library DHT untuk membaca suhu dan kelembaban dari sensor DHT22
#include "DHT.h"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Mendefinisikan pin yang digunakan untuk sensor DHT
#define DHTPIN 4
#define DHTTYPE DHT22
// Membuat objek DHT
DHT dht(DHTPIN, DHTTYPE);
// Mendefinisikan pin untuk sensor ultrasonik HC-SR04
#define trigPin 5
#define echoPin 18
// Kecepatan suara untuk menghitung jarak
#define SOUND_SPEED 0.034
// Mendefinisikan pin untuk tombol dan LED
#define BUTTON_PIN 0
#define LED_PIN 2
// Variabel untuk menyimpan status LED dan tombol
int led_state = LOW;
int button_state;
// Variabel untuk mengukur jarak
long duration;
float distanceCm;
// Informasi koneksi WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Fungsi setup() dijalankan sekali saat perangkat dihidupkan
void setup(){
Serial.begin(115200);
// Mengatur pin trigPin dan echoPin
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Mengatur pin BUTTON_PIN dan LED_PIN
pinMode(BUTTON_PIN, INPUT_PULLUP); // Mengatur pin tombol sebagai input dengan pull-up resistor
pinMode(LED_PIN, OUTPUT); // Mengatur pin LED sebagai output
// Membaca status awal tombol
button_state = digitalRead(BUTTON_PIN);
// Menginisialisasi sensor DHT dan Blynk
dht.begin();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // Menginisialisasi Blynk
}
// Fungsi untuk mengukur jarak menggunakan sensor ultrasonik
void distanceMeasurement(){
// Mengosongkan trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Mengatur trigPin ke status HIGH selama 10 mikrodetik
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Membaca echoPin, mengembalikan waktu perjalanan gelombang suara dalam mikrodetik
duration = pulseIn(echoPin, HIGH);
// Menghitung jarak dalam centimeter
distanceCm = duration * SOUND_SPEED/2;
// Mengirim data jarak ke widget Virtual V0 di Blynk
Blynk.virtualWrite(V0, distanceCm);
}
// Fungsi untuk mengukur suhu dan kelembaban menggunakan sensor DHT22
void temperatureMeasurement(){
// Proses membaca suhu dan kelembaban
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
// Memeriksa apakah pembacaan berhasil
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// Mengonversi Celcius ke Kelvin
float k = t + 273.15;
// Mengirim data suhu dan kelembaban ke widget Virtual di Blynk
Blynk.virtualWrite(V1, t); // Suhu dalam Celsius
Blynk.virtualWrite(V2, f); // Suhu dalam Fahrenheit
Blynk.virtualWrite(V3, k); // Suhu dalam Kelvin
}
// Fungsi untuk mengendalikan LED berdasarkan tombol yang ditekan
void pushButtonLED(){
// Membaca status tombol
button_state = digitalRead(BUTTON_PIN);
//// Jika tombol ditekan, LED dihidupkan
//if (button_state == LOW) {
// Serial.println("The button is pressed");
// led_state = HIGH;
//} else {
// led_state = LOW;
//}
// Mengendalikan LED sesuai dengan status tombol
digitalWrite(LED_PIN, button_state);
// Mengirim status tombol ke widget Virtual V4 di Blynk
//Blynk.virtualWrite(V4, button_state);
}
// Fungsi untuk mencetak output pengukuran ke Serial Monitor
void printMeasurementsOutput(){
Serial.println("============================");
Serial.print("Distance (cm): ");
Serial.println(distanceCm);
Serial.print(F("Humidity: "));
Serial.println(dht.readHumidity());
Serial.print(F("Temperature: "));
Serial.print(dht.readTemperature());
Serial.print(F("°C | "));
Serial.print(dht.readTemperature(true));
Serial.print(F("°F | "));
Serial.print(dht.readTemperature() + 273.15);
Serial.println(F("K"));
Serial.print("LED State: ");
Serial.println(led_state);
}
// Fungsi loop() dijalankan terus-menerus setelah fungsi setup() selesai
void loop(){
// Memanggil fungsi pengukuran jarak, suhu, dan kontrol LED
distanceMeasurement();
temperatureMeasurement();
pushButtonLED();
// Mencetak output pengukuran ke Serial Monitor
printMeasurementsOutput();
// Menunda eksekusi selama 2 detik
delay(2000);
}