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

نحوه راه اندازی یک ماژول NFC PN532 با آردوینو

اگر راه اندازی ماژول PN532 NFC و بررسی کاربردهای متعدد این قطعه به موضوعی جدید در یکی از پروژه‌های شما تبدیل شده است یا تصمیم دارید خودتان یک اسکنر کارت NFC را بسازید، این مقاله می‌تواند مرجع یادگیری کاملی برای رسیدن شما به این اهداف باشد. زیرا در این آموزش قصد داریم ماژول PN532 NFC-RFID را در سه مد UART، I2C و SPI با ماژول آردوینو راه اندازی کنیم و در آخر شماره‌های UID کارت NFC را بر روی یک نمایشگر 0.96 اینچ OLED نمایش دهیم. PN532 یک ماژول برپایه ساز و کار ارتباطی NFC و RFID است که امروزه اکثراً به عنوان ابزاری برای برقراری ارتباط از طریق تلفن همراه، به ویژه انجام پرداخت مورد استفاده قرار می‌گیرد. این ماژول را می‌توان به صورت تعبیه‌شده در ماژول‌های دیگر دید که امکان استفاده‌ی آسان از آن در پروژه‌های آردوینو را فراهم می‌کند.

یک ماژول NFC که در حال خواندن داده‌ها از تلفن همراه در فاصله بسیار نزدیک است

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

ما برای انجام پروژه راه اندازی ماژول PN532 به قطعات زیر نیاز خواهیم داشت که شما می‌توانید در صورت نیاز، این قطعات را از لینک مربوطه خریداری کنید:

 قبل از پرداختن به معرفی ماژول PN532 بیایید با تکنولوژی NFC و نحوه عملکرد آن آشنا شویم.

NFC چیست؟

ارتباط از فاصله نزدیک یا Near Field Communication (NFC)  یک تکنولوژی استاندارد براساس تشخیص فرکانس رادیویی (RFID) است، یعنی اطلاعات را به صورت بی‌سیم و از فاصله‌ی بسیار کوتاه‌تری نسبت به ارتباط RFID انتقال می‌دهد.

یک تگ NFC برچسبی در دست انسان

فناوری NFC با راحت‌تر نمودن انجام تراکنش‌های مالی، تبادل محتوای دیجیتال و اتصال به دستگاه‌های الکترونیکی، زندگی را برای افراد سراسر جهان آسان‌تر کرده‌ است. چرا که تکنولوژی NFC با صدها میلیون کارت‌ غیرتماسی موجود در سراسر جهان سازگار است.

نحوه عملکرد NFC :

NFC براساس اصل القای الکترومغناطیسی در فواصل بسیار کوتاه عمل می‌کند. به طوری که با عبور جریان الکتریکی از یک سیم‌پیچ، دستگاهِ با قابلیت خواندن (reader) یک میدان معناطیسی را با تگ ایجاد می‌کند.

زمانی که یک تگ متشکل از یک سیم‌پیچ، در نزدیکی این دستگاه قرار می‌گیرد، میدان مغناطیسی، بدون هیچ گونه تماس فیزیکی و یا بدون هیچ سیمی، یک جریان الکتریکی در تگ NFC ایجاد می‌کند. بنابراین پس از کامل شدن ارتباط اولیه، هر داده‌ی ذخیره شده بر روی تگ به صورت بی‌سیم به دستگاه با قابلیت خواندن منتقل می‌شود.

ایجاد ارتباط بین کارت و دستگاه کارتخوان NFC توسط امواج مغناطیسی

تفاوت بین NFC و RFID چیست؟

 تفاوت اصلی بین ارتباطات RFID و NFC در فاصله‌ی انتقال داده آنها است. معمولاً RFID برای مسافت‌های طولانی‌تر مورد استفاده قرار می‌گیرد. برای مثال، برخی از مناطق، عوارض جاده‌ای را به طور خودکار از طریق RFID خودروها جمع‌آوری می‌کنند. چنانچه تگ RFID مجهز به یک منبع تغذیه باشد، امکان برقراری ارتباطات در فواصل بسیار طولانی‌تر نیز امکان‌پذیر خواهد شد.

