#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6WR_XIdcu"
#define BLYNK_TEMPLATE_NAME "Smart Mushroom Farming"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// Isi dengan auth token dari Blynk
char auth[] = "cLmnX0Jdd14IMfOQUDQpyAtmMpeMZaNL";
// Isi dengan credentials WiFi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Pin definitions
#define DHT_PIN 4
#define LDR_PIN 36
#define FAN_PIN 5
#define MIST_PIN 18
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
// Variables
float temperature = 0;
float humidity = 0;
int lightLevel = 0;
// Thresholds untuk lingkungan jamur
float tempThresholdHigh = 24.0; // Suhu maksimum
float tempThresholdLow = 18.0; // Suhu minimum
float humThresholdHigh = 90.0; // Kelembaban maksimum
float humThresholdLow = 70.0; // Kelembaban minimum
int lightThreshold = 20; // Ambang batas cahaya
BlynkTimer timer;
void readSensors() {
// Baca suhu dan kelembaban
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Baca tingkat cahaya
lightLevel = analogRead(LDR_PIN);
lightLevel = map(lightLevel, 4095, 0, 0, 100); // Konversi ke persentase
// Kirim data ke Blynk
Blynk.virtualWrite(V0, temperature);
Blynk.virtualWrite(V1, humidity);
Blynk.virtualWrite(V2, lightLevel);
// Kontrol otomatis kipas berdasarkan suhu
if (temperature > tempThresholdHigh) {
digitalWrite(FAN_PIN, HIGH); // Nyalakan kipas
Blynk.virtualWrite(V3, 1);
Blynk.logEvent("high_temp", "Suhu tinggi, kipas dinyalakan");
} else if (temperature < tempThresholdLow) {
digitalWrite(FAN_PIN, LOW); // Matikan kipas
Blynk.virtualWrite(V3, 0);
}
// Kontrol otomatis penyemprot berdasarkan kelembaban
if (humidity < humThresholdLow) {
digitalWrite(MIST_PIN, HIGH); // Nyalakan penyemprot
Blynk.virtualWrite(V4, 1);
Blynk.logEvent("low_humidity", "Kelembaban rendah, penyemprot dinyalakan");
} else if (humidity > humThresholdHigh) {
digitalWrite(MIST_PIN, LOW); // Matikan penyemprot
Blynk.virtualWrite(V4, 0);
}
// Notifikasi jika cahaya terlalu terang
if (lightLevel > lightThreshold) {
Blynk.logEvent("high_light", "Cahaya terlalu terang untuk jamur");
}
}
// Kontrol manual kipas dari Blynk
BLYNK_WRITE(V3) {
int pinValue = param.asInt();
digitalWrite(FAN_PIN, pinValue);
}
// Kontrol manual penyemprot dari Blynk
BLYNK_WRITE(V4) {
int pinValue = param.asInt();
digitalWrite(MIST_PIN, pinValue);
}
// Widget untuk mengubah threshold
BLYNK_WRITE(V5) {
tempThresholdHigh = param.asFloat();
}
BLYNK_WRITE(V6) {
tempThresholdLow = param.asFloat();
}
BLYNK_WRITE(V7) {
humThresholdHigh = param.asFloat();
}
BLYNK_WRITE(V8) {
humThresholdLow = param.asFloat();
}
void setup() {
Serial.begin(115200);
// Inisialisasi pin
pinMode(FAN_PIN, OUTPUT);
pinMode(MIST_PIN, OUTPUT);
digitalWrite(FAN_PIN, LOW);
digitalWrite(MIST_PIN, LOW);
// Inisialisasi sensor DHT
dht.begin();
// Koneksi ke WiFi dan Blynk
Blynk.begin(auth, ssid, pass);
// Setup timer untuk membaca sensor setiap 2 detik
timer.setInterval(2000L, readSensors);
}
void loop() {
Blynk.run();
timer.run();
}