// Mendefinisikan koneksi dan token Blynk
#define BLYNK_TEMPLATE_ID "TMPL64QoJDkiO"
#define BLYNK_TEMPLATE_NAME "Monitoring"
#define BLYNK_AUTH_TOKEN "gG3b1BLcqTIuImlXVDqGg_ZOIGdgM6vd"
// Mendefinisikan penggunaan Serial untuk debugging
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHTesp.h>
// Mendefinisikan SSID dan password WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
// Mendefinisikan pin untuk sensor DHT dan LED
const int DHT_PIN = 18;
const int led = 5;
const int pushButtonPin = 4; // Pin push button
DHTesp dhtSensor;
float suhuCelcius, kelembaban;
// Mendefinisikan pin untuk sensor ultrasonik
const int TRIG_PIN = 25; // Pin TRIG ultrasonik
const int ECHO_PIN = 26; // Pin ECHO ultrasonik
// Variabel untuk menyimpan status LED
bool ledState = false;
// Fungsi untuk melakukan konfigurasi awal
void setup()
{
Serial.begin(115200);
// Mulai koneksi ke WiFi dan Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// Konfigurasi sensor DHT
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
// Menjalankan timer untuk membaca sensor secara periodik
timer.setInterval(1000L, myTimerEvent);
// Menentukan mode pin
pinMode(led, OUTPUT);
pinMode(pushButtonPin, INPUT_PULLUP); // Konfigurasi pin push button dengan pull-up resistor internal
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
// Fungsi untuk membaca data sensor dan mengirimkannya ke Blynk
void myTimerEvent()
{
// Membaca suhu dan kelembaban dari sensor DHT
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhuCelcius = data.temperature;
kelembaban = data.humidity;
// Mencetak suhu dan kelembaban ke Serial Monitor
Serial.println("Suhu: " + String(suhuCelcius, 1) + "C");
Serial.println("Kelembaban: " + String(kelembaban, 1) + "%");
// Mengirim kelembaban ke Blynk Virtual Pin 2
Blynk.virtualWrite(V2, kelembaban);
// Mengecek apakah suhu melebihi 35 derajat Celsius
if (suhuCelcius > 35)
{
Serial.println("Suhu Naik");
Blynk.logEvent("high_temp");
}
// Membaca jarak dari sensor ultrasonik
float distance = readUltrasonicDistance();
Serial.println("Jarak Ultrasonik: " + String(distance) + " cm"); // Print ultrasonic distance
Blynk.virtualWrite(V3, distance); // Mengirim jarak ultrasonik ke Blynk
// Mengonversi suhu dari Celsius ke Fahrenheit
float suhuFahrenheit = (suhuCelcius * 9 / 5) + 32;
Serial.println("Suhu Fahrenheit: " + String(suhuFahrenheit, 1) + "F"); // Print temperature in Fahrenheit
Blynk.virtualWrite(V4, suhuFahrenheit); // Mengirim suhu dalam Fahrenheit ke Blynk
// Mengonversi suhu dari Celsius ke Kelvin
float suhuKelvin = suhuCelcius + 273.15;
Serial.println("Suhu Kelvin: " + String(suhuKelvin, 1) + "K"); // Print temperature in Kelvin
Blynk.virtualWrite(V5, suhuKelvin); // Mengirim suhu dalam Kelvin ke Blynk
// Mengirim suhu dalam Celsius ke Blynk
Blynk.virtualWrite(V0, suhuCelcius);
}
// Fungsi untuk memeriksa status push button dan mengontrol LED
void checkPushButton()
{
int pushButtonState = digitalRead(pushButtonPin);
if (pushButtonState == LOW) {
// Jika tombol ditekan, ubah status LED
ledState = !ledState;
digitalWrite(led, ledState ? HIGH : LOW);
delay(200); // Tambahkan jeda kecil untuk debouncing
}
}
// Fungsi untuk menangani perubahan status tombol Blynk
BLYNK_WRITE(V1)
{
int pinValue = param.asInt();
if (pinValue == 1) {
// Jika tombol ditekan, nyalakan LED
ledState = true;
digitalWrite(led, HIGH);
} else {
// Jika tombol dilepas, matikan LED
ledState = false;
digitalWrite(led, LOW);
}
}
// Fungsi untuk membaca jarak dari sensor ultrasonik
float readUltrasonicDistance() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance = (duration * 0.0343) / 2; // Konversi ke cm
return distance;
}
// Fungsi utama loop
void loop()
{
Blynk.run();
timer.run();
checkPushButton(); // Memeriksa status push button
}