در سلسله آموزش های تحلیل و بررسی کتابخانه های آردوینو، این بار به کتابخانه ماژول MFRC552 می پردازیم. همانطور که اطلاع دارید، فناوری RFID یکی از مهم ترین و کاربردی ترین ابزار در پروژه های مختلف به شمار می رود. کارت های بلیط مترو، درب های دیجیتالی هتل ها، شرکت ها و ادارات، سیستم های حضور و غیاب و….. همگی جهت اجرا و فعالیت نیاز به این تکنولوژی دارند. در این تکنولوژی، جهت ارسال و دریافت داده، در یک طرف کارت ها و اصطلاحا تگ ها قرار دارند. این تگ ها دارای یک شماره یکتای مخصوص هستند. در طرف دیگر، ماژولی جهت خواندن شماره تگ ها و یا نوشتن شماره ID بر روی کارت وجود دارد. پیشتر آموزش های بسیاری در دیجی اسپارک برای راه اندازی و کار با ماژول RC522 کار شده است. همچنین پروژه های مختلفی نیز انجام گرفته که با کلیک بر روی این لینک، می توانید به این آموزش ها دسترسی داشته باشید. در این آموزش به تحلیل و بررسی کتابخانه MFRC522 می پردازیم. در ابتدا نحوه نصب این کتابخانه در محیط آردوینو مورد بررسی قرار می گیرد. پس از آن به الزامات فنی و بردهای مورد پشتیبانی این برد می پردازیم. در ادامه به معرفی توابع کلیدی و کاربردی این کتابخانه پرداخته و در نهایت با ارائه مثالی، به بحث خاتمه می دهیم. در ادامه با مرجع تخصصی آردوینو به زبان فارسی، دیجی اسپارک همراه باشید.
نصب کتابخانه MFRC522.h
اولین قدم در استفاده از یک کتابخانه، نصب آن در محیط آردوینو است. برای نصب کتابخانه، دو روش دستی و خودکار وجود دارد. در روش دستی، پس از دانلود فایل های کتابخانه، می بایست آن را در مسیر نصب آردویینو قرار دهید. اما در روش خودکار، تنها با تایپ نام کتابخانه در قسمت مدیریت کتابخانه ها، کتابخانه مورد نظر به صورت خودکار در مخازن آردوینو جستجو شده و پس از یافتن آن، نصب خواهد شد. به همین منظور، ابتدا در نرم افزار آردوینو، بر روی گزینه Tools و سپس Manage Libraries کلید کنید. با کلیک بر روی گزینه Manage Libraries، می توانید وضعیت کتابخانه های نصب شده و لیستی از کتابخانه های جدید و بروز را مشاهده کنید. این مورد در تصویر زیر، قابل مشاهده است.
مطابق فلش قرمز رنگ تصویر فوق، در کادر جستجو، با تایپ نام کتابخانه، می توان آن را یافته و سپس نصب نمود. در اینجا ما عبارت “MFRC522” را تایپ می کنیم. پس از چند لحظه، کتابخانه مورد نظر به شکل تصویر زیر، به نمایش در می آید. با کلیک بر روی گزینه install، این کتابخانه را نصب نمایید.
پس از نصب کتابخانه، نوبت به بررسی توابع و استفاده از آن می رسد. اما پیش از آن، ابتدا به بررسی توابع کلیدی و کاربردی پرداخته و در نهایت با ارائه مثال از کاربرد، به آموزش را پایان می دهیم.
توجه: کتابخانه مورد بررسی در این آموزش، ورژن ۱٫۴٫۸ است.
بردهای مورد پشتیبانی
کتابخانه RC522، یک کتابخانه جامع با قابلیت استفاده در طیف وسیعی از بردهای آردوینو، ESP و میکروکنترلرهای آرم است. این کتابخانه قابلیت نوشتن و خواندن را تحت استاندارد ISO/IEC 14443A/MIFARE داراست. از این کتابخانه می توان در بردهای زیر، استفاده نمود.
- آردوینو میکرو
- آردوینو لئوناردو
- آردوینو مگا
- آردوینو UNO
- آردوینو نانو
- آردوینو میکرو
- بردهای ESP8266
- بردهای Teensy
همچنین جدول زیر که از رفرنس دریافت شده، نحوه سیم کشی و اتصالات در بردهای مختلف آردوینو را نمایش می دهد.
ماژول RFID | برد آردوینو Arduino | |||||||
---|---|---|---|---|---|---|---|---|
MFRC522 | Uno / 101 | Mega | Nano v3 | Leonardo / Micro | Pro Micro | Yun [۴] | Due | |
Signal | Pin | Pin | Pin | Pin | Pin | Pin | Pin | Pin |
RST/Reset | RST | ۹ [۱] | ۵ [۱] | D9 | RESET / ICSP-5 | RST | Pin9 | ۲۲ [۱] |
SPI SS | SDA [۳] | ۱۰ [۲] | ۵۳ [۲] | D10 | ۱۰ | ۱۰ | Pin10 | ۲۳ [۲] |
SPI MOSI | MOSI | ۱۱ / ICSP-4 | ۵۱ | D11 | ICSP-4 | ۱۶ | ICSP4 | SPI-4 |
SPI MISO | MISO | ۱۲ / ICSP-1 | ۵۰ | D12 | ICSP-1 | ۱۴ | ICSP1 | SPI-1 |
SPI SCK | SCK | ۱۳ / ICSP-3 | ۵۲ | D13 | ICSP-3 |
همچنین برای بردهای ESP، نظیر wemos و بردهای Teensy، جدول اتصالات، مطابق آنچه که از رفرنس دریافت شده است، به شرح زیر می باشد.
ESP8266 | Teensy | |||
---|---|---|---|---|
Wemos D1 mini | ۲٫۰ | ++ ۲٫۰ | ۳٫۱ | |
Signal | Pin | Pin | Pin | Pin |
RST/Reset | D3 | ۷ | ۴ | ۹ |
SPI SS | D8 | ۰ | ۲۰ | ۱۰ |
SPI MOSI | D7 | ۲ | ۲۲ | ۱۱ |
SPI MISO | D6 | ۳ | ۲۳ | ۱۲ |
SPI SCK | D5 | ۱ | ۲۱ | ۱۳ |
پس از بررسی الزامات و نکات فنی، نوبت به تحلیل و بررسی توابع کلیدی کتابخانه می رسد. در قسمت بعدی به این موضوع می پردازیم.
توابع کلیدی کتابخانه
در این قسمت به بررسی توابع کلیدی کتابخانه MFRC522 می پردازیم. در رابطه با توابع، در نظر بگیرید که ورودی ها از سمت چپ به راست، به ترتیب شماره های یک، دو، سه و… را به خود اختصاص می دهند. به عبارت دیگر، منظور از ورودی اول سمت چپ ترین ورودی بوده و سایر ورودی ها از ۲ به بعد، به خود شماره اختصاص می دهند.
تابع | ورودی ها | شرح |
MFRC522(byte chipSelectPin, byte resetPowerDownPin) | ورودی اول جهت پایه CS
ورودی دوم پایه جهت ریست و یا مد کم مصرف ماژول RC522 |
این تابع، تابع سازنده کلاس ماژول RFID است. به کمک این تابع تنظیمات اولیه جهت برقراری ارتباط با ماژول RFID صورت می گیرد. ورودی اول این تابع برای تعیین پایه CS برد اردوینو و ورودی دوم جهت تعیین پایه ریست و یا مد کم مصرف ماژول RFID است. البته می توانید این دو ورودی را خالی بگذارید. |
void PCD_WriteRegister(PCD_Register reg, byte value) | ورودی اول شماره رجیستر
ورودی دوم شماره از نوع بایت |
به کمک این تابع می توانید در رجیسترهای ماژول RFID، داده را به طور مستقیم بنویسید. ورودی اول شماره رجیستر و ورودی دوم داده از نوع بایت است. |
void PCD_Init(byte chipSelectPin, byte resetPowerDownPin) | ورودی اول جهت تعیین پایه CS ارتباط SPI
ورودی دوم جهت تعیین پایه مخصوص ریست و خاموش سازی ماژول RFID
|
این تابع جهت راه اندازی اولیه و ارتباط با ماژول RFID به کار می رود. به کمک ورودی اول پایه CS و ورودی دوم ریست/خاموش سازی ماژول تنظیم می گردد. این تابع می تواند بدون ورودی نیز فراخوانی شود. همچنین این تابع تنها با قرار دادن ورودی دوم و خالی گذاشتن ورودی اول، قابل فراخوانی است. |
void PCD_Reset(); | بدون ورودی | به کمک این تابع می توانید ماژول RFID را ریست کنید. |
void PCD_AntennaOn(); | بدون ورودی | به کمک این تابع می توانید آنتن ماژول را فعال کنید. |
void PCD_AntennaOff(); | بدون ورودی | به کمک این تابع می توانید آنتن را خاموش کنید. |
byte PCD_GetAntennaGain(); | بدون ورودی | به کمک این تابع بهره کنونی آنتن را می توانید دریافت کنید. این بهره به صورت بایت در خروجی متابع ظاهر می گردد. |
void PCD_SetAntennaGain(byte mask); | ورودی از نوع بایت جهت تعیین بهره آنتن | به کمک این تابع می توان بهره آنتن(قدرت سیگنال) آنتن ماژول را تعیین کرد. توجه داشته باشید که ورودی به صورت mask است. به عنوان مثال عبارت ۰x02<<4 تعیین کننده عدد ۸ است. بیشینه بهره نیز ۴۸ خواهد بود. |
void PCD_SoftPowerDown(); | بدون ورودی | به کمک این تابع می توانید ماژول را خاموش کنید. این تابع در کاهش مصرف انرژی، نقش به سزایی دارد. |
void PCD_SoftPowerUp(); | بدون ورودی | به کمک این تابع می توانید ماژول که در حالت خاموش قرار گرفته را روشن نمایید. |
bool PICC_IsNewCardPresent() | بدون ورودی | با فراخوانی این تابع، چنانچه کارتی تشخیص داده شود، خروجی تابع true و در غیر اینصورت خروجی false خواهد بود. |
bool MIFARE_SetUid(byte *newUid, byte uidSize, bool logErrors); | ورودی اول جهت ID جدید
ورودی دوم سایز ID ورودی سوم تعین لاگ خطا بر روی سریال |
به کمک این تابع می توانید بر روی تگ و یا کارت RFID، ID نوشته و یا آیدی قبلی را تغییر دهید. ورودی اول ID، ورودی دوم سایز ID است. ورودی سوم نیز در صورتیکه true باشد، لاگ خطا بر روی سریال مانیتور ایجاد می کند. |
bool PICC_ReadCardSerial() | بدون ورودی | به کمک این تابع می توانید شماره ID کارت را بخوانید. در صورتیکه خواندن موفقیت آمیز باشد، خروجی true خواهد شد. این تابع id خوانده شده را در متغیر uidByte کلاس ذخیره می کند. توجه داشته باشید که قبل از این تابع، حتما تابع PICC_IsNewCardPresent فراخوانی شده باشد. |
اجرای نمونه برنامه
در این قسمت به بررسی دو نمونه برنامه می پردازیم. برنامه نخست اطلاعات ID یک کارت را خوانده و نمایش می دهد. این برنامه را در زیر مشاهده می نمایید.
#include <SPI.h> //فراخوانی کتابخانه SPI جهت ارتباط به MCR522 #include <MFRC522.h> //فراخوانی کتابخانه MCR522 #define SS_PIN 10 //انتخاب پایه ۱۰ به عنوان چیپ سلکت ارتباط SPI #define RST_PIN 9 // MFRC522 mfrc522(SS_PIN, RST_PIN); //ایجاد یک شی از کلاس کتابخانه RC522 void setup() { Serial.begin(9600); SPI.begin(); // راه اندازی ارتباط SPI mfrc522.PCD_Init(); // راه اندازی ارتباط با ماژول RFID } void loop() { if ( ! mfrc522.PICC_IsNewCardPresent()) //بررسی وجود کارت در نزدیکی ماژول چنانچه کارتی وجود نداشته باشد برنامه متوقف می شود { return; } if ( ! mfrc522.PICC_ReadCardSerial()) //خواندن اطلاعات کارت چنانچه خواندن موفقیت آمیز نباشد برنامه متوقف می شود. { return; } //نمایش UID در سریال مانیتور Serial.print("UID tag :"); String content= ""; byte letter; for (byte i = 0; i < mfrc522.uid.size; i++) { //توجه مقادیر کمتر از ۰x10 به عنوان خطا شناسایی شده و به جای آن صفر قرار می دهیم. Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "); //خواندن اطلاعات کارت از آرایه uidByte که در کلاس پیشتر تعریف شده در صورتیکه مقدار با خطا همراه باشد صفر قرار می دهیم Serial.print(mfrc522.uid.uidByte[i], HEX); content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ")); content.concat(String(mfrc522.uid.uidByte[i], HEX)); } }
در ادامه، به کمک برنامه زیر، مقدار UID کارت و یا تگ را تغییر می دهیم. از آنجاییکه با تغییر UID دیگر نمی توانید از کارت در دستگاه ها دیگر استفاده کنید، لذا از این رو دقت نظر لازم را در نظر داشته باشید.
#include <SPI.h> //فراخوانی کتابخانه SPI #include <MFRC522.h> //فراخوانی کتابخانه MCR522 #define RST_PIN 9 // انتخاب پایه ریست جهت ریست ماژول در مواقع لزوم #define SS_PIN 10 //انتخاب پایه چیپ سلکت ارتباط SPI MFRC522 mfrc522(SS_PIN, RST_PIN); // ساختن یک نمونه از کلاس کتابخانه و تعیین مقادیر #define NEW_UID {0xDE, 0xAD, 0xBE, 0xEF} //تعیین مقدار جدید UID جهت نوشتن بر روی کارت void setup() { Serial.begin(9600); delay(1000); SPI.begin(); // راه اندازی باس spi mfrc522.PCD_Init(); //راه اندازی اولیه ماژول RFID Serial.println(F("change RFID UID ")); Serial.flush(); } void loop() { byte newUid[] = NEW_UID; if ( mfrc522.MIFARE_SetUid(newUid, (byte)4, true) ) { //نوشتن ID جدید در کارت Serial.println("Wrote new UID to card."); Serial.flush(); } delay(1000); }
لوازم متناسب با کتابخانه
- برد آردوینو UNO
- برد آردوینو مگا
- برد آردوینو میکرو
- برد آردوینو نانو
- برد آردوینو لئوناردو
- برد ESP8266
- برد ESP32
- ماژول RFID از نوع RC522
جمع بندی
در این آموزش به تحلیل و بررسی کتابخانه RFID ماژول MFRC522 پرداختیم. ماژولMCRF522 یک ماژول فوق العاده کاربردی در پروژه های مبتنی بر فناوری RFID است. به کمک این ماژول می توانید کارت های RFID مطابق با فرکانس کاری ماژول را بخوانید. در کنار این می توانید بر روی کارت، UID جدید و دلخواه بنویسید. در این آموزش به تحلیل و بررسی توابع کلیدی این کتابخانه کاربردی پرداختیم. در ابتدا نحوه نصب آن را مورد بررسی قرار دادیم. سپس در ادامه بردهای مورد پشتیبانی و نحوه اتصالات را از نظر گذراندیم. پس از این مرحله، ضمن معرفی توابع کلیدی و کاربردی، به تشریح و نحوه استفاده از توابع پرداختیم. در نهایت با ارائه دو مثال از نحوه خواندن اطلاعات کارت و نوشتن UID بر روی آن، به بحث حاتمه می دهیم.
چنانچه در مراحل راه اندازی و انجام این پروژه با مشکل مواجه شدید، بدون هیچ نگرانی در انتهای همین پست، به صورت ثبت نظر سوالتان را مطرح کنید. من در سریعترین زمان ممکن پاسخ رفع مشکل شما را خواهم داد. همچنین اگر ایرادی در کدها و یا مراحل اجرایی وجود دارند میتوانید از همین طریق اطلاع رسانی کنید.
سلام وقت بخیر.
برای دسترسی به تمامی توابع و آشنایی با کاربرد هرکدوم برای اینکه امکان استفاده راه تر از اونها باشه سایت یا منبعی رو معرفی کنید.
ممنون
سلام
در این آموزش سعی شده که کلیدی ترین توابع مورد تحلیل قرار گیرد. برای دسترسی به کلیه توابع، می بایست صفحه گیت هاب کتابخانه را بررسی کنید. برای بررسی صفحه گیت هاب کتابخانه روی لینک زیر کلیک کنید.
لینک صفحه گیت هاب کتابخانه
در این صفحه، فایل های اصلی کتابخانه در پوشه src قرار گرفته اند. در این پوشه، فایل ها با پسوند h. لیست کامل توابع را در خود قرار می دهند. همچنین در فایل ها با پسوند cpp. کدها و نحوه پیاده سازی توابع مشاهده می شود. چنانچه در این زمینه ابهامی وجود داشت، درکامنت بعدی مورد را مطرح نمایید.
سلام
علت پیام authentication failed هنگام خواندن تگ rfid چیست؟
سلام
لطفا کل پیام هایی که در سریال مانیتور مشاهده می کنید را در پیام بعد قرار دهید.
تگ شما فورمت شده ب ndef با یک نرم افزار موبایل فورمت کنید