Toggle Nav

آموزش راه‌اندازی ماژول RFID PN532 با قابلیت خواندن و نوشتن با آردوینو

فهرست مطالب

ویژگی‌های ماژول 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 شامل موارد زیر می‌باشد:
  1. کارت های Mifare 1K 4K، Ultralight و DesFire
  2. کارتهای ISO / IEC 14443-4 مانند CD97BX ، CD light ، DesFire و P5CN072 (SMX)
  3. کارت های Innovision Jewel مانند کارت IRT5001
  4. کارت های FeliCa مانند RCS_860 و RCS_854

دیتاشیت آی‌سی PN532 را می‌توانید از اینجا دانلود کنید.

معرفی پایه های (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) این ماژول را می‌توانید در تصویر زیر مشاهده کنید.

لوازمی که به آن احتیاج دارید

قطعات مورد نیاز

آردوینو UNO R3 × 1
ماژول RFID PN532 × 1
سیم جامپر نری-مادگی × 1

نرم افزارهای مورد نیاز

آردوینو IDE

راه‌اندازی ماژول RFID PN532 با آردوینو

گام اول: سیم بندی

مطابق مدار زیر ماژول را به آردوینو وصل کنید.

گام دوم: نصب کتابخانه

فایل Zip کتابخانه را از اینجا دانلود کنید. سپس آن را از حالت Zip خارج کرده و پوشه‌های درون آن را در محل نصب آردوینو و در قسمت Libraries کپی کنید.

توجه

اگر برای نصب کتابخانه نیاز به راهنمایی بیشتر دارید، به اینجا مراجعه کنید.

گام سوم: کد

ابتدا کد زیر را روی آردوینو خود آپلود کنید. در این برنامه به علت نیاز به دسترسی به 2 پایه سریال دیگر، از SoftwareSerial استفاده شده‌است.

    /*
  PN532-NFC-RFID-Module-Library
  modified on 18 Nov 2020
  by Amir Mohammad Shojaee @ Electropeak
  https://electropeak.com/learn/

  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 جهت اتصال به ماژول به عنوان دو پین سریال تعریف می‌شوند. اگر کارت را  به ماژول نزدیک کنیم، شناسایی می‌شود و در خروجی سریال مانیتور اطلاعات آن ظاهر می‌گردد.

عکس زیر را ببینید. کارت را نزدیک ماژول کرده و سپس برمی‌داریم. مشاهده می‌شود که ابتدا کارت شناسایی شده و سپس اطلاعات آن در سریال مانیتور نمایش داده می‌شود.

از این مطلب خوشتان آمد؟

آخرین مطالب و جدیدترین آموزش ها را در ایمیل خود دریافت کنید

آموزش های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *