Mô-đun đọc RFID RC522 với Arduino

Mô-đun đọc RFID RC522 với Arduino

Mô-đun đọc RFID RC522

RC522 là một Mô-đun RFID đa giao tiếp cho Arduino và Vi điều khiển. RC522 được gọi là MFRC-522 do vi điều khiển bán dẫn NFX của nó. Mô-đun cho phép các nhà phát triển giao tiếp nó với bất kỳ vi điều khiển dựa trên SPI, I2C và UART nào khác. Nó đi kèm với một thẻ thẻ RFID và fob khóa bao gồm 1KB bộ nhớ.

RC522 RFID CARD READER MÔ-ĐUNThẻ RFID

Thẻ RFID và chìa khóa fob

Mô-đun RC522 hoạt động trên tần số 13.56 MHz và nó có thể hoạt động như một đầu đọc và ghi cho thẻ UID / RFID. Các thẻ RFID giao tiếp với mô-đun ở khoảng cách ngắn với tần số vô tuyến do kỹ thuật cảm ứng lẫn nhau. Trong hầu hết các sản phẩm bảo mật và thương mại, mô-đun có hiệu quả vì nó có thể phát hiện được các lỗi và sự cố với Thẻ RFID.

RFID thẻ RFID Tag Bố cục bộ nhớ 1KB

Thẻ RFID là một thiết bị lưu trữ bộ nhớ có bộ nhớ trị giá 1KB. Bộ nhớ này được chia thành 16 cung (0-15), trong đó mỗi khu vực được chia thành 4 khối (0,1,2,3). Mỗi khối là 16 byte. Như vậy 4 khối x 16 byte x 16 cung = 1024 byte là 1KB.

RC522 RFID Reader Tính năng, đặc điểm

  • RFID RC522 sử dụng cảm ứng lẫn nhau để kích hoạt thẻ và 13.56MHz để truyền dữ liệu.

  • Thẻ RFID có thể sử dụng từ cả hai phía của mô-đun ở mức tối đa 5cm.

  • Chỉ cần 3.3V để kích hoạt thiết bị.

  • Chế độ ngủ tự động của nó làm cho nó ít mô-đun tiêu thụ điện năng hơn.

  • Mô-đun có ba loại giao tiếp. Do đó, nó có thể sử dụng được với hầu hết mọi bộ vi điều khiển hoặc thiết bị trên thị trường.

  • Thẻ và đầu đọc RFID (RC522) có thể truyền dữ liệu lên đến 10Mb / s.

Ứng dụng mô-đun RFID RC522

  • RFID có hầu hết việc sử dụng như một thiết bị bảo mật.

  • Ở một số công ty, các thiết bị sử dụng với các mặt hàng mua sắm.

  • Một số sân bay cũng đã bắt đầu sử dụng RFID để xác định và theo dõi túi xách và các vật dụng khác.

  • Hệ thống chấm công hoặc đỗ xe cũng sử dụng RFID để giữ an toàn cho hệ thống.

Sơ đồ chân

Trong mô-đun này, chỉ có hai loại chân. Vì vậy, cái đầu tiên là sức mạnh và cái thứ hai là chân giao tiếp. Do đó, thiết bị có thể có chip vi điều khiển trên chính nó nhưng nó chỉ làm cho nó hoạt động như một RFID. Bộ vi điều khiển tích hợp sẽ không làm cho mô-đun trở thành một thiết bị độc lập.

Tất cả các chân của Đầu đọc thẻ RFID MFRC / RC522 là:

RC522 RFID CARD READERS Pinout

Bảng dưới đây cho thấy tám chân được tìm thấy trên mô-đun RFID RC522. Bạn cũng có thể xem mô tả của họ.

Ghim

Mô tả:__________

VCC

Các chân nguồn là VCC. Trong một số phiên bản của RC522, chân này được ký hiệu là 3V3 trên mô-đun thay vì VCC.

RST

Đây là chân đặt lại cho mô-đun. Do đó, nó sẽ đặt lại thiết bị trong trường hợp có lỗi khi thiết bị không đưa ra bất kỳ phản hồi nào.

