[Tìm hiểu] Module RFID NFC PN532

0
306

PN532 là module đọc ghi NFC RFID Arduino đơn giản. Module này hơi khác so với các module và thiết bị RFIC khác vì chức năng của nó.

Các chức năng PN532 là các chức năng giao thức dữ liệu hiện đại thông qua chip NFC. Moduke có 3 giao thức giao tiếp, UART, SPI và I2C. Thông thường module sẽ giao tiếp với Arduino vì có các thư viện hỗ trợ chính thức của nó trong Arduino IDE.

Module thực hiện nhiều chức năng như gửi dữ liệu, dưới dạng thẻ RFIC và đọc thẻ RFID. Thiết bị chỉ có thể hoạt động ở cự ly gần 5-7cm, tuy nhiên tiêu thụ ít điện năng và tốc độ xử lý nhanh, hầu hết các công ty di động đều bắt đầu tích hợp module này trong thiết bị của họ.

[Tìm hiểu] Module RFID NFC PN532

Cấu hình sơ đồ chân PN532

PN532 cung cấp nhiều giao thức giao tiếp. Vì vậy, số lượng chân của nó nhiều hơn so với các RFID khác nhưng chỉ một số chân có thể sử dụng được tại một thời điểm.

Cấu hình sơ đồ chân PN532

Chi tiết sơ đồ chân

Chân Thông tin chi tiết
VCC VCC là chân cấp nguồn cho toàn bộ thiết bị.
GND  Chân GND là điểm mass nguồn điện và Arduino / Vi điều khiển.
TXD Giao tiếp UART yêu cầu hai chân giao tiếp, một chân để truyền dữ liệu và chân thứ hai để nhận. Chân TXD giúp truyền dữ liệu.
RXD Chân RXD là chân nhận dữ liệu giao tiếp UART.
SDA Giao tiếp I2C yêu cầu một chân để truyền và nhận dữ liệu. SDA là chân dữ liệu cho giao tiếp I2C.
SCL SCL là chân xung clock cho giao tiếp I2C. Dữ liệu di chuyển giữa các thiết bị theo xung clock.
IRQ Chân IRQ là chân ngắt, giúp giao tiếp I2C tạo ra ngắt giao tiếp.
RST RST là chân reset, giúp thiết lập lại thiết bị bằng tín hiệu bên ngoài. .
MOSI Giao tiếp SPI yêu cầu 4 chân để giao tiếp dữ liệu. Do đó, MOSI là chân Master Out Slave In giúp truyền dữ liệu từ Arduino sang PN532.
MISO MISO là chân Master In Slave Out, giúp truyền dữ liệu từ PN532 đến Arduino.
NS SS là chân chọn chip kích hoạt giao tiếp SPI với Slave (PN532).
SCK Là một chân xung clock, truyền dữ liệu theo xung clock này.

Đặc tính module RFID NFC PN532

  • PN532 cho phép hai module trao đổi dữ liệu ở một khoảng cách cụ thể.
  • Module RFID sử dụng tần số 13,56MHz và sử dụng trong phạm vi của nó
  • Module PN532 có thể được sử dụng với một thẻ từ NTAG / RFID và đầu đọc thẻ.
  • Thiết bị có thể hoạt động với nguồn 3.3V cho giao thức SPI và 5V cho các giao tiếp khác.
  • Trên bo mạch, có công tắc thay đổi giao thức truyền thông.
  • Có ba giao thức giao tiếp dữ liệu.
  • Thiết bị có sẵn 1 ăng-ten trên bo mạch và có kích thước nhỏ, giúp tối ưu hóa diện tích
  • Hỗ trợ NFC trên điện thoại Android.

Ứng dụng PN532

  • Trong điện thoại di động, PN532 giúp trao đổi dữ liệu.
  • Các khóa bảo mật như ô tô, cửa ra vào, v.v.
  • Trong hầu hết các trung tâm mua sắm, PN532 giúp xác định gói hàng.
  • Ở hầu hết các sân bay, PN532 giúp xác định hành lý, túi xách, v.v.

Cách sử dụng module RFID PN532

Để sử dụng với Arduino trước tiên hãy hiểu cách module kết nối với Arduino. Hãy tham khảo các bài viết sau

Module sử dụng giao thức SPI, I2C và UART. Đầu tiên, kết nối với module bên ngoài trên các chân sau:

Arduino UNO

SPI

  • SS – D10
  • MOSI – D11
  • MISO – D12
  • SCK – D13

I2C

  • SCL – A5, D19
  • SDA – A4, D18

UART

  • RX – D0
  • TX – D1

Các chân giao tiếp của bảng mạch Arduino khác có sẵn trên trang web chính thức của nó. Ở đây sẽ theo Arduino UNO. Sau khi kết nối tất cả các chân giao tiếp với PN532, dùng công tắt chuyển đổi giao thức trên module PN532 để kích hoạt một giao thức tại một thời điểm.

Công tắt 1 Công tắc 2 Giao thức được chọn
0 0 UART
1 1 SPI
1 0 I2C

Cách giao tiếp PN532 với Arduino

Tất cả các hướng dẫn chi tiết thảo luận về phần cứng. Để sử dụng PN532 hoạt động hoàn toàn, phải lập trình Arduino theo các hướng dẫn sau đây:

Lập trình với Arduino

Trong lập trình, Arduino luôn phụ thuộc vào thư viện hỗ trợ của PN532. Thư viện cho phép các nhà phát triển thay đổi tùy ý các chân theo bảng mạch.

#include <Adafruit_PN532.h>

Giao thức

Chỉ sử dụng thư viện PN532 trên, thì Arduino chưa thể giao tiếp. Để sử dụng giao thức I2C và SPI, hãy khai báo hai thư viện sau:

#include <Wire.h>

#include <SPI.h>

Thư viện Wire.h dành cho giao tiếp I2C. Cả hai giao thức đều có chân cố định trong hầu hết mọi bảng mạch.

Adafruit_PN532 nfc (PN532_SS);

Adafruit_PN532 nfc (PN532_IRQ, PN532_RESET);

Mặc định, các chân SPI đã tương thích với PN532_SS nhưng đối với giao thức I2C, hãy thay thế PN532_IRQ và PN532_RESET bằng các chân digital. Để tránh sự cố ở giao thức SPI, lệnh sau đây sẽ khai báo các chân.

Adafruit_PN532 nfc (PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

PN532_SCK, PN532_MISO, PN532_MOSI và PN532_SS phải được thay thế bằng các chân digital mới. Tất cả lệnh trên sẽ lựa chọn giao thức thông qua thư viện hỗ trợ, việc kích hoạt và sử dụng PN532 là giống nhau đối với tất cả các giao thức.

Khởi tạo giao tiếp dữ liệu

Trong PN532, điều đầu tiên và quan trọng nhất của lập trình là khởi tạo PN532. Việc không khởi tạo, phần mềm IDE sẽ không đưa ra lỗi và sẽ khó xác định lý do tại sao module không hoạt động.

nfc.begin(); // khởi tạo PN532

nfc.SAMConfig(); // Cài đặt thẻ ở chế độ đọc dữ liệu

Giao thức giao tiếp và tất cả các giao thức chỉ để khởi tạo module. Để truyền và nhận dữ liệu, mọi thứ phải được khai báo trong phần khởi tạo của chương trình. Có nhiều phương pháp khác nhau để module NFC có thể thực hiện.

Ví dụ giao tiếp NFC RFID với Arduino

PN532 đọc dữ liệu thẻ từ. Mỗi thẻ NTAGS đều có một mã có thể đọc được và thay đổi được với PN532 bằng cách lập trình các chức năng. Đầu tiên, mắc các chân của module với Arduino ở các chân I2C là D18 và D19. Sau đó, tải code sau:

Ví dụ giao tiếp NFC RFID với Arduino

Code Arduino và các thư viện hỗ trợ

#include <Wire.h>

#include <Adafruit_PN532.h>

#define PN532_IRQ (2)

#define PN532_RESET (3)

Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

void setup(void) {

Serial.begin(115200);

nfc.begin();

uint32_t versiondata = nfc.getFirmwareVersion();

if (! versiondata) {

Serial.print("Didn't find PN53x board");

while (1); }

nfc.SAMConfig();}

void loop(void) {

uint8_t success;

uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };

uint8_t uidLength;

success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

if (success) {

Serial.println("Found an ISO14443A card");

Serial.print(" UID Length: "); Serial.print(uidLength, DEC); Serial.println(" bytes");

Serial.print(" UID Value: ");

nfc.PrintHex(uid, uidLength);

Serial.println("");

if (uidLength == 7){

uint8_t data[32];

Serial.println("Seems to be an NTAG2xx tag (7 byte UID)");

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

success = nfc.ntag2xx_ReadPage(i, data);

Serial.print("PAGE ");

if (i < 10){

Serial.print("0");

Serial.print(i);}

else{

Serial.print(i);}

Serial.print(": ");

if (success){

nfc.PrintHexChar(data, 4);}

else{

Serial.println("Unable to read the requested page!");}}}

else{

Serial.println("This doesn't seem to be an NTAG203 tag (UUID length != 7 bytes)!");}

Serial.println("\n\nSend a character to scan another tag!");

Serial.flush();

while (!Serial.available());

while (Serial.available()) {

Serial.read();}

Serial.flush();}}

Sau khi tải code lên arduino, hãy đặt thẻ lại gần module. Màn hình serial của arduino sẽ hiển thị các mã thẻ. Thẻ NTAGS có thể sử dụng cho bất kỳ ngành nào với mục đích bảo mật. Code trên chỉ giúp đọc mã thẻ nhưng các thẻ được PN532 lập trình với các cách lập trình khác nhau.

Bảo mật của NTAGS có một chút khác biệt ở mọi phiên bản. Mỗi module đều có các bit khác nhau để bảo mật nhưng tất cả chúng đều có thể sử dụng được với PN532. Một vài thẻ từ NTAGS như NTAG203, NTAG213, NTAG215 và NTAG2016.

Sơ đồ 2D PN532

Sơ đồ 2D PN532

>>> Mời anh em xem thêm:

Tôi là một người làm việc trong lĩnh vực cơ khí, thiết bị công nghiệp....Blog là nơi tôi chia sẻ thông tin hữu ích đến các bạn đọc.
Subscribe
Notify of
0 Bình luận
Inline Feedbacks
View all comments