تفاوت‌های امواج رادیویی RFID و NFC

با این وجود، ارتباط امن NFC می‌تواند از فواصلی در حد چند سانتی‌متر پشتیبانی کند. طوری‌که در اکثر اپلیکیشن‌های تلفن همراه می‌بینید که تنها درصورت وجود تماس فیزیکی، نرم‌افزار قادر به برقراری ارتباط خواهد بود. دستگاه‌های مجهز به NFC می‌توانند به‌عنوان یک دستگاه کارت‌خوان یا حتی یک تگ عمل کنند. این قابلیت دوطرفه به شما این امکان را می‌دهد تا از یک سخت‌افزار مانند موبایل خود برای انواع اپلیکیشن‌های متنوع برای تبادل اطلاعات از طریق NFC استفاده کنید.

کاربردهای اصلی NFC

در ادامه چند کاربرد از ارتباط  NFC را برای شما بیان نموده‌ایم:

  • پرداخت از طریق موبایل. مانند سرویس‌های Apple pay NFC , Google Wallet
  • جفت شدن دستگاه‌ها باضربه؛ دستگاه‌های مبتنی‌بر بلوتوث به جای فعالسازی دستی، تنها با یک ضربه (کلیک) با یکدیگر جفت می‌شوند.
  • امکان جانمایی قطعات دیجیتال در محصولات فیزیکی؛ ابعاد کوچک دستگاه‌های مجهز به NFC سبب شده تا آن‌ها را به راحتی در محصولات مختلف به کار ببرند که تجربه‌ی منحصر به فردی را هنگام تعامل ایجاد می‌کند.
  • برقراری امنیت در ارتباطات
  • جایگزین شدن با پسورد
  • احراز هویت محصول

از آنجا که ارتباط NFC زیرمجموعه‌ای از ارتباطات رادیویی  RFID به‌شمار می‌آید پس می‌توان کاربرد‌های مشترکی را در هر دو مورد دید اما می‌بایست بسته‌به اهداف پروژه مدنظر خود، مانند میزان فاصله تا ماژول و امنیت در انتقال داده‌ها، از راه‌ ارتباطی متناسبی استفاده کنید.

معرفی ماژول PN532 NFC

PN532 یک کنترلر RFID-NFC، ساخته شده توسط شرکت NXP و مبتنی‌بر معماری میکروکنترلر 80C51 می‌باشد که ارتباط بی‌سیم در فرکانس 13.56 مگاهرتز را امکان‌پذیر می‌سازد. علاوه‌بر این، با پشتیبانی از کارت MIFARE Classic 1K/MIFARE Classic 4K امکان انتقال سرعت بالاتر تا  حداکثر 424 کیلوبیت بر ثانیه را در هر دو جهت فراهم می‌کند.

پشت و روی یک ماژول PN532 NFC

مشخصات ماژول PN532 NFC

  • محدوده ولتاژ تغذیه: 2.7 الی 5.5 ولت
  • دارای هسته میکروکنترلر 80C51 با 40 کیلوبایت حافظه ROM و 1 کیلوبایت حافظه RAM
  • دارای دیکدر و دمدولاتور بسیار یکپارچه
  • دارای تشخیص دهنده یکپارچه سطح سیگنال RF
  • پشتیبانی از/ MIFARE  ISO/IEC 14443A
  • پشتیبانی از ISO/IEC 14443B (فقط مد Read/Writer)