GND ·

Ground giúp tạo ra điểm chung với mọi thiết bị bên ngoài, ví dụ như Nguồn điện, Bộ vi điều khiển hoặc Arduino.

IRQ ·

Thiết bị có thể chuyển sang chế độ ngủ để tiết kiệm năng lượng. Vì vậy, IRQ giúp đánh thức nó.

MISO

Chân này kết nối với Arduino / Vi điều khiển để giao tiếp SPI. Tuy nhiên, nó chuyển dữ liệu từ mô-đun sang Arduino.
Chân MISO cũng có thể sử dụng cho các chức năng khác thay vì SPI.
Nó cũng có thể giao tiếp với I2C cho xung đồng hồ và UART Serial để truyền dữ liệu từ mô-đun.

MOSI ·

MOSI là chân nhập dữ liệu cho mô-đun RFID trong giao tiếp SPI

SCK ·

Các chân SCK giúp gửi xung đồng hồ trong giao tiếp SPI.

SS

Chân SS là một con chip cho phép pin trong giao tiếp SPI. Do đó, nó nhận được tín hiệu khi Master (Arduino) phải thực hiện giao tiếp SPI.
Chân SS trong RFID có thể sử dụng làm chân thứ hai (SDA) để giao tiếp I2C.
Nó cũng nhận dữ liệu trong quá trình giao tiếp UART.

Giao diện mô-đun đọc RFID RC522 với Arduino UNO

Như chúng ta đã thấy ở trên, mô-đun RC522 có 8 thiết bị đầu cuối mà chúng ta sẽ kết nối với Arduino UNO. Vì RC522 yêu cầu điện áp hoạt động trong phạm vi 2.5-3.3V, do đó đầu cuối VCC của mô-đun RC522 sẽ chung với chân 3.3V của Arduino UNO. Tương tự như vậy, cả hai thiết bị sẽ có điểm chung.

Arduino uno với RC522

Giao tiếp SPI giúp giao tiếp với mô-đun đầu đọc RFID, phổ biến trong mọi bộ vi điều khiển. Vì vậy, chúng tôi sẽ sử dụng giao diện SPI của Arduino UNO. Dưới đây, bạn có thể xem các chân SPI của Arduino UNO.

Chân Communciation Arduino SPI

Chân Arduino UNO SPI

Bảng dưới đây cho thấy các kết nối giữa hai thiết bị mà chúng tôi sẽ sử dụng trong dự án của mình.

Mô-đun đọc RFID RC522

Arduino UNO

VCC

3V3 ·

RST

Chân 9

GND ·

GND ·

IRQ ·

Không được kết nối

MISO

Chân 12

MOSI ·

Chân 11

SCK ·

Chân 13

SDA

Chân 10

Các thành phần cần thiết

Chúng tôi sẽ cần các thành phần sau để kết nối bảng Arduino UNO của chúng tôi với mô-đun RC522.

  • Arduino UNO

  • Mô-đun đầu đọc RFID RC522

Thực hiện theo sơ đồ bên dưới và kết nối chúng cho phù hợp.

Đầu đọc thẻ RC522 RFID với Arduino

Tất cả các kết nối giữa hai thiết bị đều giống như chúng tôi đã liệt kê chúng trong bảng trên.

Cài đặt Thư viện RC522 trong Arduino IDE

Chúng tôi sẽ sử dụng Arduino IDE để lập trình UNO Arduino của chúng tôi. Vì vậy, bạn nên có phiên bản Arduino IDE mới nhất.

Để sử dụng mô-đun đọc RFID RC522 dễ dàng hơn, chúng ta phải cài đặt thư viện MFRC522. Với sự trợ giúp của thư viện này, chúng tôi sẽ có thể dễ dàng đọc / ghi dữ liệu vào thẻ RFID. Làm theo các bước dưới đây để cài đặt thành công nó thành công.

