ESP32 RFID Khóa Điện Từ
Trong hướng dẫn này, chúng ta sẽ học cách tạo hệ thống khóa cửa dựa trên RFID bằng cách sử dụng ESP32, RC522 RFID reader và khóa điện từ.
| 1 | × | mô-đun phát triển ESP-WROOM-32 | | |
| 1 | × | Alternatively, ESP32 Uno-form board | | |
| 1 | × | Alternatively, ESP32 S3 Uno-form board | | |
| 1 | × | Cáp USB Type-C | | |
| 1 | × | RFID/NFC RC522 Kit (reader + tags) | | |
| 1 | × | RFID Key Fob | | |
| 1 | × | RFID Card | | |
| 1 | × | Khóa Điện Từ | | |
| 1 | × | Relay | | |
| 1 | × | Adapter Nguồn 12V | | |
| 1 | × | DC Power Jack | | |
| 1 | × | (Khuyến nghị) Screw Terminal Expansion Board for ESP32 | | |
| 1 | × | (Khuyến nghị) Breakout Expansion Board for ESP32 | | |
| 1 | × | (Khuyến nghị) Power Splitter for ESP32 | | |
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | | |
| 1 | × | DIYables Sensor Kit (30 sensors/displays) | | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) | | |
Chưa quen với Module RFID/NFC RC522 và khóa điện từ, bao gồm sơ đồ chân, chức năng và cách lập trình? Hãy khám phá các hướng dẫn toàn diện về những chủ đề này bên dưới:

This image is created using Fritzing. Click to enlarge image
Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.
※ Lưu ý:
Thứ tự các chân có thể khác nhau tùy theo nhà sản xuất. LUÔN sử dụng nhãn được in trên module. Hình ảnh trên cho thấy sơ đồ chân của các module từ nhà sản xuất DIYables.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 5
#define RST_PIN 27
#define RELAY_PIN 32
MFRC522 rfid(SS_PIN, RST_PIN);
byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Tap RFID Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (rfid.uid.uidByte[0] == authorizedUID[0] &&
rfid.uid.uidByte[1] == authorizedUID[1] &&
rfid.uid.uidByte[2] == authorizedUID[2] &&
rfid.uid.uidByte[3] == authorizedUID[3] ) {
Serial.println("Authorized Tag");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
digitalWrite(RELAY_PIN, HIGH);
}
else
{
Serial.print("Unauthorized Tag:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}
Thực hiện đấu nối như hình ảnh trên.
Kết nối board ESP32 với PC của bạn qua cáp micro USB
Mở Arduino IDE trên PC của bạn.
Chọn đúng board ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.
Vì UID thường không được in trên RFID Tag, bước đầu tiên chúng ta cần làm là tìm ra UID của tag. Điều này có thể được thực hiện bằng cách:
Copy đoạn code trên và mở bằng Arduino IDE
Nhấn nút Upload trên Arduino IDE để upload code lên ESP32
Mở Serial Monitor
Chạm RFID Tag vào module RFID-RC522
Lấy UID trên Serial Monitor
Tap RFID Tag on reader
Unauthorized Tag: 51 3D C1 AC
Sau khi có UID:
Cập nhật UID trong dòng 18 của đoạn code trên. Ví dụ: thay đổi byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; THÀNH byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
Upload code lên ESP32 lần nữa
Chạm RFID Tag vào module RFID-RC522
Xem kết quả trên Serial Monitor
Tap RFID Tag on reader
Authorized Tag
Tap RFID Tag on reader
Authorized Tag
Unauthorized Tag: 5D 11 1A D3
Chúng ta có thể cho phép nhiều RFID/NFC tag kích hoạt khóa điện từ. Đoạn code bên dưới sử dụng hai tag làm ví dụ.
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 5
#define RST_PIN 27
#define RELAY_PIN 32
MFRC522 rfid(SS_PIN, RST_PIN);
byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC};
byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15};
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
Serial.println("Tap RFID Tag on reader");
}
void loop() {
if (rfid.PICC_IsNewCardPresent()) {
if (rfid.PICC_ReadCardSerial()) {
MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
if (rfid.uid.uidByte[0] == authorizedUID1[0] &&
rfid.uid.uidByte[1] == authorizedUID1[1] &&
rfid.uid.uidByte[2] == authorizedUID1[2] &&
rfid.uid.uidByte[3] == authorizedUID1[3] ) {
Serial.println("Authorized Tag 1");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
digitalWrite(RELAY_PIN, HIGH);
}
else
if (rfid.uid.uidByte[0] == authorizedUID2[0] &&
rfid.uid.uidByte[1] == authorizedUID2[1] &&
rfid.uid.uidByte[2] == authorizedUID2[2] &&
rfid.uid.uidByte[3] == authorizedUID2[3] ) {
Serial.println("Authorized Tag 2");
digitalWrite(RELAY_PIN, LOW);
delay(2000);
digitalWrite(RELAY_PIN, HIGH);
}
else
{
Serial.print("Unauthorized Tag:");
for (int i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(rfid.uid.uidByte[i], HEX);
}
Serial.println();
}
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
}
}
}
Thực hiện các bước tương tự như trên, và sau đó chạm từng tag một vào module RFID-RC522. Kết quả trên Serial Monitor sẽ như sau:
Tap RFID Tag on reader
Authorized Tag 2
Authorized Tag 1
Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.