بدانیم: سری استانداردهای ISO/IEC 14443 پارامترهایی را به‌منظور شناسایی کارت‌ها و اشیا برای تبادلات بین المللی تعریف می‌کنند.

  • پشتیبانی از حداکثر فاصله‌ی 5 سانتی‌متر در مد خواندن و نوشتن برای ارتباط با / MIFARE  ISO/IEC 14443A و ISO/IEC 14443B یا کارت‌های Felica
  • پشتیبانی از حداکثر فاصله‌ی 5 سانتی متر در NFCIP-1 بسته به سایز و تنظیمات آنتن و منبع تغذیه
  • پشتیبانی از حداکثر فاصله‌ی 10 سانتی متر در شبیه‌سازی / MIFARE  ISO/IEC 14443A یا مد کارت FeliCa
  • امکان برقراری ارتباط با رابط RF با سرعت بیش از 424 کیلوبیت بر ثانیه با استفاده از قطعات آنالوگ خارجی
  • دارای وقفه‌های اختصاصی
  • مدهای کم مصرف سخت‌افزاری و نرم‌افزاری
  • دارای تایمرهای قابل برنامه‌ریزی
  • دارای کریستال اسیلاتور

در اینجا به ویژگی‌های اصلی ماژول PN532 اشاره شد و شما می‌توانید برای اطلاع از سایر ویژگی‌های این ماژول دیتاشیت PN532 را مطالعه کنید.

نحوه انتخاب مد ارتباطی ماژول PN532 NFC

همانطور که دانستیم، یکی از مزیت‌های بزرگ ماژول PN532 NFC این است که می‌تواند از مد‌های مختلف مانند UART،I2C یا SPI برای ارتباط با آردوینو استفاده کند. البته هر یک از این پروتکل‌های مختلف از پین‌ها و کتابخانه‌های خاصی برای ارتباط با میکروکنترلر استفاده می‌کنند و ما در فاز برنامه نویسی می‌بایست هر فایل کتابخانه را به شکل اختصاصی دانلود و به برنامه اضافه کنیم.

پایه‌های SEL0 و SEL1 روی ماژول PN532

برای انتخاب مد ارتباطی در انجام اتصالات این ماژول ابتدا لازم است پایه‌های SEL0 و SEL1 ماژول PN532، با استفاده از دیپ سوئیچ تعبیه شده روی برد آن، برای هر مد تنظیم شود.

SEL1SEL0Mode
00UART
10SPI
01L2C

مقایسه کاربرد ماژول RC522 و PN532

ماژول RC522 به طور قطع معروف‌ترین ماژول RFID برای پروژه‌های آردوینو است که بیشتر برای “شناسایی و تایید هویت” به کار می‌رود اما ماژول PN532 به ویژه از نظر گزینه‌های ارتباطی، مزیت‌های قابل ملاحظه‌ای نسبت به RC522 دارد مانند “ایجاد ارتباط امن” و “انتقال اطلاعات از فاصله کم” که به همین خاطر برای انجام تراکنش‌های مالی مورد استفاده قرار می‌گیرد.

کیت ماژول PN532 NFC-RFID همراه‌با کارن و تگ
کیت ماژول RC522همراه‌با کارت و تگ RFID

کارت‌ NFC چیست؟

کارت یا تگ‌های NFC برای ایجاد ارتباط، تحت موج‌های رادیویی مانند سایر تگ‌های RFID عمل می‌کنند. تگ NFC و دستگاه NFC ریدر براساس فرمت تبادل داده NFC، اطلاعات را با یکدیگر تبادل کنند. تگ NFC می‌تواند کارت ATM، کارت سفر، کارت مترو و سایر کارت‌های دیگر باشد.

تعدادی کارت NFC

نحوه عملکرد یک تگ NFC به این شکل است که ابتدا این تگ برای فعالسازی آنتن موجود در دستگاه گیرنده، امواج رادیویی ارسال می‌کند و با این کار، گیرنده اطلاعات دریافتی را اعتبارسنجی می‌کند تا تبادل اطلاعات به طور کامل انجام شود. البته ناگفته نماند که این فناوری در یک فاصله بسیار کوتاه حدود 4 اینچ قابل استفاده است.

