#define BLYNK_TEMPLATE_ID "TMPL68BDIrnTi"
#define BLYNK_TEMPLATE_NAME "tugas iot"
#define BLYNK_AUTH_TOKEN "2q6JuOIYVai4zvg3G2QE7SMYe-e4f-_t"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
#define DHT_PIN 18 // Pin data sensor DHT22 terhubung ke pin 18
#define DHT_TYPE DHT22 // Gunakan DHT22, bisa diganti menjadi DHT11 atau DHT21 jika Anda menggunakan sensor tersebut
#define TRIGGER_PIN 26 // Pin trigger sensor ultrasonik terhubung ke pin 26
#define ECHO_PIN 25 // Pin echo sensor ultrasonik terhubung ke pin 25
#define LED_PIN 5 // Pin LED terhubung ke pin D5
#define BUTTON_PIN 4 // Pin push button terhubung ke pin D4 dan GND
DHT dht(DHT_PIN, DHT_TYPE);
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timerSuhu;
BlynkTimer timerJarak;
bool lastButtonState = HIGH; // Menyimpan status tombol sebelumnya
bool ledState = false; // Menyimpan status LED
void setup() {
Serial.begin(115200);
delay(100);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Input pull-up untuk push button
dht.begin();
// Mulai timer untuk mengirim data suhu setiap 2 detik
timerSuhu.setInterval(2000L, sendTemperatureData);
// Mulai timer untuk mengirim data jarak secara real-time
timerJarak.setInterval(1000L, sendDistanceData);
}
void loop() {
Blynk.run();
timerSuhu.run();
timerJarak.run();
// Membaca tombol switch
int buttonState = digitalRead(BUTTON_PIN);
// Memeriksa perubahan status tombol
if (buttonState == LOW && lastButtonState == HIGH) {
// Tombol switch ditekan dan LED mati, hidupkan LED
digitalWrite(LED_PIN, HIGH);
ledState = true;
} else if (buttonState == HIGH && lastButtonState == LOW) {
// Tombol switch dilepas dan LED hidup, matikan LED
digitalWrite(LED_PIN, LOW);
ledState = false;
}
// Menyimpan status tombol untuk perbandingan berikutnya
lastButtonState = buttonState;
}
BLYNK_WRITE(V0) {
// Blynk akan memanggil fungsi ini setiap kali ada perubahan pada widget
// yang terhubung ke pin V2
int buttonState = param.asInt();
// Memeriksa perubahan status tombol
if (buttonState == HIGH && !ledState) {
// Tombol switch ditekan dan LED mati, hidupkan LED
digitalWrite(LED_PIN, HIGH);
ledState = true;
} else if (buttonState == LOW && ledState) {
// Tombol switch ditekan dan LED hidup, matikan LED
digitalWrite(LED_PIN, LOW);
ledState = false;
}
// Jika tidak ada perubahan, biarkan LED dalam keadaan saat ini
}
void sendTemperatureData() {
// Membaca suhu dari sensor DHT
float temperature = dht.readTemperature();
// Mengirim data suhu ke pin V2 di Blynk
Blynk.virtualWrite(V2, temperature);
}
void sendDistanceData() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
long duration = pulseIn(ECHO_PIN, HIGH);
float distance_cm = duration * 0.034 / 2;
// Mengirim data jarak ke pin V1 di Blynk
Blynk.virtualWrite(V1, distance_cm);
}