ESP32 RFID/NFC Relay

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32, RFID/NFC và relay. Cụ thể, chúng ta sẽ học cách kích hoạt relay khi một thẻ RFID/NFC được ủy quyền chạm vào đầu đọc RFID.

Hướng dẫn này có thể được mở rộng bằng cách kết nối relay với khóa điện từ, thiết bị truyền động...

Phần Cứng Cần Thiết

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow Amazon
1×Alternatively, 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide Amazon
1×Alternatively, 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide Amazon
1×Alternatively, ESP32 Uno-form board Amazon
1×Alternatively, ESP32 S3 Uno-form board Amazon
1×Cáp USB Type-C Amazon
1×Bộ Kit RFID/NFC RC522 (đầu đọc + thẻ) Amazon
1×Thẻ RFID Key Fob Amazon
1×Thẻ RFID Card Amazon
1×Relay Amazon
10×Dây Jumper Amazon
1×(Tùy chọn) Jack Nguồn DC Amazon
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32 Amazon
1×(Khuyến nghị) Breakout Expansion Board for ESP32 Amazon
1×(Khuyến nghị) Power Splitter for ESP32 Amazon

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included) Amazon
1×DIYables Sensor Kit (18 sensors/displays) Amazon
Tiết lộ: Một số liên kết trong bài viết này là liên kết tiếp thị Amazon và có thể nhận hoa hồng theo chính sách của chương trình.

Về Module RFID/NFC RC522 và Relay

Chúng tôi có các hướng dẫn chuyên biệt về Module RFID/NFC RC522 và relay. Mỗi hướng dẫn chứa thông tin chi tiết và các hướng dẫn từng bước về pinout phần cứng, nguyên lý hoạt động, kết nối dây với ESP32, code ESP32... Tìm hiểu thêm tại các liên kết sau:

ESP32 ESP32 RFID rơ le component

Cách Hoạt Động Của Module RC522

  • Một số UID được ủy quyền của các thẻ RFID/NFC được định nghĩa trước trong code ESP32
  • Khi một thẻ RFID/NFC được chạm vào đầu đọc RFID/NFC
  • ESP32 đọc UID từ đầu đọc RFID/NFC
  • ESP32 tìm kiếm UID đã đọc trong danh sách các UID được định nghĩa trước
  • Nếu danh sách các UID được định nghĩa trước chứa UID đã đọc, ESP32 sẽ kích hoạt relay.

Sơ Đồ Đấu Nối

ESP32 RFID rc522 rơ le 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 các nhãn được in trên module. Hình ảnh trên hiển thị pinout của các module từ nhà sản xuất DIYables.

Code ESP32 - Một Thẻ RFID/NFC

/* * 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-nfc-relay */ #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 connects to relay 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 relay Serial.println("Tap an RFID/NFC tag on the RFID-RC522 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, HIGH); // activate the relay for 2 seconds delay(2000); digitalWrite(RELAY_PIN, LOW); // deactivate the relay } else { Serial.print("Unauthorized Tag with UID:"); 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 Nhanh

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, xem ESP32 - Cài Đặt Phần Mềm.
  • Click vào biểu tượng Libraries trên thanh bên trái của Arduino IDE.
  • "MFRC522" vào ô tìm kiếm, sau đó tìm thư viện của GithubCommunity
  • Cài đặt thư viện bằng cách click vào nút Install.
ESP32 mfrc522 thư viện
  • Tìm hiểu UID của thẻ bằng cách làm theo các bước sau:
    • Copy code trên và paste vào Arduino IDE.
    • Compile và upload code lên board ESP32 bằng cách click nút Upload trên Arduino IDE
    • Mở Serial Monitor trên Arduino IDE
    how to open serial monitor on Arduino ide
    • Chạm thẻ RFID/NFC mà bạn muốn cấp quyền vào đầu đọc RFID-RC522
    • Ghi lại UID được in trên Serial Monitor
    Newbiely | Arduino IDE 2.3.8
    ──
    File
    Edit
    Sketch
    Tools
    Help
    ESP32 Dev Module
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
    New Line
    9600 baud
    Tap an RFID/NFC tag on the RFID-RC522 reader Unauthorized Tag with UID: 2B B8 59 B1
    Ln 11, Col 1
    ESP32 Dev Module on COM15
    2
    • 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] = {0x2B, 0xB8, 0x59, 0xB1};
    • Upload code lên ESP32 lần nữa
    • Chạm thẻ RFID/NFC được ủy quyền vào module RFID-RC522
    • Xem kết quả trên Serial Monitor
    Newbiely | Arduino IDE 2.3.8
    ──
    File
    Edit
    Sketch
    Tools
    Help
    ESP32 Dev Module
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
    New Line
    9600 baud
    Tap an RFID/NFC tag on the RFID-RC522 reader Authorized Tag
    Ln 11, Col 1
    ESP32 Dev Module on COM15
    2
    • Chạm một thẻ RFID/NFC không được ủy quyền vào module RFID-RC522
    • Xem kết quả trên Serial Monitor
    Newbiely | Arduino IDE 2.3.8
    ──
    File
    Edit
    Sketch
    Tools
    Help
    ESP32 Dev Module
    Newbiely.ino
    ···
    8 Serial.println("Hello World!");
    Output
    Serial Monitor
    Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
    New Line
    9600 baud
    Tap an RFID/NFC tag on the RFID-RC522 reader Authorized Tag Unauthorized Tag with UID: 1C 2A 52 E3
    Ln 11, Col 1
    ESP32 Dev Module on COM15
    2

Code ESP32 - Nhiều Thẻ RFID/NFC

Code ESP32 dưới đây cho phép nhiều thẻ RFID/NFC được ủy quyền để kích hoạt relay. Code lấy hai thẻ làm ví dụ. Bạn có thể thêm nhiều thẻ hơn

/* * 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-nfc-relay */ #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 connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte authorizedUID1[4] = {0x3A, 0xC9, 0x6A, 0xCB}; 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 relay Serial.println("Tap an RFID/NFC tag on the RFID-RC522 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, HIGH); // activate the relay for 2 seconds delay(2000); digitalWrite(RELAY_PIN, LOW); // deactivate the relay } 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, HIGH); // activate the relay for 2 seconds delay(2000); digitalWrite(RELAY_PIN, LOW); // deactivate the relay } else { Serial.print("Unauthorized Tag with UID:"); 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 Nhanh

  • Cập nhật UUID của hai thẻ RFID/NFC được ủy quyền vào code
  • Upload code lên ESP32
  • Chạm các thẻ được ủy quyền từng cái một vào module RFID-RC522.
  • Kết quả trên Serial Monitor:
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap an RFID/NFC tag on the RFID-RC522 reader Authorized Tag 1 Authorized Tag 2
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Bạn có thể chỉnh sửa code để thêm ba, bốn, hoặc nhiều thẻ hơn.

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