مزیت دیگر تگ‌های NFC، بدون باتری کار کردن آن‌ها است به این دلیل‌که تغذیه موردنیاز خود را از دستگاه دیگری مانند یک تلفن همراه تأمین می‌کنند.

توجه:

ازآنجاکه مدهای ارتباطی مختلفی برای راه اندازی ماژول PN532 در دسترس هستند، بنابراین در هر مورد باید از کتابخانه صحیحی استفاده شود. پیشرفته‌ترین کتابخانه‌ای که از تمام پروتکل‌های ارتباطی پشتیبانی می‌کند، کتابخانه PN532 Elechouse می‌باشد. پس از اتمام دانلود، فایل را از حالت فشرده خارج کنید. سپس کتابخانه‌های آن را از مسیر Library Manager به آردوینو IDE اضافه کنید، یا می‌توانید برای راه اندازی ماژول PN532 در هر پروتکل ارتباطی از کتابخانه‌های لینک داده شده مخصوص آن مد استفاده کنید.


راه اندازی ماژول PN532 NTC در مد UART


در این بخش با خواندن اطلاعات و داده‌ NFC از طریق مد High Speed UART یا همان ارتباط سریال کار خود را شروع می‌کنیم.

  • در مرحله اول ماژول PN532 را به صورت زیر به آردوینو متصل می‌کنیم. (پایه‌های GND, VCC, Tx و Rx در پشت ماژول مشخص شده‌اند.)
  • سپس پایه‌های SEL0 و SEL1 را برای فعال کردن این مد، تنظیم می‌کنیم.
نحوه سیم‌بندی ماژول PN532 NTC و آردوینو، در مد UART
  • GND (Ground) <-> GND
  • Vcc (Power supply) <-> 5V
  • Tx (Clock) <-> D3
  • Rx (Data) <-> D2

کد آردوینو

برای ارتباط در مد UART، ابتدا کتابخانه‌های زیر را در سایت github دانلود و از مسیر Library Manager به آردوینو IDE اضافه کنید:

  1. PN532_HSU Library
  2. PN532_SWHSU Library

سپس برنامه زیر را کپی و آن را بر روی آردوینو خود آپلود نمایید.

#include <SoftwareSerial.h>
#include <PN532_SWHSU.h>
#include <PN532.h>
SoftwareSerial SWSerial( 3, 2 ); // RX, TX
 
PN532_SWHSU pn532swhsu( SWSerial );
PN532 nfc( pn532swhsu );
String tagId = "None", dispTag = "None";
byte nuidPICC[4];
 
void setup(void)
{
  Serial.begin(115200);
  Serial.println("Hello Maker!");
  //  Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
  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()
{
  readNFC();
}
 
 
void readNFC()
{
  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.print("UID Length: ");
    Serial.print(uidLength, DEC);
    Serial.println(" bytes");
    Serial.print("UID Value: ");
    for (uint8_t i = 0; i < uidLength; i++)
    {
      nuidPICC[i] = uid[i];
      Serial.print(" "); Serial.print(uid[i], DEC);
    }
    Serial.println();
    tagId = tagToString(nuidPICC);
    dispTag = tagId;
    Serial.print(F("tagId is : "));
    Serial.println(tagId);
    Serial.println("");
    delay(1000);  // 1 second halt
  }
  else
  {
    // PN532 probably timed out waiting for a card
    Serial.println("Timed out! Waiting for a card...");
  }
}
String tagToString(byte id[4])
{
  String tagId = "";
  for (byte i = 0; i < 4; i++)
  {
    if (i < 3) tagId += String(id[i]) + ".";
    else tagId += String(id[i]);
  }
  return tagId;
}

پس از آپلود کد، مانیتور سریال را باز کرده و با نزدیک کردن کارت‌های NFC به ماژول PN532، آن را تست کنید.

نمایش داده‎‌های 4 بایتی کارت NFC در مانیتور سریال، پس از هربار نزدیک نمودن به ماژول  PN532

