#define BLYNK_TEMPLATE_ID "TMPL6yOdigGSo"
#define BLYNK_TEMPLATE_NAME "Kontrol dan Monitoring WOKWI"
#define BLYNK_AUTH_TOKEN "kbhfFZ3pjg-SEHB2oLrM-SAKGyNGxL7n"
#include <Wire.h>
#include <DHT.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#define TRIGGER_PIN 25 // Pin trigger sensor ultrasonik
#define ECHO_PIN 26 // Pin echo sensor ultrasonik
#define LED_PIN 5 // Pin untuk lampu LED
#define BUTTON_PIN 4 // Pin untuk push button
#define DHT_PIN 18 // Pin untuk sensor DHT
#define DHT_TYPE DHT22 // Tipe sensor DHT yang digunakan (DHT11, DHT22, DHT21)
DHT dht(DHT_PIN, DHT_TYPE);
int ledState = LOW;
int buttonPressCount = 0;
float temperatureC = 0;
float temperatureF = 0;
float temperatureK = 0;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
bool buttonState = false;
bool prevButtonState = false;
BLYNK_WRITE(V0)
{
buttonState = param.asInt(); // Mendapatkan nilai tombol dari Blynk
if (buttonState)
{
ledState = !ledState; // Toggle status LED
digitalWrite(LED_PIN, ledState);
}
}
void setup()
{
Serial.begin(9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP); // Push button diatur sebagai input dengan pull-up internal
dht.begin();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
void loop()
{
Blynk.run();
// Mendapatkan nilai jarak dari sensor ultrasonik dan mengirimkannya ke Blynk
long duration;
int distance;
// Jarak
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = (duration / 2) / 29.1;
Blynk.virtualWrite(V1, distance);
// DHT
temperatureC = dht.readTemperature();
if (isnan(temperatureC))
{
Serial.println("Failed to read temperature from DHT sensor!");
}
else
{
temperatureF = temperatureC * 9.0 / 5.0 + 32.0;
temperatureK = temperatureC + 273.15;
Blynk.virtualWrite(V2, temperatureC);
Serial.println(temperatureC);
Blynk.virtualWrite(V3, temperatureF);
Serial.println(temperatureF);
Blynk.virtualWrite(V4, temperatureK);
Serial.println(temperatureK);
}
buttonState = digitalRead(BUTTON_PIN);
if (buttonState != prevButtonState)
{
prevButtonState = buttonState;
if (buttonState)
{
ledState = !ledState; // Toggle status LED
digitalWrite(LED_PIN, ledState);
Blynk.virtualWrite(V0, ledState);
Serial.println(ledState);
}
}
delay(100);
}