ویژگیهای ماژول RFID PN532
اگر شما اندکی با الکترونیک آشنا باشید، قطعا نامهای RFID(radio-frequency-identification) و NFC (near-field-communication) را شنیدهاید. ماژول PN532 یکی از ماژولهای RFID-NFC بوده که برای ارتباط میتواند از 3 پروتکل I2C، SPI و HSU استفاده کند. مبنای این ماژول بر آیسی NXP PN532 است. ماژول RFID PN532 دارای ویژگیهای زیر است:
- پشتیبانی از پروتکلهای I2C, SPI, high-speed UART(HSU)
- طراحی PCB جهت استفاده از آنتن
- فاصله ارتباط: 5 تا 7 سانتیمتر
- پشتیبانی ریدر و رایتر RFID شامل موارد زیر میباشد:
- کارت های Mifare 1K 4K، Ultralight و DesFire
- کارتهای ISO / IEC 14443-4 مانند CD97BX ، CD light ، DesFire و P5CN072 (SMX)
- کارت های Innovision Jewel مانند کارت IRT5001
- کارت های FeliCa مانند RCS_860 و RCS_854
دیتاشیت آیسی PN532 را میتوانید از اینجا دانلود کنید.
PN532 NFC RFID Module Datasheet
معرفی پایه های (Pinout) ماژول RFID PN532
همانطور که گفته شد این ماژول برای ارتباط میتواند از 3 پروتکل I2C، SPI و HSU استفاده کند. SPI دارای پایههای مجزا برای ارتباط است ولی I2C و HSU پایههایی مشترک در ماژول دارند. نام پایههای مربوط به I2C در جلوی ماژول و نام پایههای HSU پشت ماژول درج شدهاست. مد HSU به صورت پیشفرض بر روی ماژول فعال میباشد. مد این ماژول را میتوانید توسط سوئیچ کوچک برروی ماژول، به یکی از پروتکلهای SPI، HSU و I2C تغییر دهید. پایه های هر بخش به شرح زیر است:
پروتکل I2C:
- VCC: تغذیه ماژول – 5 ولت
- GND: زمین
- SDA: پین دیتا
- SCL: پین کلاک
پروتکل SPI:
- VCC: تغذیه ماژول – 3v تا 5v
- GND: زمین
- SCK: پین سریال کلاک
- MISO: پین دیتای خروجی
- MOSI: پین دیتای ورودی
- SS: پین انتخاب Slave
- IRQ: پین اینتراپت
- RSTO: پین ریست
پروتکل HSU:
- VCC: تغذیه ماژول – 5 ولت
- GND: زمین
- TXD: پین فرستنده دیتا
- RXD: پین گیرنده دیتا
پین اوت (Pinout) این ماژول را میتوانید در تصویر زیر مشاهده کنید.
لوازمی که به آن احتیاج دارید
قطعات مورد نیاز
نرم افزارهای مورد نیاز
راهاندازی ماژول RFID PN532 با آردوینو
گام اول: سیم بندی
مطابق مدار زیر ماژول را به آردوینو وصل کنید.
گام دوم: نصب کتابخانه
گام سوم: کد
ابتدا کد زیر را روی آردوینو خود آپلود کنید. در این برنامه به علت نیاز به دسترسی به 2 پایه سریال دیگر، از SoftwareSerial استفاده شدهاست.
/*
PN532-NFC-RFID-Module-Library
modified on 18 Nov 2020
by Amir Mohammad Shojaee @ Electropeak
Home
based on www.electroschematics.com Arduino Examples
*/
#include <SoftwareSerial.h>
#include <PN532_SWHSU.h>
#include <PN532.h>
SoftwareSerial SWSerial( 10, 11 ); // RX, TX
PN532_SWHSU pn532swhsu( SWSerial );
PN532 nfc( pn532swhsu );
void setup(void) {
Serial.begin(115200);
Serial.println("Hello Maker!");
nfc.begin();
uint32_t versiondata = nfc.getFirmwareVersion();
if (! versiondata) {
Serial.print("Didn't Find PN53x Module");
while (1); // Halt
}
// Got valid data, print it out!
Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX);
Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC);
Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
// Configure board to read RFID tags
nfc.SAMConfig();
Serial.println("Waiting for an ISO14443A Card ...");
}
void loop(void) {
boolean success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
if (success) {
Serial.println("Found A Card!");
Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
Serial.print("UID Value: ");
for (uint8_t i=0; i < uidLength; i++)
{
Serial.print(" 0x");Serial.print(uid[i], HEX);
}
Serial.println("");
// 2 second halt
delay(2000);
}
else
{
// PN532 probably timed out waiting for a card
Serial.println("Timed out! Waiting for a card...");
}
}
ابتدا بایستی کتابخانههای موردنیاز پیوست شوند. این برنامه برای کار در مد HSU است. در ادامه پایه 10 و 11 جهت اتصال به ماژول به عنوان دو پین سریال تعریف میشوند. اگر کارت را به ماژول نزدیک کنیم، شناسایی میشود و در خروجی سریال مانیتور اطلاعات آن ظاهر میگردد.
عکس زیر را ببینید. کارت را نزدیک ماژول کرده و سپس برمیداریم. مشاهده میشود که ابتدا کارت شناسایی شده و سپس اطلاعات آن در سریال مانیتور نمایش داده میشود.