#include <ESP32Servo.h>
#include <WiFi.h>
#include <PubSubClient.h>
const char* mqtt_server = "broker.hivemq.com";
const int server_port = 1883;
const int pirPin = 2;
const int buzzerPin = 5;
const int servoPin = 18;
#define LED 4
WiFiClient espClient;
PubSubClient client(espClient);
int motionDetected = 0;
bool alarmIsOn = false;
bool detectedIntruder = false;
bool doorsClosed=false;
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
void setup() {
Serial.begin(115200);
pinMode(pirPin, INPUT);
pinMode(LED, OUTPUT);
pinMode(buzzerPin, OUTPUT);
servo1.attach(servoPin);
servo2.attach(servoPin);
servo3.attach(servoPin);
servo4.attach(servoPin);
wifi_setup();
client.setServer(mqtt_server, server_port);
client.setCallback(callBack);
if (!client.connected()){
reconnect();
}
}
void wifi_setup(){
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
}
void reconnect(){
while(!client.connected()){
Serial.println("attempting mqtt connection");
if(client.connect("721d8845-111d-47d3-8180-a00f484f1a01")){
Serial.println("connected to mqtt server");
client.subscribe("amongas/gay");
}
else{
delay(1000);
}
}
}
void callBack(char* topic, byte* payload, unsigned int length) {
String message;
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.println(message);
if(message == "on"){
alarmIsOn = true;
}
else{
alarmIsOn = false;
}
}
void loop() {
motionDetected = digitalRead(pirPin);
client.loop();
if(alarmIsOn==true)
{
if(motionDetected == HIGH)
{
detectedIntruder = true;
}
if(detectedIntruder == true)
{
if(doorsClosed==false)
{
for (int pos = 90; pos <= 180; pos += 10)
{
servo1.write(pos);
servo2.write(pos);
servo3.write(pos);
servo4.write(pos);
delay(15);
}
}
doorsClosed=true;
digitalWrite(LED, HIGH);
tone(buzzerPin, 3000, 50);
tone(buzzerPin, 31, 100);
delay(200);
tone(buzzerPin, 31, 100);
delay(200);
tone(buzzerPin, 3000, 50);
tone(buzzerPin, 31, 100);
delay(200);
tone(buzzerPin, 31, 100);
digitalWrite(LED, LOW);
delay(200);
tone(buzzerPin, 150, 100);
delay(170);
tone(buzzerPin, 11, 150);
delay(170);
tone(buzzerPin, 75, 150);
delay(170);
tone(buzzerPin, 31, 100);
}
}
else
{
detectedIntruder=false;
if(motionDetected == HIGH) digitalWrite(LED, HIGH);
else digitalWrite(LED, LOW);
if(doorsClosed==true)
{
for (int pos = 180; pos >= 90; pos -= 10)
{
servo1.write(pos);
servo2.write(pos);
servo3.write(pos);
servo4.write(pos);
delay(15);
}
}
doorsClosed=false;
}
}