#define BLYNK_TEMPLATE_ID "TMPL6oM_KEj-X"
#define BLYNK_TEMPLATE_NAME "IOT Monitoring Puskes"
#define BLYNK_AUTH_TOKEN "pI6yp_7om_UbY1SbXQhfXKTdV3C7h6O3"
#define BLYNK_PRINT Serial
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
int redPin = 27;
int yelPin = 26;
int greenPin = 25;
int buzPin = 14;
#define VPIN_BUZZER_CONTROL V2
#define VPIN_LED_MERAH V3
#define VPIN_LED_KUNING V4
#define VPIN_LED_HIJAU V5
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
DHT dht(14, DHT22);
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
bool manualControl = false;
void setup() {
pinMode(greenPin, OUTPUT);
pinMode(redPin, OUTPUT);
pinMode(yelPin, OUTPUT);
pinMode(buzPin, OUTPUT);
dht.begin();
Serial.begin(115200);
Wire.begin();
Wire.setClock(400000);
Blynk.begin(auth, ssid, pass);
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("failed to start SSD1306 OLED"));
while (1);
}
}
void loop() {
if (!manualControl) {
double temp = dht.readTemperature();
double hum = dht.readHumidity();
oled.clearDisplay();
oled.setTextSize(1);
oled.setTextColor(WHITE);
oled.setCursor(0, 2);
oled.print("Suhu: ");
oled.println(temp);
oled.print("Kelembapan: ");
oled.println(hum);
oled.display();
Blynk.virtualWrite(V0, temp);
Blynk.virtualWrite(V1, hum);
if (temp >= 20 && temp <= 28 && hum >= 45 && hum <= 60) {
digitalWrite(greenPin, HIGH);
digitalWrite(redPin, LOW);
digitalWrite(yelPin, LOW);
Blynk.virtualWrite(VPIN_LED_HIJAU, 1);
Blynk.virtualWrite(VPIN_LED_MERAH, 0);
Blynk.virtualWrite(VPIN_LED_KUNING, 0);
noTone(buzPin);
} else if (temp >= 29 && temp <= 31 && hum >= 61 && hum <= 65) {
digitalWrite(redPin, LOW);
digitalWrite(yelPin, HIGH);
digitalWrite(greenPin, LOW);
Blynk.virtualWrite(VPIN_LED_HIJAU, 0);
Blynk.virtualWrite(VPIN_LED_MERAH, 0);
Blynk.virtualWrite(VPIN_LED_KUNING, 1);
tone(buzPin, 400, 100);
} else if ((temp < 20 || temp > 31) || (hum < 40 || hum > 65)) {
digitalWrite(redPin, HIGH);
digitalWrite(yelPin, LOW);
digitalWrite(greenPin, LOW);
Blynk.virtualWrite(VPIN_LED_HIJAU, 0);
Blynk.virtualWrite(VPIN_LED_MERAH, 1);
Blynk.virtualWrite(VPIN_LED_KUNING, 0);
Blynk.logEvent("warning", String("WARNING! Suhu saat ini: ") + String(temp) + " C");
tone(buzPin, 1000);
}
}
Blynk.run();
delay(1000);
}
BLYNK_WRITE(VPIN_BUZZER_CONTROL) {
int switchState = param.asInt();
manualControl = switchState == 1;
if (manualControl) {
digitalWrite(greenPin, HIGH);
tone(buzPin, 1000);
} else {
digitalWrite(greenPin, LOW);
noTone(buzPin);
}
}