Chúng tôi sẽ sử dụng GitHub để tải xuống thư viện và sau đó đặt chúng vào thư mục thư viện của Arduino IDE của chúng tôi.
Nhấp vào để mở trang GitHub tương ứng cho thư viện.
Trang web khi bạn mở liên kết sẽ trông giống như thế này.

Cài đặt thư viện RFID

Nhấp vào nút Mã và chuyển đến tùy chọn Tải xuống Zip như được đánh dấu trong hình. Tệp zip của bạn sẽ được tải về máy tính của bạn ngay lập tức. Bây giờ hãy chuyển đến Sketch > Include Library > Add .zip Library bên trong IDE để thêm thư viện.

Arduino Sketch: Đọc thẻ RFID

Bây giờ sau khi lắp ráp mô-đun đầu đọc RFID RC522 và bảng Arduino UNO cùng nhau, chúng ta hãy tiến hành phác thảo ví dụ từ thư viện MFRC522 để đọc thẻ RFID.

Mở Arduino IDE của bạn và đi tới File > Examples > MFRC522 > DumpInfo. Mã chương trình sau sẽ mở ra. Bản phác thảo ví dụ này sẽ hiển thị thông tin về thẻ RFID của bạn.

/*

 * --------------------------------------------------------------------------------------------------------------------

 * Example sketch/program showing how to read data from a PICC to serial.

 * --------------------------------------------------------------------------------------------------------------------

 * This is a MFRC522 library example; for further details and other examples see: https://github.com/miguelbalboa/rfid

 * 

 * Example sketch/program showing how to read data from a PICC (that is: a RFID Tag or Card) using a MFRC522 based RFID

 * Reader on the Arduino SPI interface.

 * 

 * When the Arduino and the MFRC522 module are connected (see the pin layout below), load this sketch into Arduino IDE

 * then verify/compile and upload it. To see the output: use Tools, Serial Monitor of the IDE (hit Ctrl+Shft+M). When

 * you present a PICC (that is: a RFID Tag or Card) at reading distance of the MFRC522 Reader/PCD, the serial output

 * will show the ID/UID, type and any data blocks it can read. Note: you may see "Timeout in communication" messages

 * when removing the PICC from reading distance too early.

 * 

 * If your reader supports it, this sketch/program will read all the PICCs presented (that is: multiple tag reading).

 * So if you stack two or more PICCs on top of each other and present them to the reader, it will first output all

 * details of the first and then the next PICC. Note that this may take some time as all data blocks are dumped, so

 * keep the PICCs at reading distance until complete.

 * 

 * @license Released into the public domain.

 * 

 * Typical pin layout used:

 * -----------------------------------------------------------------------------------------

 *             MFRC522      Arduino       Arduino   Arduino    Arduino          Arduino

 *             Reader/PCD   Uno/101       Mega      Nano v3    Leonardo/Micro   Pro Micro

 * Signal      Pin          Pin           Pin       Pin        Pin              Pin

 * -----------------------------------------------------------------------------------------

 * RST/Reset   RST          9             5         D9         RESET/ICSP-5     RST

 * SPI SS      SDA(SS)      10            53        D10        10               10

 * SPI MOSI    MOSI         11 / ICSP-4   51        D11        ICSP-4           16

 * SPI MISO    MISO         12 / ICSP-1   50        D12        ICSP-1           14

 * SPI SCK     SCK          13 / ICSP-3   52        D13        ICSP-3           15

 *

 * More pin layouts for other boards can be found here: https://github.com/miguelbalboa/rfid#pin-layout

 */

 

#include <SPI.h>

#include <MFRC522.h>

 

#define RST_PIN         9          // Configurable, see typical pin layout above

#define SS_PIN          10         // Configurable, see typical pin layout above

 

MFRC522 mfrc522(SS_PIN, RST_PIN);  // Create MFRC522 instance

 

void setup() {

Serial.begin(9600); // Initialize serial communications with the PC

while (!Serial); // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)

SPI.begin(); // Init SPI bus

mfrc522.PCD_Init(); // Init MFRC522

delay(4); // Optional delay. Some board do need more time after init to be ready, see Readme

mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details

Serial.println(F("Scan PICC to see UID, SAK, type, and data blocks..."));

}

 