در مورد مد پر سرعت UART، تراشه قادر است تنها داده‌های به طول 4 بایت داده از کارت‌های NFC را بخواند و بیش از این مقدار در این مد قابل خواندن نمی‌باشد.


راه اندازی ماژول PN532 NTC در مد I2C


اکنون می‌خواهیم داده NFC را در مد I2C بخوانیم. در گام اول ماژول PN532 را مطابق تصویر زیر به آردوینو خود متصل کنید و سپس تنظیمات مربوطه به پین‌های SEL0 و SEL1 را برای فعالسازی این مد، روی برد اعمال کنید.

نحوه سیم‌بندی ماژول PN532 NFC و آردوینو در مد I2C
  • GND (Ground) <-> GND
  • VCC (Power supply) <-> 5V
  • SDA (Data) <-> A4
  • SCL (Clock) <-> A5
اتمام مرحله سیم‌بندی دو ماژول PN532 NFC و آردوینو روی بردبورد

کد آردوینو

برای ارتباط با ماژول از طریق I2C، “کتابخانه PN532_I2C” موجود در سایت github را دانلود و از مسیر Library Manager به آردوینو IDE اضافه کنید. سپس کد زیر را کپی و آن را بر روی برد آردوینو خود آپلود نمایید.

#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>
PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc = NfcAdapter(pn532_i2c);
String tagId = "None";
byte nuidPICC[4];
 
void setup(void) 
{
 Serial.begin(115200);
 Serial.println("System initialized");
 nfc.begin();
}
 
void loop() 
{
 readNFC();
}
 
void readNFC() 
{
 if (nfc.tagPresent())
 {
   NfcTag tag = nfc.read();
   tag.print();
   tagId = tag.getUidString();
 }
 delay(5000);
}

پس از آپلود کد، مانیتورسریال را باز کرده و با نزدیک کردن کارت‌های NFC متفاوت به ماژول PN532، آن را تست کنید. بعد از نزدیک شدن کارت NFC به ماژول متوجه می‌شوید در مد I2C، تراشه قادر به خواندن 4 بایتی و همینطور داده‌های 7 بایتی از تگ‌های NFC مختلف است.

نمایش داده‌ کارت‌های 7 و 4 بایتی NFC در مانیتور سریال بعد از نزدیک شدن کارت به ماژول

راه اندازی ماژول PN532 NTC در مد SPI


اکنون نوبت به راه‌ اندازی ماژول PN532 از طریق مد SPI است. مانند گذشته پایه های ماژول NFC را مطابق تصویر زیر به آردوینو متصل کنید و پین‌های SEL0 و SEL1 را نیز روی برد تنظیم کنید.

نحوه سیم‌بندی ماژول PN532 NFC و آردوینو در مد SPI
  • VCC (Power supply) <-> 5V
  • RST (Reset) <-> 9
  • GND (Ground) <-> GND
  • MISO (Master Input Slave Output) <-> 11
  • MOSI (Master Output Slave Input) <-> 12
  • SCK (Serial Clock) <-> 13
  • SS (Slave select) <-> 10
اتمام مرحله سیم‌بندی ماژول‌های  PN532  و آردوینو روی بردبورد

کد آردوینو

برای راه‌ اندازی ماژول در مد SPI، ابتدا کتابخانه PN532_SPI.h  را از سایت github دانلود و از مسیر Library Manager به آردوینو IDE اضافه کنید.

حالا کد زیر را کپی و آن را بر روی آردوینو خود آپلود نمایید.

// for SPI Communication
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
#include <NfcAdapter.h>
PN532_SPI interface(SPI, 10); // create a PN532 SPI interface with the SPI CS terminal located at digital pin 10
NfcAdapter nfc = NfcAdapter(interface); // create an NFC adapter object
String tagId = "None";
 
void setup(void) 
{
 Serial.begin(115200);
 Serial.println("System initialized");
 nfc.begin();
}
 
