#define BLYNK_TEMPLATE_ID "TMPL3Onf5eXZx"
#define BLYNK_TEMPLATE_NAME "smart lock"
#define BLYNK_AUTH_TOKEN "OfJ6zoONxPaBmJpew4d0tfSEdzFhP5Ux"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <HTTPClient.h>
#include <ThingSpeak.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
#define RELAY_PIN 4 // Connected to LED
char auth[] = BLYNK_AUTH_TOKEN;
BlynkTimer timer;
unsigned long channelID = 2869806;
const char* writeAPIKey = "6Y3JTFY09CMPEMNC";
WiFiClient client;
bool doorLock = false;
unsigned long unlockTime = 0;
bool isUnlocked = false;
void sendDataToThingSpeak(bool lockStatus) {
if (WiFi.status() == WL_CONNECTED) {
ThingSpeak.setField(1, lockStatus);
if (ThingSpeak.writeFields(channelID, writeAPIKey) == 200) {
Serial.println("Channel update successful.");
} else {
Serial.println("Error sending data");
}
} else {
Serial.println("WiFi not connected. Data not sent.");
}
}
void reconnectWiFi() {
if (WiFi.status() != WL_CONNECTED) {
Serial.println("Reconnecting to WiFi...");
WiFi.disconnect();
WiFi.reconnect();
}
}
BLYNK_WRITE(V0) {
if (param.asInt() == 1 && !isUnlocked) {
digitalWrite(RELAY_PIN, HIGH);
Serial.println("Door Unlocked");
sendDataToThingSpeak(true);
unlockTime = millis();
isUnlocked = true;
}
}
void checkLockTimeout() {
if (isUnlocked && millis() - unlockTime >= 20000) {
digitalWrite(RELAY_PIN, LOW);
Serial.println("Door Locked");
sendDataToThingSpeak(false);
Blynk.virtualWrite(V0, 0);
isUnlocked = false;
}
}
void setup() {
Serial.begin(115200);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
WiFi.begin(ssid, pass);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("\nConnected to WiFi");
ThingSpeak.begin(client);
Blynk.begin(auth, ssid, pass);
timer.setInterval(10000L, reconnectWiFi);
}
void loop() {
Blynk.run();
timer.run();
checkLockTimeout();
}