#include <WiFi.h>
#include <DHT.h>
#include <ESP32Servo.h>
#include <ThingSpeak.h> // ThingSpeak library
// Define pins for sensors and devices
#define DHTPIN 18 // DHT22 connected to D2
#define DHTTYPE DHT22 // DHT22 sensor
#define TRIGPIN 21 // Ultrasonic 1 Trig pin
#define ECHOPIN 4 // Ultrasonic 1 Echo pin
#define TRIGPIN2 22 // Ultrasonic 2 Trig pin
#define ECHOPIN2 23 // Ultrasonic 2 Echo pin
#define SERVOPIN 17 // Servo motor pin
#define LED PIN 12 // Buzzer pin
// WiFi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// ThingSpeak credentials
unsigned long channelID = 2768877; // Replace with your ThingSpeak Channel ID
const char* writeAPIKey = "ZZUQFE096G3WG6HO"; // Replace with your ThingSpeak Write API Key
WiFiClient client;
// Initialize DHT sensor and servo
DHT dht(DHTPIN, DHTTYPE);
Servo myServo;
// Variables for data storage
float temperature, humidity, distance1, distance2;
int motionDetected;
void setup() {
Serial.begin(9600);
// Initialize DHT sensor
dht.begin();
// Attach the servo motor
myServo.attach(SERVOPIN);
// Initialize pins for ultrasonic sensors
pinMode(TRIGPIN, OUTPUT);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN2, OUTPUT);
pinMode(ECHOPIN2, INPUT);
// Connect to WiFi
connectWiFi();
// Initialize ThingSpeak
ThingSpeak.begin(client);
Serial.println("System Initialized!");
}
void connectWiFi() {
Serial.print("Connecting to WiFi...");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000); // Wait for 1 second
Serial.print(".");
}
Serial.println("\nWiFi connected!");
}
float measureDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
return (duration * 0.034) / 2; // Convert to cm
}
void loop() {
Serial.println("Reading sensors...");
// Read DHT22 Temperature and Humidity
temperature = dht.readTemperature();
humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
temperature = 0.0;
humidity = 0.0;
} else {
Serial.print("Temperature: "); Serial.print(temperature); Serial.println(" °C");
Serial.print("Humidity: "); Serial.print(humidity); Serial.println(" %");
}
// Measure distances with ultrasonic sensors
distance1 = measureDistance(TRIGPIN, ECHOPIN);
Serial.print("Distance 1: "); Serial.print(distance1); Serial.println(" cm");
distance2 = measureDistance(TRIGPIN2, ECHOPIN2);
Serial.print("Distance 2: "); Serial.print(distance2); Serial.println(" cm");
// Check motion and activate buzzer if detected
if (distance1 < 300.0) { // Example motion detection condition
motionDetected = 1;
Serial.println("Motion Detected!");
pinMode(12,HIGH); // Activate buzzer
} else {
motionDetected = 0;
Serial.println("No Motion Detected.");
pinMode(12,LOW);
// Deactivate buzzer
}
// Control servo based on distance2
if (distance2 < 200.0) { // Example condition
Serial.println("Activating Servo...");
myServo.write(90); // Rotate servo to 90 degrees
} else {
Serial.println("Servo at Rest...");
myServo.write(0); // Reset servo to 0 degrees
}
// Send data to ThingSpeak
sendDataToThingSpeak();
Serial.println("Waiting for next cycle...\n");
delay(2000); // Wait for 2 seconds before repeating loop
}
void sendDataToThingSpeak() {
ThingSpeak.setField(1, temperature);
ThingSpeak.setField(2, humidity);
ThingSpeak.setField(3, distance1);
ThingSpeak.setField(4, distance2);
ThingSpeak.setField(5, motionDetected);
int responseCode = ThingSpeak.writeFields(channelID, writeAPIKey);
if (responseCode == 200) {
Serial.println("Data sent to ThingSpeak successfully!");
} else {
Serial.print("Failed to send data to ThingSpeak. Error code: ");
Serial.println(responseCode);
}
}