void loop() 
{
 readNFC();
}
 
void readNFC() 
{
 if (nfc.tagPresent())
 {
   NfcTag tag = nfc.read();
   tag.print();
   tagId = tag.getUidString();
 }
 delay(5000);
}

در این مد نیز همانطور که می‌بینید، کارت‌های 4 بایتی و 7 بایتی NFC  به خوبی کار می‌کنند.

نمایش داده‌های 4 بایتی و 7 بایتی کارت‌های NFC مختلف در مانیتور سریال بعد از خواند اطلاعات توسط PN532

ساخت دستگاه اسکنر کارت NFC  با نمایشگر OLED


 در این بخش قصد داریم یک ماژول اسکنر NFC (NFC Reader) قابل حمل را با استفاده از ماژول PN532 و آردوینو بسازیم و حتی داده‌های خوانده‌شده را در یک نمایشگر 0.96 اینچی OLED نمایش دهیم. بدین‌منظور قطعات را به صورت زیر به آردوینو متصل می‌کنیم.

نحوه سیم‌بندی ماژول‌های PN532، آردوینو و نمایشگر OLED
  • GND (Ground) <-> GND
  • VCC (Power supply) <-> 5V
  • SDA (Data) <-> A4
  • SCL (Clock) <-> A5

کد آردوینو

برای ایجاد این اسکنر NFC قابل حمل، ترجیحاً از جدیدترین کتابخانه Adafruit PN532 در سایت github استفاده می‌کنیم. این کتابخانه برای بردهای Adafruit PN532 NFC/RFID نوشته شده و برای بردهای آردوینو Nano و Uno در مدهای SPI و I2C نیز قابل استفاده است.

علاوه‌براین به کتابخانه‌های دیگری نیز نیاز داریم. بدین منظور کافیست کتابخانه‌های زیر را از سایت گیت هاب دانلود و سپس از مسیر Library Manager آن‌ها را به آردوینو IDE اضافه کنید.

  1. Adafruit PN532 Library
  2. Adafruit GFX Library
  3. SSD1306 OLED Library

سپس کد زیر را کپی و آن را بر روی برد آردوینو خود آپلود کنید.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_PN532.h>
 
#define PN532_IRQ   (2)
#define PN532_RESET (3)  // Not connected by default on the NFC Shield
 
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET     4 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C ///< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32;
 
Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);
 
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
 
void setup(void) 
{
  Serial.begin(115200);
  while (!Serial) delay(10); // for Leonardo/Micro/Zero
  Serial.println("Hello!");
 
  nfc.begin();
 
  if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS))
  {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;); // Don't proceed, loop forever
  }
 
  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) 
  {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  
  // Got ok 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);
 
  display.clearDisplay();
  display.setCursor(0, 0); //oled display
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.print("Found chip PN5");
  display.print((versiondata >> 24) & 0xFF, HEX);
 
  display.setCursor(0, 20); //oled display
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.print("Firmware ver. ");
  display.print((versiondata >> 16) & 0xFF, DEC);
  display.print(".");
  display.print((versiondata >> 8) & 0xFF, DEC);
  
  nfc.setPassiveActivationRetries(0xFF);
  
  // configure board to read RFID tags
  nfc.SAMConfig();
  
  Serial.println("Waiting for an ISO14443A card");
 
  display.setCursor(0, 40); //oled display
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.print("Waiting for NFC Card");
  display.display();
 
}
 
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: ");
 
     display.clearDisplay();
    display.setCursor(10, 0); //oled display
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.print("UID Length:");
    display.print(uidLength, DEC);
    display.print(" bytes");
 
    display.setCursor(35, 20); //oled display
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.println("UID Value: ");
    display.setCursor(5, 35); //oled display
 
    
    for (uint8_t i=0; i < uidLength; i++) 
    {
    
      Serial.print(" 0x");
      Serial.print(uid[i], HEX); 
       display.print(" 0x");
      display.print(uid[i], HEX);
      display.display();
    }
    Serial.println("");
  // Wait 1 second before continuing
  delay(1000);
  }
  else
  {
    // PN532 probably timed out waiting for a card
    Serial.println("Timed out waiting for a card");
  }
}

