#include <DHTesp.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <ThingSpeak.h>
WiFiClient client;
long myChannelNumber = 2645188;
const char * myWriteAPIKey = "AUEXZ6VRS8GKARG8";
int statusCode;
float d;
#define SERVO_PIN 14
#define PIR_PIN 25
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
DHTesp srk;
TempAndHumidity data;
bool motionDetected = false;
bool doorLocked = true;
Servo doorLock;
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
void setup() {
ThingSpeak.begin(client);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
srk.setup(18, DHTesp::DHT22);
Serial.println("Hello, ESP32!");
pinMode(PIR_PIN, INPUT);
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
doorLock.attach(SERVO_PIN);
doorLock.write(0);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Smart Door Lock");
}
void loop() {
data = srk.getTempAndHumidity();
if(WiFi.status() != WL_CONNECTED)
{
Serial.print("Attempting to connect");
while(WiFi.status() != WL_CONNECTED)
{
WiFi.begin(ssid, pass);
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
Serial.println("Humi :" + String(data.humidity));
Serial.println(("Temp :" + String(data.humidity)));
Serial.print("------------");
delay(1000);
motionDetected = digitalRead(PIR_PIN);
if (motionDetected) {
if(doorLocked){
unlockDoor();
}else{
lockDoor();
}
}
delay(200);
ThingSpeak.setField(1, data.temperature);
ThingSpeak.setField(2, data.humidity);
statusCode = ThingSpeak.writeFields(myChannelNumber,myWriteAPIKey);
if(statusCode == 200) { //successful writing code
Serial.println("Channel update successful.");
}
else {
Serial.println("Problem Writing data. HTTP error code :" +
String(statusCode));
}
}
void unlockDoor() {
doorLocked = false;
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Motion Detected");
LCD.setCursor(0, 1);
LCD.print("Door Unlocked");
doorLock.write(90);
digitalWrite(12, HIGH);
delay(2000);
digitalWrite(12, LOW);
delay(5000);
doorLocked = true;
lockDoor();
}
void lockDoor() {
doorLock.write(0);
LCD.clear();
LCD.setCursor(0, 0);
LCD.print("Door Locked");
digitalWrite(13, HIGH);
delay(2000);
digitalWrite(13, LOW);
}