بطاقات وعلامات RFID موجودة في كل مكان! نستخدمها في المباني للتحكم في الوصول. يمكنك استخدام الطابعات والبيئة صور لتحديد الموظفين. الطبقات -Tagging وتحديد الحيوانات الأليفة -تستخدم جميع أشكال RFID. تقنية قراءة جهاز RFID رخيص. يمكنك الحصول على القارئ لحوالي 5 دولارات أمريكية ، وربعة دولارات أمريكية يمكن لـ Raspberry Pi Pico قراءة المعرفات من البطاقات / العلامات.
في هذه الحالة ، نتعلم كيفية قراءة علامات وبطاقات RFID مع قارئ MFRC522 و Raspberry Pi Pico. قبل أن نتمكن من القيام بذلك ، يتعين علينا تحديد معرف البطاقات / العلامات الخاصة بنا. القسم الأول الذي يفعل ذلك بالضبط ، وبعد ذلك سنقوم بإدراج رمز للتحكم في مصابيح LED لمحاكاة الآلية الضخمة.
لهذا يحتاجون إلى كيفية حاجتهم
- Raspberry pi pico تشغيل micropython
- MFRC522 RFID قارئ
- لوحة الخبز الكبيرة
- 11 × ذكر لأسلاك الطائر الذكور
- LED الأخضر
- LED الأحمر
- 2 × 100 أوم المقاومات (بني – أسود – بني – ذهبي)
بناء الأجهزة
ينقسم مبنى الأجهزة إلى قسمين. أولاً ، الكابلات لقارئ MFRC522 RFID هو. يستخدم القارئ SPI للتواصل مع Raspberry Pi Pico ، وهناك سبعة أقلام. اثنان من أجل الأداء (3.3 V و GND) والباقي لـ SPI.
MFRC522 |
التوت بي بيكو |
لون الأسلاك |
---|---|---|
SDA |
GP1 |
أزرق |
SCK |
GP2 |
البرتقالي |
موسي |
GP3 |
أرجواني |
ميسو |
GP4 |
أزرق |
GND |
كل GND |
أسود |
RST |
GP0 |
أبيض |
3.3 |
3V3 Out (PIN PIN 36) |
أحمر |
ثانياً ، مخرجاتنا. لتحديد ما إذا كانت البطاقة الصحيحة قد تم تقديمها ، يتعين علينا إضافة مصابيح LED. أحمر للحصول على بطاقة RFID غير صحيحة ، باللون الأخضر للحصول على بطاقة صحيحة. تتصل LEDs إلى دبوس GPIO الذي نتحكم فيه لتشغيل وإيقاف LED ، ومع وجود GND متوفر عبر مقاومة 100 أوم. يمكنك استخدام مقاومة 220 أو 330 أوم ، ولدي فقط حوالي 100 أوم على مكتبي. هل عليك أن تعمل على المقاومة الصحيحة؟ لدينا لديك دليل لك!
العنوان – العمود 0 |
التوت بي بيكو |
لون الأسلاك |
---|---|---|
أحمر LED الأنود (+) |
GP14 |
أحمر |
كاثود LED الأحمر (-) |
كل GND |
أسود |
أنود LED الأخضر (+) |
GP15 |
أخضر |
كاثود LED الأخضر (-) |
كل GND |
أسود |
تحقق مما إذا كان الكابلات صحيحًا.
تثبيت برنامج قارئ RFID
MFRC522 هو قارئ RFID بسيط. لتسهيل الأمر ، نستخدم وحدة micropython التي تستخدم بإيجاز القارئ. الوحدة ، بيكو رفيد هو صديق Toms Hardware ، Kevin Mcaleer ، ويستند إلى عمل Danjperron.
1. قم بتوصيل Raspberry Pi Pio بجهاز الكمبيوتر الخاص بك وفتح Thonny. نحن نفترض أنك تعرف بالفعل كيفية إعداد Raspberry Pi Pico. إلا إذا، لدينا هذا الدليل العملي.
2. قم بإنشاء ملف فارغ جديد ونسخ المحتوى من هذا الرابط في الملف الفارغ. ثم احفظه على Raspberry Pi Pico مثل MFRC522.py. هذه هي وحدة Python / مكتبة Python ، والتي يمكن من خلالها التحدث إلى قارئ RFID.
كتابة رمز المشروع
بعد الانتهاء من جميع الإعدادات ، يمكننا الآن تشفير المشروع. للقيام بذلك ، سوف نستخدم Thonny مرة أخرى ونكتب رمزًا للتحقق من معرف بطاقة RFID التي تم تقديمها إلى القارئ. بالنسبة لهذا الجزء الأول ، يتعين علينا كتابة المعرف ، حيث نستخدمه لاحقًا مع اختبار مشروط يتحقق مما إذا كان المعرف يطابق قيمة مشفرة صلبة ثم يسمح بالإدخال. إذا لم يكن الأمر كذلك ، فسوف نتلقى رسالة رفض.
1. قم بإنشاء ملف فارغ جديد في Thonny.
2. استيراد ثلاث وحدات (مكتبات) لاستخدام قارئ MFRC522 -RFID ، والتحكم في وتيرة الكود واستخدام GPIO.
from mfrc522 import MFRC522
import utime
from machine import Pin
3. قم بإنشاء كائن ، وقارئ لإخبار الكود الذي يتم فيه توصيل قارئ RFID.
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
4. قم بإنشاء كائنين لمصابيات LED الأحمر والأخضرقم بتوصيل الكود الذي يتم فيه توصيل LEDs وأن تقوم بإخراج الأجهزة التي نريد إرسال الكهرباء إليها.
red = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
5. اكتب رسالة قصيرة إلى المستخدم وقم بتطبيقها لتقديم البطاقة إلى القارئ. “\ n” هو بناء جملة Pythons لتقديم خط جديد في نهاية وظيفة print ().
print("Present the card to the reader\n")
6. قم بإنشاء قائمة تسمى “البطاقة السابقة” وحفظ القيمة صفر فيها. سنستخدم هذه القائمة لاحقًا لحفظ البطاقات الحالية -ID.
PreviousCard = [0]
7. قم بإنشاء حلقة حقيقية لفترة من الوقت لتنفيذ الكود باستمرار.
while True:
8. تهيئة القارئ بحيث يكون جاهزًا للاستخدام.
reader.init()
9. قم بإنشاء Tupel لحفظ حالة القارئ ونوع يوم RFID.
(stat, tag_type) = reader.request(reader.REQIDL)
10. إن شرط if يقرأ محتوى البطاقة عند الانتهاء من القارئ. ثم يقوم بتحديث كائنات STAT و UID مع تفاصيل من الخريطة.
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
11. إذا كان UID يتطابق مع البطاقة مع القيمة المخزنة في كائن البطاقة السابق ، فستستمر الرمز. يحدث هذا عندما يتم عرض القارئ مرارًا وتكرارًا.
if uid == PreviousCard:
continue
12. قم بإنشاء تعليمة مرتبطة بـ IF للتحقق مما إذا كانت قراءة البطاقة على ما يرام.
if stat == reader.OK:
13. اطبع رسالة إلى المستخدم وحفظ UID للبطاقة في كائن يسمى “MAP”. ثم طباعة تفاصيل البطاقة في قذيفة بيثون.
print("The card details are as follows")
card = reader.tohexstring(uid)
print(card)
14. قم بتحديث كائن البطاقة السابق مع UID للخريطة المقدمة.
PreviousCard = uid
15. إنشاء حالة أخرى يتم تنفيذها عندما لا يتم تقديم بطاقات. قم بتحديث كائن البطاقة السابق. ثم أضف فاصل 50 مللي ثانية إلى الكود قبل تكرار الحلقة الرئيسية.
else:
PreviousCard=[0]
utime.sleep_ms(50)
16. احفظ الرمز في Raspberry Pi Pico كقارئ. ثم انقر فوق تنفيذ >> قم بتشغيل البرنامج النصي الحالي (أو اضغط على زر التشغيل الأخضر). اتبع التعليمات وأعط القارئ بطاقة RFID / يوم RFID.
17. انسخ تفاصيل البطاقة بأكملها ، وهذا هو UID لبطاقة RFID ، ونحن بحاجة إلى ذلك للجزء التالي منها. يبدو UID على هذا النحو تقريبًا ، سيكون مختلفًا.
[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]
قائمة رمز كاملة
from mfrc522 import MFRC522
import utime
from machine import Pin
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
red = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
print("Present the card to the reader\n")
PreviousCard = [0]
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if uid == PreviousCard:
continue
if stat == reader.OK:
print("The card details are as follows")
card = reader.tohexstring(uid)
print(card)
PreviousCard = uid
else:
PreviousCard=[0]
utime.sleep_ms(50)
لدينا الرمز ، الآن علينا مشاركة رمز المشروع الذي نريد استخدام هذا الرمز للوصول وإلقاء الضوء على LED الأخضر. إذا تم تقديم القارئ مع بطاقة أخرى / يوم آخر ، يضيء LED الأحمر.
1. قم بإنشاء خطوط رمز جديدة بين هذين الخطين.
print(card)
NEWCODE GOES HERE
PreviousCard = uid
2. قم بإنشاء حالة if تتحقق من بطاقتك. لاحظ أنه يبدو وكأنه قائمة بيثون ، ولكن في الواقع يتم حفظها كسلسلة بحيث يتعين علينا لف القيمة في “”. لا تنس ذلك [ ] التشبث.
if card == "[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]":
3. إذا كانت القيمة المخزنة في كائن البطاقة تتطابق مع القيمة الصلبة المشفر ، فقم بطباعة “الوصول” على قذيفة Python.
print("ACCESS GRANTED")
4. قم بإنشاء واحدة للحلقة لتبديل LED الأخضر عشر مرات ، مع وجود فجوة 0.1 ثانية بين أي تغيير في الحالة. أطفئ LED الأخضر في نهاية الحلقة للحلقة.
for i in range(10):
green.toggle()
utime.sleep(0.1)
green.off()
5. استخدم حالة مختلفة إذا تم تقديم القارئ مع بطاقة غير معترف بها / مربع غير معترف به. نتيجة لذلك ، يتم تشغيل وإيقاف LED الأحمر مثل LED الأخضر.
else:
print("ACCESS DENIED")
for i in range(10):
red.toggle()
utime.sleep(0.1)
red.off()
6.احفظ الكود كقارئ. بي في Raspberry Pi Pico. انقر فوق تنفيذ >> تشغيل البرنامج النصي الحالي (أو اضغط على مفتاح التشغيل الأخضر). اتبع التعليمات وأعط القارئ بطاقة RFID / يوم RFID. إذا كانت البطاقة صحيحة ، فإن مصابيح LED الخضراء تومض وتطبع Python Shell “الوصول إلى المنح”. جرب بطاقة RFID أخرى / يوم آخر. يجب أن يضيء هذا مصابيح LED الحمراء وطباعة Python -shell “Access”.
قائمة رمز كاملة
from mfrc522 import MFRC522
import utime
from machine import Pin
reader = MFRC522(spi_id=0,sck=2,miso=4,mosi=3,cs=1,rst=0)
red = Pin(14, Pin.OUT)
green = Pin(15, Pin.OUT)
print("Present the card to the reader\n")
PreviousCard = [0]
while True:
reader.init()
(stat, tag_type) = reader.request(reader.REQIDL)
if stat == reader.OK:
(stat, uid) = reader.SelectTagSN()
if uid == PreviousCard:
continue
if stat == reader.OK:
print("The card details are as follows")
card = reader.tohexstring(uid)
print(card)
if card == "[0x04, 0xBC, 0xA0, 0x9A, 0xB3, 0x43, 0x80]":
print("ACCESS GRANTED")
for i in range(10):
green.toggle()
utime.sleep(0.1)
green.off()
else:
print("ACCESS DENIED")
for i in range(10):
red.toggle()
utime.sleep(0.1)
red.off()
PreviousCard = uid
else:
PreviousCard=[0]
utime.sleep_ms(50)