پس از آپلود کد، می‌توانید فرآیند تست را آغاز کنید. یعنی زمانی که نمایشگر OLED ورژن firmware را که برابر با 1.6 است را نمایش می‌دهد و از شما می‌خواهد کارت‌های NFC را اسکن کنید.

اتمام ساخت اسکنر با PN532 و نمایش پیام انتظار برای اسکن کارت NFC روی نمایشگر

اکنون تعدادی کارت NFC را به برد PN532 NFC نزدیک کنید. ماژول PN532 طول بایت داده را همراه با مقدار UID می‌خواند و آن‌ها را بر روی صفحه نمایش OLED نمایش می‌دهد.

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

با توجه به نوع کارت NFC، گاهی اوقات طول داده برابر 4 بایت و گاهی 7 بایت است.

خواندن و نمایش اطلاعات 7 یا 4 بایتی کارت‌های NFC توسط اسکنر

در صورتی که نمی‌خواهید از نمایشگر برای پروژه خود استفاده کنید، می‌توانید مقدار UID و طول بایت را بر روی مانیتور سریال نمایش دهید.

نمایش داده‌های NFC کارت اسکن‌شده روی مانیتور‌سریال به‌جای نمایشگر OLED

سخن پایانی

ما با شناخت نحوه عملکرد و کاربردهای امواج رادیویی NFC دانستیم که چطور می‌توان یک ماژول PN532 NFC را با آردوینو راه اندازی کنیم و داده‌های خوانده شده از تگ یا کارت NFC را روی یک نمایشگر به نمایش بگذاریم. شما نیز می‌توانید بسته به میزان خلاقیت و مهارت خود از این راه‌کار در اجرای پروژه‌های مربوط به هوشمندسازی قفل درب‌‌ها یا سیستم پرداخت NFC موبایل بانک در فروشگاه‌ها و … استفاده نمایید.

چنانچه در روند انجام این آموزش با سؤال یا مشکلی مواجه شده‌اید، می‌توانید با ارسال پرسش یا حتی پیشنهادات خود در بخش دیدگاه این صفحه، پاسخ خود را در اسرع وقت از کارشناسان فنی مجموعه روبوایکیو دریافت کنید.

مقالات مشابه

۲ دیدگاه. Leave new

  • سلام و وقت بخیر
    من یک عدد ماژول نانو خریدم از همین مدلی که توی این مقاله هست ولی متاسفانه سرعت آن یک چهارم سرعت عادی است .
    برای مثال وقتی یک برنامه چشمک زن ساده روی آن آپلود میکنم و تاخیر ها را ۱۰۰۰ میلی ثانیه تنظیم میکنم مشاهده میشود که چشمک زدن ال ای دی به فاصله ۴ ثانیه ای انجام میشود . ضمنا برای ارتباط با سریال مانیتور مجبور شدم فرکانس سریال را به ۲۴۰۰ تغییر بدهم تا حروف و علایم ارسالی از اردوینو درست نشان داده شود .
    لطفا راهنمایی بفرمایید.

    پاسخ
    • سلام و درود بر شما رضای عزیز
      در صورتی که مشکل نرم‌افزاری باشه، با حذف و نصب مجدد برنامه آردوینو (یا تست روی یک سیستم دیگر) و یا آپلود مجدد بوت لودر، حل خواهد شد در غیر این‌صورت احتمالا مشکل سخت‌افزاری دارد و نیاز به بررسی بیشتر هست.

      پاسخ

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

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

Fill out this field
Fill out this field
لطفاً یک نشانی ایمیل معتبر بنویسید.
You need to agree with the terms to proceed

پر بازدید ترین مقالات