/* * ESP32 + MFRC522 (RFID) + Adafruit Fingerprint + Servo (ESP32Servo) + Buzzer * ระบบควบคุมการเข้า-ออกด้วยการยืนยันตัวตนแบบหลายปัจจัย */ #include <SPI.h> #include <MFRC522.h> #include <Adafruit_Fingerprint.h> #include <ESP32Servo.h> // -------------------- พินและพอร์ต -------------------- // MFRC522 (RFID) #define SS_PIN 5 #define RST_PIN 27 // Fingerprint #define FP_RX 16 // RX2 #define FP_TX 17 // TX2 // อุปกรณ์ขับเคลื่อน #define SERVO_PIN 13 #define BUZZER_PIN 12 // -------------------- อ็อบเจ็กต์ -------------------- MFRC522 mfrc522(SS_PIN, RST_PIN); HardwareSerial FINGERPRINT_SERIAL(2); // ใช้ UART2 Adafruit_Fingerprint finger = Adafruit_Fingerprint(&FINGERPRINT_SERIAL); Servo doorLock; // -------------------- การอนุญาต -------------------- byte knownCardId[4] = {0x4E, 0x31, 0xA9, 0x04}; int knownFingerId = 1; // -------------------- โปรโตไทป์ฟังก์ชัน -------------------- bool checkCard(); bool checkFingerprint(); void openDoor(); void closeDoor(); void buzzSuccess(); void buzzFail(); void setup() { Serial.begin(115200); delay(100); // --- RFID --- SPI.begin(); mfrc522.PCD_Init(); Serial.println("RFID Reader Initialized"); // --- Fingerprint --- FINGERPRINT_SERIAL.begin(57600, SERIAL_8N1, FP_RX, FP_TX); finger.begin(57600); if (finger.verifyPassword()) { Serial.println("Fingerprint sensor found and OK!"); } else { Serial.println("Error: Did not find fingerprint sensor or incorrect password."); } // --- Servo --- doorLock.attach(SERVO_PIN); closeDoor(); // --- Buzzer --- pinMode(BUZZER_PIN, OUTPUT); digitalWrite(BUZZER_PIN, LOW); Serial.println("System Ready."); } void loop() { // ตรวจสอบการ์ดก่อน if (checkCard()) { buzzSuccess(); openDoor(); delay(5000); closeDoor(); } // ถ้าไม่พบการ์ด ให้ลองสแกนนิ้ว if (checkFingerprint()) { buzzSuccess(); openDoor(); delay(5000); closeDoor(); } } // -------------------- ฟังก์ชันตรวจคีย์การ์ด -------------------- bool checkCard() { if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) { return false; } Serial.print("Card UID:"); for (byte i = 0; i < mfrc522.uid.size; i++) { Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(mfrc522.uid.uidByte[i], HEX); } Serial.println(); bool granted = false; if (mfrc522.uid.size >= 4) { if (memcmp(mfrc522.uid.uidByte, knownCardId, 4) == 0) { granted = true; } } if (granted) { Serial.println("Access Granted (Card)!"); } else { Serial.println("Access Denied (Card)!"); buzzFail(); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); return granted; } // -------------------- ฟังก์ชันตรวจลายนิ้วมือ -------------------- bool checkFingerprint() { Serial.println("Waiting for valid finger..."); int p = finger.getImage(); if (p != FINGERPRINT_OK) return false; p = finger.image2Tz(); if (p != FINGERPRINT_OK) return false; p = finger.fingerSearch(); if (p != FINGERPRINT_OK) { Serial.println("No match found or sensor busy."); buzzFail(); return false; } if (finger.fingerID == knownFingerId) { Serial.print("Access Granted (Fingerprint)! ID: "); Serial.println(finger.fingerID); return true; } else { Serial.print("Access Denied (Fingerprint)! Found ID: "); Serial.println(finger.fingerID); buzzFail(); return false; } } // -------------------- ควบคุมประตู -------------------- void openDoor() { Serial.println("Door Opening..."); doorLock.write(90); } void closeDoor() { Serial.println("Door Closing..."); doorLock.write(0); } // -------------------- Buzzer -------------------- void buzzSuccess() { digitalWrite(BUZZER_PIN, HIGH); delay(150); digitalWrite(BUZZER_PIN, LOW); } void buzzFail() { for (int i = 0; i < 2; i++) { digitalWrite(BUZZER_PIN, HIGH); delay(200); digitalWrite(BUZZER_PIN, LOW); delay(200); } }
Standard input is empty
/*
* ESP32 + MFRC522 (RFID) + Adafruit Fingerprint + Servo (ESP32Servo) + Buzzer
* ระบบควบคุมการเข้า-ออกด้วยการยืนยันตัวตนแบบหลายปัจจัย
*/
#include <SPI.h>
#include <MFRC522.h>
#include <Adafruit_Fingerprint.h>
#include <ESP32Servo.h>
// -------------------- พินและพอร์ต --------------------
// MFRC522 (RFID)
#define SS_PIN 5
#define RST_PIN 27
// Fingerprint
#define FP_RX 16 // RX2
#define FP_TX 17 // TX2
// อุปกรณ์ขับเคลื่อน
#define SERVO_PIN 13
#define BUZZER_PIN 12
// -------------------- อ็อบเจ็กต์ --------------------
MFRC522 mfrc522(SS_PIN, RST_PIN);
HardwareSerial FINGERPRINT_SERIAL(2); // ใช้ UART2
Adafruit_Fingerprint finger = Adafruit_Fingerprint(&FINGERPRINT_SERIAL);
Servo doorLock;
// -------------------- การอนุญาต --------------------
byte knownCardId[4] = {0x4E, 0x31, 0xA9, 0x04};
int knownFingerId = 1;
// -------------------- โปรโตไทป์ฟังก์ชัน --------------------
bool checkCard();
bool checkFingerprint();
void openDoor();
void closeDoor();
void buzzSuccess();
void buzzFail();
void setup() {
Serial.begin(115200);
delay(100);
// --- RFID ---
SPI.begin();
mfrc522.PCD_Init();
Serial.println("RFID Reader Initialized");
// --- Fingerprint ---
FINGERPRINT_SERIAL.begin(57600, SERIAL_8N1, FP_RX, FP_TX);
finger.begin(57600);
if (finger.verifyPassword()) {
Serial.println("Fingerprint sensor found and OK!");
} else {
Serial.println("Error: Did not find fingerprint sensor or incorrect password.");
}
// --- Servo ---
doorLock.attach(SERVO_PIN);
closeDoor();
// --- Buzzer ---
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
Serial.println("System Ready.");
}
void loop() {
// ตรวจสอบการ์ดก่อน
if (checkCard()) {
buzzSuccess();
openDoor();
delay(5000);
closeDoor();
}
// ถ้าไม่พบการ์ด ให้ลองสแกนนิ้ว
if (checkFingerprint()) {
buzzSuccess();
openDoor();
delay(5000);
closeDoor();
}
}
// -------------------- ฟังก์ชันตรวจคีย์การ์ด --------------------
bool checkCard() {
if (!mfrc522.PICC_IsNewCardPresent() || !mfrc522.PICC_ReadCardSerial()) {
return false;
}
Serial.print("Card UID:");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
}
Serial.println();
bool granted = false;
if (mfrc522.uid.size >= 4) {
if (memcmp(mfrc522.uid.uidByte, knownCardId, 4) == 0) {
granted = true;
}
}
if (granted) {
Serial.println("Access Granted (Card)!");
} else {
Serial.println("Access Denied (Card)!");
buzzFail();
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
return granted;
}
// -------------------- ฟังก์ชันตรวจลายนิ้วมือ --------------------
bool checkFingerprint() {
Serial.println("Waiting for valid finger...");
int p = finger.getImage();
if (p != FINGERPRINT_OK) return false;
p = finger.image2Tz();
if (p != FINGERPRINT_OK) return false;
p = finger.fingerSearch();
if (p != FINGERPRINT_OK) {
Serial.println("No match found or sensor busy.");
buzzFail();
return false;
}
if (finger.fingerID == knownFingerId) {
Serial.print("Access Granted (Fingerprint)! ID: ");
Serial.println(finger.fingerID);
return true;
} else {
Serial.print("Access Denied (Fingerprint)! Found ID: ");
Serial.println(finger.fingerID);
buzzFail();
return false;
}
}
// -------------------- ควบคุมประตู --------------------
void openDoor() {
Serial.println("Door Opening...");
doorLock.write(90);
}
void closeDoor() {
Serial.println("Door Closing...");
doorLock.write(0);
}
// -------------------- Buzzer --------------------
void buzzSuccess() {
digitalWrite(BUZZER_PIN, HIGH);
delay(150);
digitalWrite(BUZZER_PIN, LOW);
}
void buzzFail() {
for (int i = 0; i < 2; i++) {
digitalWrite(BUZZER_PIN, HIGH);
delay(200);
digitalWrite(BUZZER_PIN, LOW);
delay(200);
}
}