void loop() {

// Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.

if ( ! mfrc522.PICC_IsNewCardPresent()) {

return;

}

 

// Select one of the cards

if ( ! mfrc522.PICC_ReadCardSerial()) {

return;

}

 

// Dump debug info about the card; PICC_HaltA() is automatically called

mfrc522.PICC_DumpToSerial(&(mfrc522.uid));

}

Đảm bảo rằng chân RST được xác định chính xác trong bản phác thảo theo các kết nối của bạn.

Để xem trình diễn đoạn mã trên, hãy tải mã lên Arduino. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn bảng Arduino từ Bảng > Công cụ và cũng chọn cổng COM chính xác mà bảng Arduino được kết nối từ Công cụ > Cổng.

chọn Arduino uno

Sau khi mã được tải lên Arduino, hãy đưa thẻ RFID đến gần nó hơn. Mở màn hình nối tiếp của bạn và đặt tốc độ truyền của nó thành 9600. Ngay lập tức, màn hình nối tiếp của bạn sẽ hiển thị thông tin liên quan đến thẻ của bạn. Điều này bao gồm UID là ID duy nhất của thẻ và kích thước của nó.

Đọc thẻ RFID

Arduino Sketch: Ghi dữ liệu vào thẻ RFID

Mở Arduino IDE của bạn và đi tới Tệp > Mới để mở tệp mới. Sao chép mã được cung cấp bên dưới trong tệp đó.

Bản phác thảo này viết "Chào mừng!" vào thẻ RFID của chúng tôi.

#include <SPI.h>     

#include <MFRC522.h>  

 

#define SS_PIN 10  

#define RST_PIN 9  

 

MFRC522 mfrc522(SS_PIN, RST_PIN);  

MFRC522::MIFARE_Key key;          

 

int block=1;  

 

byte data[16] = {"Welcome!"};  

byte read_data[18];

 

void setup() 

{

    Serial.begin(115200);        

    SPI.begin();               

    mfrc522.PCD_Init();        

    Serial.println("Scanning...");

  

  for (byte i = 0; i < 6; i++) {

    key.keyByte[i] = 0xFF;  

  }

}

 

void loop()

{  

 

  if ( ! mfrc522.PICC_IsNewCardPresent()) {

    return;

  }

  

 

  if ( ! mfrc522.PICC_ReadCardSerial()) 

  {

    return;

  }

    Serial.println("Card is selected successfully!");

         

   writeBlock(block, data);

   readBlock(block, read_data);

 

   Serial.print("Reading block ");

   for (int j=0 ; j<16 ; j++)

   {

     Serial.write (read_data[j]);

   }

   Serial.println("");

}

  

int writeBlock(int blockNumber, byte arrayAddress[]) 

{

  int largestModulo4Number=blockNumber/4*4;

  int trailerBlock=largestModulo4Number+3;

  if (blockNumber > 2 && (blockNumber+1)%4 == 0){Serial.print(blockNumber);

  Serial.println(" is a trailer block");

  return 2;}

  Serial.print(blockNumber);

  Serial.println(" is a data block");

  

 

  byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));

  if (status != MFRC522::STATUS_OK) {

         Serial.print("PCD_Authenticate() failed: ");

         Serial.println(mfrc522.GetStatusCodeName(status));

         return 3;

  }

  

  status = mfrc522.MIFARE_Write(blockNumber, arrayAddress, 16);

  if (status != MFRC522::STATUS_OK) {

           Serial.print("MIFARE_Write() failed: ");

           Serial.println(mfrc522.GetStatusCodeName(status));

           return 4;

  }

  Serial.println("Block has been written!");

}

 

 

 

int readBlock(int blockNumber, byte arrayAddress[]) 

{

  int largestModulo4Number=blockNumber/4*4;

  int trailerBlock=largestModulo4Number+3;

  

  byte status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(mfrc522.uid));

 

  if (status != MFRC522::STATUS_OK) {

         Serial.print("PCD_Authenticate() failed (read): ");

         Serial.println(mfrc522.GetStatusCodeName(status));

         return 3;

  }

 

