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ừ (solenoid lock).

Phần Cứng Cần Thiế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 + thẻ)
1×RFID Key Fob
1×Thẻ RFID
1×Khóa Điện Từ (Solenoid Lock)
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)

Về Module RFID/NFC RC522 và Khóa Điện Từ

Chưa quen thuộc 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 chi tiết về những chủ đề này dưới đây:

Sơ Đồ Kết Nối

ESP32 RFID rc522 khóa điện từ solenoid sơ đồ đấu dây

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.

Code ESP32 - Một Thẻ RFID

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-rfid-solenoid-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define RELAY_PIN 32 // ESP32 pin GPIO32 controls the solenoid lock via therelay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => locked Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed 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); // deactivate the solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Các Bước Thực Hiện

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm.
  • Thực hiện kết nối theo sơ đồ trên.
  • Kết nối bo mạch 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 bo mạch ESP32 (ví dụ: ESP32 Dev Module) và cổng COM.

Vì UID thường không được in trên thẻ RFID, bước đầu tiên chúng ta cần làm là tìm ra UID của thẻ. Điều này có thể được thực hiện bằng cách:

  • Sao chép code trên và mở bằng Arduino IDE
  • Nhấp vào nút Upload trên Arduino IDE để tải code lên ESP32
  • Mở Serial Monitor
  • Chạm thẻ RFID vào module RFID-RC522
  • Lấy UID trên Serial Monitor
COM6
Send
Tap RFID Tag on reader Unauthorized Tag: 51 3D C1 AC
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Sau khi có UID:

  • Cập nhật UID ở dòng 18 của code trên. Ví dụ, thay đổi byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; THÀNH byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
  • Tải code lên ESP32 lần nữa
  • Chạm thẻ RFID vào module RFID-RC522
  • Xem kết quả trên Serial Monitor
COM6
Send
Tap RFID Tag on reader Authorized Tag
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Chạm một thẻ RFID khác vào module RFID-RC522
  • Xem kết quả trên Serial Monitor
COM6
Send
Tap RFID Tag on reader Authorized Tag Unauthorized Tag: 5D 11 1A D3
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code ESP32 - Nhiều Thẻ RFID

Chúng ta có thể cho phép nhiều thẻ RFID/NFC kích hoạt khóa điện từ. Code dưới đây sử dụng hai thẻ làm ví dụ.

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-rfid-solenoid-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define RELAY_PIN 32 // ESP32 pin GPIO32 controls the solenoid lock via therelay 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(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => locked Serial.println("Tap RFID Tag on reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed 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); // deactivate the solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } 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); // deactivate the solenoid lock => unlocked delay(2000); digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked } 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(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Thực hiện các bước tương tự như trên, sau đó chạm từng thẻ một vào module RFID-RC522. Kết quả trên Serial Monitor sẽ như sau:

COM6
Send
Tap RFID Tag on reader Authorized Tag 2 Authorized Tag 1
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Video Tutorial

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.

Bình Luận