استخدم قارئ RFID مع Raspberry Pi.
تعليقاتⓘ Cet article peut avoir été partiellement ou totalement traduit à l'aide d'outils automatiques. Nous nous excusons des erreurs que cela pourrait engendrer.
هذا البرنامج التعليمي هو الجزء الثاني من الملف المخصص لاكتشاف الإلكترونيات باستخدام Raspberry Pi. إذا لم تكن قد قرأته ، أنصحك باستشارة البرنامج التعليمي الأول للتحكم في مؤشر LED باستخدام Raspberry Pi.
سواء كان ذلك لأنظمة تحديد الهوية أو إدارة المخزون أو الدفع أو التشغيل الآلي للمنزل ، يتم استخدام رقائق RFID أكثر فأكثر.
سنرى في هذا البرنامج التعليمي كيفية قراءة بطاقات RFID باستخدام Raspberry Pi وقارئ RC522 RFID.
في نهاية البرنامج التعليمي ، ستكون قادرًا على قراءة شارة RFID ، والتحقق مما إذا كانت هي تلك المتوقعة ، وإضاءة مؤشر LED أخضر أو أحمر ، اعتمادًا على النتيجة. كل ما عليك فعله هو تكييف هذا المثال الأساسي لمشروع من اختيارك!
المعدات اللازمة
لإكمال هذا البرنامج التعليمي ، ستحتاج إلى المواد التالية:
- توت العليق باي
- حميته
- بطاقة مايكرو التنمية المستدامة
- قارئ RC522 RFID
- مجموعة من الكابلات ومصابيح LED والمقاومات ولوحات الاختبار
- لحام الحديد ولحام
قم بتجميع قارئ RC522 RFID
عندما تتلقى وحدة RC522 RFID ، يمكنك أن ترى أنها تأتي مع مجموعة من 2 × 8 دبابيس. لذلك ستكون الخطوة الأولى هي لحام 8 من هذه المسامير على قارئ RFID. لا داعي للذعر ، اللحام سهل للغاية!
لذلك يجب عليك إدخال رموز PIN في الفتحات المتوفرة على بطاقة RFID ولحامها بالمكواة.
إذا لم تكن قد قمت باللحام مطلقًا ، فإنني أوصي بهذا الدليل الممتاز لتعلم كيفية اللحام من François من Framboise314.fr.
قم بتوصيل قارئ RFID ومصابيح LED بـ Raspberry Pi
قبل الانتقال إلى كتابة الكود الذي سيسمح لنا بقراءة شارات RFID والتحكم في مصابيح LED ، يجب علينا أولاً توصيل جميع المكونات بـ Raspberry Pi.
للتذكير ، يجب أن يتم توصيل المكونات وفصلها دائمًا مع إيقاف تشغيل Raspberry Pi.
قم بتوصيل قارئ RC522 RFID بـ Raspberry Pi
المكون الأول الذي سنقوم بتوصيله هو قارئ RFID.
للتحكم في قارئ RFID ، سنستخدم مكتبة خارجية. لسوء الحظ ، يتم كتابة هذا باستخدام منافذ GPIOs التي تم إدخالها مباشرة في الكود. هذا يعني أنه لا يمكننا تكوينها بشكل مختلف ، وبالتالي فإننا مضطرون إلى استخدام نفس المنافذ تمامًا مثل تلك المتوفرة في المكتبة.
فيما يلي جدول يسرد منافذ القارئ ومنفذ GPIO الخاص بـ Raspberry Pi الذي ستحتاج إلى توصيله به.
للتذكير ، ستجد خريطة لمنافذ GPIO الخاصة بـ Raspberry Pi في البرنامج التعليمي الأول في هذه السلسلة.
قم بتوصيل المصابيح
بعد قارئ RFID ، دعنا نقوم بتوصيل مصابيح LED بـ Raspberry Pi.
سنقوم بعمل تجميع بسيط للغاية. سيكون لكل مصباح أنود (الساق الممدودة) متصل بمنفذ GPIO وسيكون لمصباحي LED أنود متصلان بنفس المقاوم ، وهو نفسه متصل بمنفذ GPIO Ground من Raspberry Pi.
وبالتالي ، نستخدم مقاومًا واحدًا لمصباحين ، ونحد من عدد الكابلات.
في النهاية ، بمجرد توصيل بطاقة RFID ومصابيح LED بـ Pi ، يجب أن يكون لديك تجميع يشبه هذا.
اكتب البرنامج لقراءة شارة RFID.
لدينا دائرة وظيفية ، علينا فقط تنشيط منافذ SPI الخاصة بـ Raspberry Pi ، وهي ضرورية لاستخدام قارئ RFID ، وكتابة البرنامج الذي سيقرأ شارة RFID.
كما في البرنامج التعليمي السابق ، سيتم كتابة البرنامج بلغة بايثون. هذا البرنامج التعليمي ليس دورة بايثون ، وسوف نشرح البرنامج بإيجاز فقط. إذا كنت ترغب في معرفة المزيد عن Python ، فقد نشرنا دورة تمهيدية حول البرمجة باستخدام Python.
قم بتنشيط بروتوكول SPI الخاص بـ Raspberry Pi
قبل كتابة البرنامج ، لنقم بتمكين بروتوكول SPI على Raspberry Pi حتى نتمكن من استخدام وحدة RFID.
لتنشيطه ، ما عليك سوى تشغيل الأمر sudo raspi-config
، على Raspberry الخاص بك ، ثم اختر Interfacing Options
، SPI
، Yes
و اخيرا Finish
.
قم بتثبيت مكتبة pi-rc522
آخر شرط مسبق ، سنقوم بتثبيت مكتبة Python3 "pi-rc522" التي تتيح لك التحكم في مشغل RC522.
سنستخدم Pip3 ، مدير مكتبة لبايثون.
تحتاج فقط إلى تشغيل الأمر:
sudo pip3 install pi-rc522
اكتب البرنامج لقراءة معرف شارة RFID
كل شارة RFID لها معرّف فريد. من خلال قراءة هذا المعرّف ومقارنته بقائمة المعرفات المصرح بها يمكننا معرفة ما إذا كانت الشارة مرخصة أم لا.
لذلك سنقوم بكتابة برنامج يسمح لنا بقراءة المعرف الفريد لشارة RFID.
كما فعلنا في البرنامج التعليمي السابق ، سنكتب البرنامج في المجلد /home/pi/electronic
(إذا لم تكن قد قمت بذلك بالفعل ، فقم بإنشاء المجلد).
في هذا المجلد ، قم بإنشاء ملف read_rfid_uid.py
ووضع الكود التالي فيه:
#!/usr/bin/env python3.5
#-- coding: utf-8 --
import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time
GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte
rc522 = RFID() #On instancie la lib
print('En attente d'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge
#On va faire une boucle infinie pour lire en boucle
while True :
rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
(error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos
if not error : #Si on a pas d'erreur
(error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps
if not error : #Si on a réussi à nettoyer
print('Vous avez passé le badge avec l'id : {}'.format(uid)) #On affiche l'identifiant unique du badge RFID
time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes
بمجرد حفظ الملف ، يتم تفويضه للتنفيذ بالأمر:
sudo chmod +x /home/pi/electronic/read_rfid_uid.py
يمكننا الآن بدء البرنامج عن طريق استدعاء الأمر:
/home/pi/electronic/read_rfid_uid.py
في كل مرة تقوم فيها بتمرير شارة RFID أمام القارئ ، سيتم عرض معرفها الفريد!
اكتب برنامجًا يعرض ما إذا كانت الشارة صالحة أم لا.
الآن بعد أن أصبح بإمكاننا قراءة المعرف الفريد للشارة ، كل ما علينا فعله هو تكييف الكود السابق لمقارنة المعرف الذي تمت قراءته بمعرف مكتوب في البرنامج.
لذلك سنقوم بتعديل البرنامج السابق قليلاً بحيث يقارن uid القراءة مع الموجود في البرنامج ، ويضيء باللون الأحمر أو الأخضر حسب النتيجة.
انسخ الملف السابق إلى ملف جديد verify_rfid.py
وقم بتعديله للرمز أدناه:
قم بتحرير الخط RFID_UID
لوضع معرف بطاقة RFID الخاصة بك!
#!/usr/bin/env python3.5
#-- coding: utf-8 --
import RPi.GPIO as GPIO #Importe la bibliothèque pour contrôler les GPIOs
from pirc522 import RFID
import time
GPIO.setmode(GPIO.BOARD) #Définit le mode de numérotation (Board)
GPIO.setwarnings(False) #On désactive les messages d'alerte
LED_RED = 3 #Définit le numéro du port GPIO qui alimente la led rouge
LED_GREEN = 5 #Définit le numéro du port GPIO qui alimente la led verte
RFID_UID = [21, 35, 5, 43, 57] #Définit l'UID du badge RFID
#Définit la fonction permettant d'allumer une led
def turn_led_on (led) :
GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
GPIO.output(led, GPIO.HIGH) #Allume la led
#Définit la fonction permettant d'éteindre une led
def turn_led_off (led) :
GPIO.setup(led, GPIO.OUT) #Active le contrôle du GPIO
GPIO.output(led, GPIO.LOW) #Eteind la led
#Définit la fonction permettant d'allumer la rouge et éteindre la verte
def turn_red_on () :
turn_led_off(LED_GREEN) #Eteind la led verte
turn_led_on(LED_RED) #Allume la led rouge
#Définit la fonction permettant d'allumer la verte et éteindre la rouge
def turn_green_on () :
turn_led_off(LED_RED) #Eteind la led rouge
turn_led_on(LED_GREEN) #Allume la led verte
rc522 = RFID() #On instancie la lib
print('En attente d'un badge (pour quitter, Ctrl + c): ') #On affiche un message demandant à l'utilisateur de passer son badge
#On va faire une boucle infinie pour lire en boucle
while True :
rc522.wait_for_tag() #On attnd qu'une puce RFID passe à portée
(error, tag_type) = rc522.request() #Quand une puce a été lue, on récupère ses infos
if not error : #Si on a pas d'erreur
(error, uid) = rc522.anticoll() #On nettoie les possibles collisions, ça arrive si plusieurs cartes passent en même temps
if not error : #Si on a réussi à nettoyer
if RFID_UID == uid :
print('Badge {} autorisé !'.format(uid))
turn_green_on()
else :
print('Badge {} interdit !'.format(uid))
turn_red_on()
time.sleep(1) #On attend 1 seconde pour ne pas lire le tag des centaines de fois en quelques milli-secondes
كل ما عليك فعله هو تشغيل البرنامج والاختبار!
يمكنك بعد ذلك تكييف الكود لمشاريعك الخاصة ، مثل إنشاء قفل ذكي ، أو حتى صندوق موسيقى باستخدام علامات RFID!
للحصول على معلومات ، يمكنك الحصول على جميع التعليمات البرمجية لهذا البرنامج التعليمي على Github of Raspbian France.
في البرنامج التعليمي التالي ، سنرى كيفية التحكم في محرك سيرفو باستخدام Raspberry Pi!