byte buffersize = 18;

status = mfrc522.MIFARE_Read(blockNumber, arrayAddress, &buffersize);

  if (status != MFRC522::STATUS_OK) {

          Serial.print("MIFARE_read() failed: ");

          Serial.println(mfrc522.GetStatusCodeName(status));

          return 4;

  }

  Serial.println("Block read successfully!");

}

Mã hoạt động như thế nào?

Bao gồm thư viện

Đầu tiên, chúng tôi sẽ bao gồm các thư viện cần thiết cần thiết cho dự án này. Thư viện MFRC522 giúp giải mã và mã hóa dữ liệu đến từ mô-đun RFID và SPI giúp thiết lập giao tiếp SPI. Hai thư viện này phụ thuộc vào nhau.

#include <SPI.h>     

#include <MFRC522.h>  

Thứ hai, chúng tôi sẽ chỉ định chân SS và kết nối chân RST với UNO Arduino. Nó lần lượt là chân 10 và chân 9.

#define SS_PIN 10  

#define RST_PIN 9  

Tiếp theo, chúng ta sẽ tạo một instance của MFRC522 và pass chân SS và chân RST làm tham số. Ngoài ra, chúng tôi cũng sẽ tạo một cấu trúc MIFARE_Key gọi là 'key'. Điều này sẽ được sử dụng sau này để lưu dữ liệu trên thẻ RFID.

 

MFRC522 mfrc522(SS_PIN, RST_PIN);  

MFRC522::MIFARE_Key key;  

Bây giờ chúng ta sẽ xác định khối nơi chúng ta sẽ lưu trữ dữ liệu. Nó có thể lấy giá trị của 0,1 hoặc 2. Vì khối 3 là khối rơ moóc nên chúng tôi không sử dụng nó. Trong trường hợp của chúng tôi, chúng tôi đã chọn khối 1 để lưu trữ dữ liệu của chúng tôi.

int block=1;  

Sau đó, chúng ta sẽ tạo một mảng gọi là 'data.' Điều này sẽ chứa 16 byte thông điệp dữ liệu mà chúng tôi sẽ lưu trữ trên thẻ. Bạn có thể thêm bất kỳ văn bản nào.

Chúng tôi cũng sẽ phải xác định một mảng khác gồm 18 byte để đọc dữ liệu mà chúng tôi đã lưu trữ trong thẻ của mình. Mảng này được đặt tên là 'read_data.'

byte data[16] = {"Welcome!"};  

byte read_data[18];

thiết lập()

Bên trong hàm setup(), kết nối nối tiếp được mở ở tốc độ truyền 9600.

Serial.begin(115200);

Bây giờ chúng ta sẽ mô tả khởi tạo SPI và khởi tạo Mô-đun cần được thực hiện bằng các dòng mã sau.

 SPI.begin();              

 mfrc522.PCD_Init();   

Bây giờ chúng ta sẽ sử dụng vòng lặp for cho khóa bảo mật để sử dụng các chức năng ghi / đọc của thư viện. Trong trường hợp của chúng tôi, tất cả 6 byte chính được đặt thành 0xFF mặc định.

Serial.println("Scanning...");

  

  for (byte i = 0; i < 6; i++) {

    key.keyByte[i] = 0xFF;  

  }

vòng lặp()

Bên trong hàm infinite loop() trước tiên chúng ta sẽ phát hiện thẻ và sau đó ghi dữ liệu của chúng ta vào bộ nhớ của nó.

if ( ! mfrc522.PICC_IsNewCardPresent()) {

    return;

  }

  

  if ( ! mfrc522.PICC_ReadCardSerial()) 

  {

    return;

  }

    Serial.println("Card is selected successfully!");

Thông qua hàm writeBlock(), chúng ta sẽ truyền hai tham số bên trong nó. Đầu tiên là số khối và thứ hai là dữ liệu mà chúng ta muốn ghi trên khối cụ thể.

writeBlock(block, data);

