#include <ESP32Servo.h>
#include <WiFi.h>
#include "ThingSpeak.h"
// Pin Definitions
const int pir = 34;
const int buzzer = 15;
const int servoPin = 18;
const int led = 19;
// Wi-Fi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// ThingSpeak settings
unsigned long myChannelNumber = 2629809;
const char* myWriteAPIKey = "8QENKMWPJMMKH1VP";
// Initialize Servo
Servo myServo;
WiFiClient client;
// Timing variables for ThingSpeak
unsigned long lastThingSpeakUpdate = 0;
const unsigned long updateInterval = 15000; // 15 seconds
void setup() {
Serial.begin(115200);
// Initialize Pins
pinMode(pir, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(led, OUTPUT);
// Attach the Servo
myServo.attach(servoPin, 500, 2400);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
// Initialize ThingSpeak
ThingSpeak.begin(client);
}
void moveServo() {
for (int pos = 0; pos <= 180; pos += 1) {
myServo.write(pos);
delay(15);
}
for (int pos = 180; pos >= 0; pos -= 1) {
myServo.write(pos);
delay(15);
}
}
void loop() {
int motionDetected = digitalRead(pir);
int servoPosition = myServo.read(); // Read the current position of the servo
// Move the servo motor
moveServo();
digitalWrite(servoPin, HIGH);
// Timing logic (example)
int time = 10;
if (time == 10) {
tone(buzzer, 10000);
digitalWrite(led, HIGH);
} else {
noTone(buzzer);
digitalWrite(led, LOW);
}
digitalWrite(servoPin, LOW);
// Timing for ThingSpeak updates
unsigned long currentMillis = millis();
if (currentMillis - lastThingSpeakUpdate >= updateInterval) {
lastThingSpeakUpdate = currentMillis;
// Update fields with sensor data
ThingSpeak.setField(1, motionDetected ? 1 : 0); // 1 for Detected, 0 for Not Detected
ThingSpeak.setField(2, digitalRead(led)); // 1 for ON, 0 for OFF
ThingSpeak.setField(3, digitalRead(buzzer) ? 1 : 0); // 1 for ON, 0 for OFF
ThingSpeak.setField(4, servoPosition); // Servo Position
// Send data to ThingSpeak
int response = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (response == 200) {
Serial.println("Data sent to ThingSpeak successfully");
} else {
Serial.print("Problem sending data to ThingSpeak. HTTP error code: ");
Serial.println(response);
}
}
delay(1000);
}