#define BLYNK_TEMPLATE_ID "TMPL6_QPmj3Mv"
#define BLYNK_TEMPLATE_NAME "BSFL"
#define BLYNK_AUTH_TOKEN "kjLF5Nd9hOTRZGay8x-CmJ_PrUB7jyBo"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClient.h>
#include <Adafruit_Sensor.h>
#include <ESP32Servo.h>
#include "DHTesp.h"
DHTesp dhtSensor;
#define DHTPIN 25
#define RELAY_FAN 5 //13
#define RELAY_LED 26
#define RELAY_HEATER 21 //27
const int DHT_PIN = 15;
#define VIRTUAL_PIN_Temperature V0
#define VIRTUAL_PIN_Humidity V1
#define VIRTUAL_PIN_Substrate_Sensor_1 V2
#define VIRTUAL_PIN_Substrate_Sensor_2 V3
#define VIRTUAL_PIN_Substrate_Sensor_3 V4
#define VIRTUAL_PIN_Sunlight_Sensor V5
#define VIRTUAL_PIN_Fan V6
#define VIRTUAL_PIN_Heater V7
#define VIRTUAL_PIN_Automated_Ventilation V8
#define VIRTUAL_PIN_Automated_Feeder_1 V9
#define VIRTUAL_PIN_Automated_Feeder_2 V10
#define VIRTUAL_PIN_Automated_Feeder_3 V11
#define VIRTUAL_PIN_Automated_ManualControl V20
char auth[] = BLYNK_AUTH_TOKEN ; //Auth Token
char ssid[] = "Wokwi-GUEST"; //name
char pass[] = ""; //password
BlynkTimer timer;
int switchState = LOW;
int switchFeeder_1;
// int switchFeeder_2;
// int switchFeeder_3;
// int switchFAN;
// int switchHEATER;
// int switchVentilation;
BLYNK_CONNECTED() {
Blynk.syncVirtual(VIRTUAL_PIN_Temperature);
Blynk.syncVirtual(VIRTUAL_PIN_Humidity);
Blynk.syncVirtual(VIRTUAL_PIN_Substrate_Sensor_1);
Blynk.syncVirtual(VIRTUAL_PIN_Substrate_Sensor_2);
Blynk.syncVirtual(VIRTUAL_PIN_Substrate_Sensor_3);
Blynk.syncVirtual(VIRTUAL_PIN_Sunlight_Sensor);
Blynk.syncVirtual(VIRTUAL_PIN_Fan);
Blynk.syncVirtual(VIRTUAL_PIN_Heater);
Blynk.syncVirtual(VIRTUAL_PIN_Automated_Ventilation);
Blynk.syncVirtual(VIRTUAL_PIN_Automated_Feeder_1);
Blynk.syncVirtual(VIRTUAL_PIN_Automated_Feeder_2);
Blynk.syncVirtual(VIRTUAL_PIN_Automated_Feeder_3);
Blynk.syncVirtual(VIRTUAL_PIN_Automated_ManualControl);
}
static const int servoPin1 = 14;
// static const int servoPin2 = 12;
// static const int servoPin3 = 23;
// static const int servoPin4 = 22;
Servo servo1;
// Servo servo2;
// Servo servo3;
// Servo servo4;
static const int servoPin5 = 4; //2
// static const int servoPin6 = 15;
// static const int servoPin7 = 18;
Servo servo5;
// Servo servo6;
// Servo servo7;
const int trigPin1 = 12; //16
const int echoPin1 = 13; //4
// const int trigPin2 = 17;
// const int echoPin2 = 5;
// const int trigPin3 = 33;
// const int echoPin3 = 32;
long duration1, duration2, duration3;
int distance1, distance2, distance3;
void setup() {
Serial.begin(9600);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
// pinMode(trigPin2, OUTPUT);
// pinMode(echoPin2, INPUT);
// pinMode(trigPin3, OUTPUT);
// pinMode(echoPin3, INPUT);
servo1.setPeriodHertz(50);
// servo2.setPeriodHertz(50);
// servo3.setPeriodHertz(50);
// servo4.setPeriodHertz(50);
servo5.setPeriodHertz(50);
// servo6.setPeriodHertz(50);
// servo7.setPeriodHertz(50);
servo1.attach(servoPin1, 500, 2400);
// servo2.attach(servoPin2, 500, 2400);
// servo3.attach(servoPin3, 500, 2400);
// servo4.attach(servoPin4, 500, 2400);
servo5.attach(servoPin5, 500, 2400);
// servo6.attach(servoPin6, 500, 2400);
// servo7.attach(servoPin7, 500, 2400);
servo1.write(30);
// servo2.write(30);
// servo3.write(30);
// servo4.write(30);
servo5.write(30);
// servo6.write(30);
// servo7.write(30);
pinMode(RELAY_FAN, OUTPUT);
pinMode(RELAY_LED, OUTPUT);
pinMode(RELAY_HEATER, OUTPUT);
Blynk.begin(auth, ssid, pass); //memulai Blynk
WiFi.begin(ssid, pass);
timer.setInterval(2000L, checkBlynkStatus); // check if Blynk server is connected every 2 seconds
Blynk.config(auth);
delay(5000);
}
void checkBlynkStatus() { // called every 3 seconds by SimpleTimer
bool isconnected = Blynk.connected();
if (isconnected == false) {
Serial.println("Blynk Not Connected");
}
if (isconnected == true) {
Serial.println("Blynk Connected");
}
}
// void loop() {
// Blynk.run(); //menjalankan blynk
// timer.run(); //menjalankan timer
// ultrasonic1();
// ultrasonic2();
// ultrasonic3();
// Temperature();
// Humidity();
// }
BLYNK_WRITE(VIRTUAL_PIN_Automated_ManualControl){
int switchState = param.asInt();
if (switchState == LOW) {
ultrasonic1();
// ultrasonic2();
// ultrasonic3();
Temperature();
Humidity();
delay(1000);
}
if (switchState == HIGH){
manual_ultrasonic1();
}
}
// BLYNK_WRITE(VIRTUAL_PIN_FAN){
// int switchFAN = param.asInt();
// }
// BLYNK_WRITE(VIRTUAL_PIN_HEATER){
// int switchHEATER = param.asInt();
// }
// BLYNK_WRITE(VIRTUAL_PIN_Automated_Ventilation){
// int switchVentilation = param.asInt();
// }
BLYNK_WRITE(VIRTUAL_PIN_Automated_Feeder_1){
int switchFeeder_1 = param.asInt();
}
void ultrasonic1(){
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;
Serial.print("Distance 1: ");
Serial.println(distance1);
Blynk.virtualWrite(VIRTUAL_PIN_Substrate_Sensor_1, (String(distance1) + " cm"));
if (distance1 > 30) {
servo1.write(180);
Blynk.virtualWrite(VIRTUAL_PIN_Automated_Feeder_1, HIGH);
delay(1000);
}
else {
servo1.write(0);
Blynk.virtualWrite(VIRTUAL_PIN_Automated_Feeder_1, LOW);
delay(1000);
}
}
// void ultrasonic2(){
// digitalWrite(trigPin2, LOW);
// delayMicroseconds(2);
// digitalWrite(trigPin2, HIGH);
// delayMicroseconds(10);
// digitalWrite(trigPin2, LOW);
// duration2 = pulseIn(echoPin2, HIGH);
// distance2 = duration2 * 0.034 / 2;
// Serial.print("Distance 2: ");
// Serial.println(distance2);
// Blynk.virtualWrite(VIRTUAL_PIN_Substrate_Sensor_2, (String(distance2) + " cm"));
// if (distance2 > 30) {
// servo6.write(90);
// delay(10);
// } else {
// servo6.write(120);
// delay(10);
// }
// }
// void ultrasonic3(){
// digitalWrite(trigPin3, LOW);
// delayMicroseconds(2);
// digitalWrite(trigPin3, HIGH);
// delayMicroseconds(10);
// digitalWrite(trigPin3, LOW);
// duration2 = pulseIn(echoPin3, HIGH);
// distance2 = duration2 * 0.034 / 2;
// Serial.print("Distance 3: ");
// Serial.println(distance3);
// Blynk.virtualWrite(VIRTUAL_PIN_Substrate_Sensor_3, (String(distance3) + " cm"));
// if (distance3 > 30) {
// servo7.write(90);
// delay(10);
// } else {
// servo7.write(120);
// delay(10);
// }
// }
void Temperature(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Blynk.virtualWrite(VIRTUAL_PIN_Temperature, data.temperature);
if(data.temperature > 30) {
Blynk.virtualWrite(VIRTUAL_PIN_Fan, HIGH);
Blynk.virtualWrite(VIRTUAL_PIN_Heater, LOW);
digitalWrite(RELAY_FAN, HIGH);
digitalWrite(RELAY_HEATER, LOW);
}
if(data.temperature < 30) {
Blynk.virtualWrite(VIRTUAL_PIN_Fan, LOW);
Blynk.virtualWrite(VIRTUAL_PIN_Heater, HIGH);
digitalWrite(RELAY_FAN, LOW);
digitalWrite(RELAY_HEATER, HIGH);
delay(1000);
}
}
void Humidity() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Blynk.virtualWrite(VIRTUAL_PIN_Humidity, data.humidity);
if(data.humidity > 60) {
Blynk.virtualWrite(VIRTUAL_PIN_Automated_Ventilation, HIGH);
servo5.write(180);
}else if(data.humidity < 65) {
Blynk.virtualWrite(VIRTUAL_PIN_Automated_Ventilation, LOW);
servo5.write(0);
}
}
void manual_ultrasonic1(){
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = duration1 * 0.034 / 2;
Serial.print("Distance 1: ");
Serial.println(distance1);
Blynk.virtualWrite(VIRTUAL_PIN_Substrate_Sensor_1, (String(distance1) + " cm"));
if (switchFeeder_1 == HIGH){
servo1.write(180);
delay(1000);
}
if (switchFeeder_1 == LOW) {
servo1.write(0);
delay(1000);
}
}
void loop() {
Blynk.run(); //menjalankan blynk
timer.run(); //menjalankan timer
ultrasonic1();
//manual_ultrasonic1();
}