Tương tự như vậy, chúng ta sẽ đọc dữ liệu bằng hàm readBlock(). Hàm này cũng có hai tham số. Đầu tiên là số khối và thứ hai là mảng read_data tương ứng.

readBlock(block, read_data);

Đầu tiên, chúng tôi sẽ ghi dữ liệu vào khối của chúng tôi và sau đó chúng tôi sẽ đọc nó để xem liệu nó có được viết đúng hay không. Các dòng code sau đây sẽ in dữ liệu mà chúng ta đã viết trên khối bằng cách hiển thị mảng read_data() trên màn hình nối tiếp. Điều này sẽ đạt được bằng cách sử dụng vòng lặp for.

Serial.print("Reading block ");

   for (int j=0 ; j<16 ; j++)

   {

     Serial.write (read_data[j]);

   }

   Serial.println("");

Demonstration

Để xem trình diễn đoạn mã trên, hãy tải mã lên Arduino. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn bảng Arduino từ Bảng > Công cụ và cũng chọn cổng COM chính xác mà bảng Arduino được kết nối từ Công cụ > Cổng.

chọn Arduino uno

Sau khi mã được tải lên Arduino, hãy đưa thẻ RFID đến gần nó hơn. Mở màn hình nối tiếp của bạn và đặt tốc độ truyền của nó thành 115200. Ngay lập tức, màn hình nối tiếp của bạn sẽ hiển thị các thông báo khác nhau.

Ghi dữ liệu vào RFID Tag

Hệ thống an ninh khóa cửa sử dụng mô-đun đầu đọc RFID

Bây giờ sau khi học cách ghi và đọc vào thẻ RFID, chúng ta hãy tiến hành thêm và xây dựng hệ thống an ninh khóa cửa của mình. Hệ thống an ninh cửa sẽ được sử dụng để ngăn chặn những người không được phép truy cập vào phòng hoặc tòa nhà. Chúng tôi sẽ sử dụng thẻ RFID và mô-đun đầu đọc RC522 với UNO Arduino được lập trình của chúng tôi. Ngoài ra, chúng tôi sẽ sử dụng màn hình OLED SSD0 96.1306 để hiển thị các thông báo khác nhau cho người dùng.

Arduino uno với phần cứng RC522 và OLED

Cài đặt thư viện OLED trong Arduino IDE

Để sử dụng màn hình OLED trong dự án của mình, chúng ta phải cài đặt thư viện Adafruit SSD1306 và thư viện Adafruit GFX trong Arduino IDE. Làm theo các bước dưới đây để cài đặt chúng thành công.

Mở Arduino IDE và nhấp vào Sketch > Library > Manage Libraries. Nhập 'SSD1306' vào tab tìm kiếm và cài đặt thư viện Adafruit SSD1306 OLED.

Cài đặt Thư viện OLED SSD1306 Arduino IDE

Chúng tôi cũng sẽ yêu cầu thư viện Adafruit GFX là một phụ thuộc cho SSD1306. Nhập 'Adafruit GFX' vào tab tìm kiếm và cài đặt nó.

Cài đặt thư viện GFX Adafruit

Sau khi cài đặt các thư viện, hãy khởi động lại IDE của bạn.

Chân Arduino I2C

Để giao tiếp OLED với Arduino, chúng ta cần sử dụng chân I2C của Arduino là chân A4 (SDA) và A5 (SCL). Các chân I2C đã nêu ở trên được đặt ở mặc định. Nếu chúng ta muốn thay đổi các chân GPIO, chúng ta phải đặt chúng trong mã. Các sơ đồ dưới đây cho thấy các chân I2C của Arduino được đánh dấu bằng các hình chữ nhật màu khác nhau.

Chân Arduino Uno I2C

Lưu ý: Nếu chúng tôi sử dụng các chân GPIO khác của Arduino để giao tiếp I2C, chúng tôi có thể xác định các chân khác bên trong bản phác thảo Arduino của mình. Chúng tôi không phải sử dụng chân I2C mặc định.

