#include <WiFi.h>
#include <HTTPClient.h>
#include <DHTesp.h>
#include <ESP32Servo.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* webAppUrl = "https://script.google.com/macros/s/AKfycbwqvOiZ1S40Vvob1O0s_AAAgp66fy8UeG0WmhDSyAqeMn-9Yp9EIpjD8LVwWRdHY94n/exec";
const int pinDHT = 25; // DHT sensor pin
const int pinEcho = 2; // Ultrasonic sensor Echo pin
const int pinTrigger = 15; // Ultrasonic sensor Trigger pin
const int ledMerah = 13; // Red LED pin
const int ledKuning = 12; // Yellow LED pin
const int ledHijau = 14; // Green LED pin
const int ledPin = 18; // Additional LED pin (if needed)
const int inputPin = 19; // Motion sensor input pin
const int servoPin = 5; // Servo motor pin
DHTesp dhtSensor;
Servo myServo; // Create a Servo object
void sendSensor() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
// Control LEDs and servo based on sensor data
if (data.temperature < 32 && data.humidity < 65) {
digitalWrite(ledHijau, HIGH);
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, LOW);
myServo.write(0); // Move servo to 0 degrees
} else if (data.temperature > 32 && data.humidity < 65) {
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
digitalWrite(ledMerah, LOW);
myServo.write(90); // Move servo to 90 degrees
} else if (data.temperature < 32 && data.humidity > 65) {
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, HIGH);
digitalWrite(ledMerah, LOW);
myServo.write(90); // Move servo to 90 degrees
} else {
digitalWrite(ledHijau, LOW);
digitalWrite(ledKuning, LOW);
digitalWrite(ledMerah, HIGH);
myServo.write(180); // Move servo to 180 degrees
}
// Send sensor data to Google Sheets
sendDataToGoogleSheets(data.temperature, data.humidity, -1); // -1 indicates no water level data
}
float readUltrasonic() {
digitalWrite(pinTrigger, LOW);
delayMicroseconds(2);
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
int duration = pulseIn(pinEcho, HIGH);
float dist_cm = duration * 0.034 / 2;
return dist_cm;
}
void sendDataToGoogleSheets(float temperature, float humidity, float waterLevel) {
HTTPClient http;
String serverPath = String(webAppUrl) + "?temperature=" + String(temperature) +
"&humidity=" + String(humidity) +
"&waterLevel=" + String(waterLevel);
Serial.print("Connecting to server: ");
Serial.println(serverPath);
if (http.begin(serverPath)) {
int httpCode = http.GET();
if (httpCode > 0) {
Serial.print("Server response code: ");
Serial.println(httpCode);
} else {
Serial.print("HTTP GET request failed with error code: ");
Serial.println(httpCode);
}
http.end();
} else {
Serial.println("Unable to connect to the server");
}
}
void setup() {
Serial.begin(115200);
delay(1000); // Give some time to initialize
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("WiFi connected.");
dhtSensor.setup(pinDHT, DHTesp::DHT22);
pinMode(pinEcho, INPUT);
pinMode(pinTrigger, OUTPUT);
pinMode(ledMerah, OUTPUT);
pinMode(ledKuning, OUTPUT);
pinMode(ledHijau, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
myServo.attach(servoPin); // Attach the servo to the specified pin
// Set interval for sensor reading and data sending
// Note: This example does not use a timer for continuous execution.
// You may add a delay or timer for periodic execution if needed.
sendSensor();
}
void loop() {
// Since this example does not require continuous execution,
// loop() is not actively used for repeated tasks.
}