#include <WiFi.h>
#include <ThingSpeak.h>
#include <ESP32Servo.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
unsigned long myChannelNumber = 3277464; // your channel number
const char* myWriteAPIKey = "WDN7J7CUSFAPBIT7"; // your API key
WiFiClient client;
// Pins
#define TRIG 5
#define ECHO 18
#define WET_BTN 12
#define DRY_BTN 14
#define GREEN_LED 25
#define BLUE_LED 26
#define RED_LED 27
#define BUZZER 33
#define SERVO_PIN 19
Servo myServo;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(WET_BTN, INPUT);
pinMode(DRY_BTN, INPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
myServo.attach(SERVO_PIN);
myServo.write(90);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
ThingSpeak.begin(client);
}
void loop() {
// Ultrasonic
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
float distance = duration * 0.034 / 2;
Serial.println(distance);
// Bin Full Check (increase for testing)
if (distance < 200) {
digitalWrite(RED_LED, HIGH);
digitalWrite(BUZZER, HIGH);
} else {
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
}
// Wet Button
if (digitalRead(WET_BTN) == HIGH) {
myServo.write(30);
digitalWrite(BLUE_LED, HIGH);
digitalWrite(GREEN_LED, LOW);
}
// Dry Button
if (digitalRead(DRY_BTN) == HIGH) {
myServo.write(150);
digitalWrite(GREEN_LED, HIGH);
digitalWrite(BLUE_LED, LOW);
}
ThingSpeak.setField(1, distance);
ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
delay(15000);
}