Sơ đồ kết nối- OLED với Mô-đun Arduino và RC522

Các thành phần bắt buộc:

  • Arduino UNO

  • Mô-đun đọc RFID RC522

  • Thẻ RFID

  • Màn hình OLED

  • Dây kết nối

  • Breadboard

Lắp ráp mạch như thể hiện trong sơ đồ sơ đồ dưới đây:

Arduino uno với RC522 và OLED

Như bạn có thể thấy ở trên, chúng tôi đã kết nối tất cả các thiết bị đầu cuối VCC bằng chân Arduino 3.3V. Thiết bị đầu cuối SCL của OLED được kết nối với A5 và thiết bị đầu cuối SDA của OLED được kết nối với chân A4 của Arduino. Căn cứ của cả ba thiết bị là phổ biến. Các kết nối của mô-đun RC522 đã được thảo luận trước đây và chúng tôi đang sử dụng các chân SPI mặc định của mô-đun đó.

Arduino Sketch: Hệ thống an ninh khóa cửa

Mở Arduino IDE của bạn và đi tới Tệp > Mới. Một tệp mới sẽ mở ra. Sao chép mã được cung cấp bên dưới trong tệp đó và lưu nó. Bạn sẽ phải chỉ định ID thẻ duy nhất của mình.

#include <SPI.h>

#include <MFRC522.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

 

#define RST_PIN 9

#define SS_PIN 10

 

byte readCard[4];

String My_ID = "********";  

String ID = "";

 

MFRC522 mfrc522(SS_PIN, RST_PIN);

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);

 

void setup() 

{

  SPI.begin(); 

  mfrc522.PCD_Init(); 

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

 

  display.clearDisplay();

  display.setTextColor(WHITE);

  display.setCursor(0,0);

  display.setTextSize(1);

  display.print("Scan Your Card...");

  display.display();

}

 

void loop() 

{

  while (getID()) 

  {

    display.clearDisplay();

    display.setCursor(0,0);

    display.setTextSize(1);

    

    if (ID == My_ID) 

    {

      

     display.print("ACCESS GRANTED!");

     

    }

    else

    {

      display.print("ACCESS DENIED!");

    }

    

      display.display();

      display.setCursor(0, 10);

      display.print(" ID : ");

      display.print(ID);

      display.display();

      

    delay(2000);

 

    display.clearDisplay();

    display.print(" Access Control ");

    display.setCursor(0, 10);

    display.print("Scan Your Card...");

    display.display();

  }

}

 

boolean getID() 

{

  if ( ! mfrc522.PICC_IsNewCardPresent()) { 

  return false;

  }

  if ( ! mfrc522.PICC_ReadCardSerial()) { 

  return false;

  }

  ID = "";

  for ( uint8_t i = 0; i < 4; i++) { 

  //readCard[i] = mfrc522.uid.uidByte[i];

  ID.concat(String(mfrc522.uid.uidByte[i], HEX)); 

  }

  ID.toUpperCase();

  mfrc522.PICC_HaltA(); 

  return true;

}

Mã hoạt động như thế nào?

Bao gồm Thư viện và các tham số xác định

Đầu tiên, chúng tôi sẽ bao gồm tất cả các thư viện sau đây được yêu cầu cho dự án này. SPI.h sẽ được sử dụng cho giao thức truyền thông SPI giữa mô-đun Arduino và RC522. Wire.h sẽ cho phép chúng ta giao tiếp thông qua giao thức I2C giữa Arduino và OLED. Trong khi các thư viện khác là những thư viện mà chúng tôi đã cài đặt trước đó và được yêu cầu cho chức năng phù hợp của màn hình OLED và mô-đun RC522.

#include <SPI.h>

#include <MFRC522.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

Trong các dòng sau, chúng ta sẽ xác định các chân RST và SS và tạo một thể hiện của MFRC522 được gọi là mfrc522() và truyền các chân được xác định trước đó là hai tham số bên trong nó. Ngoài ra, chúng tôi cũng sẽ tạo một biến chuỗi để giữ ID thẻ duy nhất của chúng tôi. Điều này được đặt tên là 'My_ID.'

