راه اندازی ماژول RFID توسط رزبری پای

الکترونیک و رباتیک -> ماژول ها و سنسور ها 1299 2 کاربر آکادمی پارتینه

ماژول RFC RC522 یک ماژول افزودنی ساده است که می‌تواند توسط رزبری پای یا هر پردازنده‌ی دیگری برای خواندن تگ و کارت‌های MIFARE استفاده شود. این قابلیت یک ویژگی عالی است که در سیستم‌های امنیتی یا هرکاربردی که در آن نیاز به شناسایی یک شی یا شخص بدون فشار دادن دکمه ، سوئیچ  یا سنسوری باشد، کاربرد دارد. با مخفی‌کردن تگ‌های غیرتماسی در داخل اشیاء می‌توان یک شناسه منحصر به فرد به آنها اختصاص داد که توسط رزبری پای قابل خواندن است.

یکی از کاربردهای معمول RFID استفاده در سیستم‌های امنیتی است که در آن از یک تگ برای فعال یا غیرفعال کردن یک سیستم هشداردهنده استفاده شود. همچینی کاربردهای دیگری از قبیل سیستم‌های حضور و غیاب، تحلیل‌های آزمایشگاهی، بازی‌ها و...دارد.

پروتکل ها 
تمامی ماژول‌هایی که از چیپ RC522 ساخته شده‌اند، تمامی تگ‌ها با پروتکل‌های زیر را پشتیبانی می‌کنند.

• MIFARE Mini
• MIFARE 1K
• MIFARE 4K
• MIFARE Ultralight
• MIFARE DESFire EV1
• MIFARE Plus RF

این ماژول‌های RFID قابلیت خواندن کارت‌های بانکی بدون تماس را نداشته و می‌توانند یک شناسه را از تلفن‌های هوشمند بخوانند. اما به دلیل آنکه این شناسه در هر زمان متفاوت است این ویژگی در بیشتر موقعیت‌ها مفید نیست.

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

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

مواد اولیه :
# عنوان تعداد لینک
0 بورد رزبری پای ( Raspberry Pi ) 1 لینک خرید
1 ماژول ریدر NFC مخصوص رزبری پای 1 لینک خرید
2 سیم جامپر 1 لینک خرید

مرحله 1 : اتصالات و دیاگرام مداری

ماژول RC522 دارای هشت پین است که تنها هفت عدد آن به پین‌های ورودی و خروجی رزبری پای متصل می‌شوند. نام پین‌ها بر روی PCB درج شده است.

نحوه‌ی دقیق اتصالات در دیاگرام و جدول نشان داده شده است.

جهت مشاهده‌ی پایه‌ی رزبری پای به  Raspberry Pi GPIO Header page مراجعه کنید.

مرحله 2 : کدنویسی و تنظیمات نرم‌افزاری

فعال سازی SPI
ماژول RC522 از طریق پروتکل SPI با رزبری پای ارتباط برقرار می‌کند. پروتکل SPI در رزبری پای که به طور پیش‌فرض غیرفعال است. بدین منظور صفحه‌ی ترمینال را باز کرده و دستور زیر را اجرا کنید.

sudo raspi-config

از طریق ترمینال یا "Raspberry Pi Configuration" از روی دسکتاپ، SPI را در قسمت "Interfacing Options" فعال کنید. 

نصب کتابخانه ‌ SPI

از طریق دستور زیر کتابخانه‌ی spidev را نصب کنید.

sudo apt-get install python-spidev python3-spidev

اگرچه قصد بر این بود که  "py-spidev" برای راه‌اندازی رابط SPI در پایتون استفاده شود، اما برای این کاربرد از طریق فرمان زیر "SPI-Py" را نصب کنید.

cd ~

git clone https://github.com/lthiery/SPI-Py.git

cd SPI-Py

sudo python setup.py install

دانلود کتابخانه‌ پایتون RC522
در آخر کتابخانه‌ای را به صحبت با ماژول RC522 از طریق رابط SPI کمک می‌کند، دانلود و نصب کنید. این کتابخانه، به كتابخانه‌ی SPI-Py كه در مرحله‌ی قبل نصب شده متكي است. با دستور زیر کتابخانه مورد نیاز را دانلود کنید:

cd ~

git clone https://github.com/mxgxw/MFRC522-python.git

اسکریپت پایتون
 در کتابخانه‌ی “MFRC522-python” چند نمونه اسکریپت وجود دارد. می‌توانید توسط دستور زیر به آن دست پیدا کنید.

cd MFRC522-python

از طریق فرمان زیر اسکریپت  “Read.py” را اجرا کنید. 

python Read.py

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

پایتون 2 یا پایتون 3 ؟
به طور پیش‌فرض، کتابخانه MFRC522 فقط با پایتون 2 قابل اجراست. اما اصلاح آن برای کار با پایتون 3 کار ساده‌ای است. فایل"MFRC522.py"  را در یک ویرایشگر متنی اصلاح کرده و تمامی 9 دستور print را به فرمت نوشتاری  Python 3 تبدیل کنید. برای مثال:

print "Authentication Error"

تبدیل می‌شود به :

print("Authentication Error")

به عبارت دیگر همه چیز بعد از دستور print  داخل پرانتز قرار می‌گیرند.

یک نمونه اسکریپت پایتون 
به منظور ساده‌کردن خروجی، با اعمال تغییراتی در یک اسکریپت مثالیکاربردی ارائه می‌شود. در این مثال کارت را خوانده ، شناسه آن را چاپ کرده و 2 ثانیه منتظر می‌ماند. بنابراین برای نشان دادن یک شناسه دیگر باید بیش از 2 ثانیه کارت را نزدیک ماژول نگه دارید.

import time
import RPi.GPIO as GPIO
import MFRC522
 
# Create an object of the class MFRC522
MIFAREReader = MFRC522.MFRC522()
 
# Welcome message
print("Looking for cards")
print("Press Ctrl-C to stop.")
 
# This loop checks for chips. If one is near it will get the UID
try:
   
  while True:
 
    # Scan for cards
    (status,TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)
 
    # Get the UID of the card
    (status,uid) = MIFAREReader.MFRC522_Anticoll()
 
    # If we have the UID, continue
    if status == MIFAREReader.MI_OK:
 
      # Print UID
      print("UID: "+str(uid[0])+","+str(uid[1])+","+str(uid[2])+","+str(uid[3]))
 
      time.sleep(2)
 
except KeyboardInterrupt

این اسکریپت به طور مستقیم از طریق لینک زیر دانلود می‌شود:

https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/rc522_read.py

و با دستور زیر قابل اجراست.

python rc522_read.py

 خروجی به صورت تصویر نشان داده شده است:

شناسه (UID) یک آرایه چهار عنصری است و اسکریپت هر عنصر را با کاما جدا می‌کند. حتما نیازی به استفاده از کاما نیست و چهار عنصر آرایه می‌توانند با هم ترکیب شده تا یک عدد ساده ارائه شود. به عنوان مثال UID تگ می‌تواند به جای "148،35،65،119" تبدیل به "1483565119" می‌شود.