#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#include <ESP32Servo.h>
#include "ThingSpeak.h"
// -------- WiFi --------
const char* ssid = "YOUR_SSID";
const char* passwordWiFi = "YOUR_PASSWORD";
// -------- ThingSpeak --------
WiFiClient client;
unsigned long channelNumber = YOUR_CHANNEL_ID;
const char * writeAPIKey = "YOUR_API_KEY";
// -------- LCD --------
LiquidCrystal_I2C lcd(0x27, 16, 2);
// -------- Ultrasonic --------
#define TRIG 5
#define ECHO 18
// -------- Servo --------
Servo myServo;
#define SERVO_PIN 19
// -------- Buzzer --------
#define BUZZER 4
// -------- Keypad --------
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {13, 12, 14, 27};
byte colPins[COLS] = {26, 25, 33, 32};
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// -------- Password --------
String correctPassword = "1234";
String inputPassword = "";
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(BUZZER, OUTPUT);
myServo.attach(SERVO_PIN);
myServo.write(0);
lcd.init();
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("System Ready");
// WiFi connect
WiFi.begin(ssid, passwordWiFi);
while(WiFi.status() != WL_CONNECTED){
delay(500);
Serial.print(".");
}
Serial.println("WiFi Connected");
ThingSpeak.begin(client);
}
long getDistance() {
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
long duration = pulseIn(ECHO, HIGH);
long distance = duration * 0.034 / 2;
return distance;
}
void loop() {
long distance = getDistance();
Serial.println(distance);
lcd.setCursor(0,1);
lcd.print("Dist:");
lcd.print(distance);
lcd.print(" cm ");
if(distance < 20) {
lcd.clear();
lcd.print("Enter Password:");
inputPassword = "";
while(inputPassword.length() < 4) {
char key = keypad.getKey();
if(key) {
inputPassword += key;
lcd.setCursor(0,1);
lcd.print(inputPassword);
}
}
if(inputPassword == correctPassword) {
lcd.clear();
lcd.print("Access Granted");
digitalWrite(BUZZER, LOW);
myServo.write(90); // Open
delay(3000);
myServo.write(0); // Close
ThingSpeak.writeField(channelNumber, 1, distance, writeAPIKey);
ThingSpeak.writeField(channelNumber, 2, 1, writeAPIKey); // success
} else {
lcd.clear();
lcd.print("Wrong Password");
digitalWrite(BUZZER, HIGH);
delay(2000);
digitalWrite(BUZZER, LOW);
ThingSpeak.writeField(channelNumber, 2, 0, writeAPIKey); // fail
}
delay(2000);
lcd.clear();
}
delay(1000);
}