#define RST_PIN 9

#define SS_PIN 10

 

byte readCard[4];

String My_ID = "********";  

String ID = "";

 

MFRC522 mfrc522(SS_PIN, RST_PIN);

Tiếp theo, chúng ta sẽ khởi tạo màn hình OLED bằng cách tạo một đối tượng và chỉ định chiều rộng, chiều cao, phiên bản I2C (&Wire) và -1 làm tham số bên trong Adafruit_SSD1306. -1 chỉ định rằng màn hình OLED mà chúng tôi đang sử dụng không có chân RESET. Nếu bạn đang sử dụng mã pin RESET thì hãy chỉ định GPIO mà qua đó bạn đang kết nối nó với bảng phát triển của mình.

Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, -1);

thiết lập()

Bên trong hàm setup(), chúng ta sẽ khởi tạo giao thức SPI, mô-đun MC522 và màn hình OLED.

SPI.begin(); 

mfrc522.PCD_Init(); 

display.begin(SSD1306_SWITCHCAPVCC, 0x3C);

Sau đó, chúng tôi sẽ hiển thị 'Quét thẻ của bạn...' trên màn hình.

 display.clearDisplay();

  display.setTextColor(WHITE);

  display.setCursor(0,0);

  display.setTextSize(1);

  display.print("Scan Your Card...");

  display.display();

vòng lặp()

Bên trong hàm infinite loop() trước tiên chúng ta sẽ phát hiện thẻ và sau đó kiểm tra xem ID của nó có khớp với ID mà chúng ta đã lưu trữ trong biến 'MY_ID' hay không. Nếu có thì màn hình OLED hiển thị "ACCESS GRANTED!" nếu không, nó sẽ hiển thị "ACCESS DENIED!" và quá trình tiếp tục sau khi trì hoãn 2 giây.

while (getID()) 

  {

    display.clearDisplay();

    display.setCursor(0,0);

    display.setTextSize(1);

    

    if (ID == My_ID) 

    {

      

     display.print("ACCESS GRANTED!");

     

    }

    else

    {

      display.print("ACCESS DENIED!");

    }

    

      display.display();

      display.setCursor(0, 10);

      display.print(" ID : ");

      display.print(ID);

      display.display();

      

    delay(2000);

 

    display.clearDisplay();

    display.print(" Access Control ");

    display.setCursor(0, 10);

    display.print("Scan Your Card...");

    display.display();

  }

Demonstration

Để xem trình diễn đoạn mã trên, hãy tải mã lên Arduino. Tuy nhiên, trước khi tải mã lên, hãy đảm bảo chọn bảng Arduino từ Bảng > Công cụ và cũng chọn cổng COM chính xác mà bảng Arduino được kết nối từ Công cụ > Cổng.

Sau khi mã được tải lên Arduino của bạn, OLED sẽ hiển thị "Quét thẻ của bạn..." Đưa thẻ của bạn có ID bạn đã sử dụng trong bản phác thảo, gần với mô-đun RC522 hơn. Ngay lập tức, OLED sẽ hiển thị "QUYỀN TRUY CẬP ĐƯỢC CẤP!" Bây giờ mang một thẻ khác đến gần mô-đun hơn. Bây giờ OLED sẽ hiển thị "TRUY CẬP BỊ TỪ CHỐI!"

>>> 100+ Mã Sản Phẩm Dây Rút: https://mecsu.vn/san-pham/day-rut-nhua.5op

>>> 1000+ Mã Sản Phẩm Đầu Cosse: https://mecsu.vn/san-pham/dau-cosse.Q1j

Bài viết cùng chuyên mục

NHANH

NHANH

Vì Đổi mới liên tục nên Nhanh hơn

ĐÚNG

ĐÚNG

Coi trọng và ưu tiên việc làm Đúng

ĐỦ

ĐỦ

Tìm và mua Đủ Đơn hàng hơn

KỊP THỜI

KỊP THỜI

Hiệu suất tối ưu bởi Kịp Thời hơn