मैं एक Arduino के साथ RFID-RC522 का उपयोग कैसे करूं?


11

मैं अपने स्थानीय मेकर्सस्पेस के लिए एक परियोजना पर काम कर रहा हूं, हमारे पास सीमित बजट है इसलिए मैं eBay पर RFID-RC522 el'cheap'o RFID / NFC पाठकों का उपयोग करने की उम्मीद कर रहा था, मुझे कुछ SPI आधारित बोर्ड मिले, वे काम करते हैं, फिर भी उनके लिए कोड उदाहरण सीमित हैं।

मैंने कई अलग-अलग पुस्तकालयों को पाया है और इस एक पर बसे हैं: https://github.com/ljos/MFRC522

परेशानी यह है कि ऑनलाइन उपलब्ध सभी कोड कुछ चीनी लोगों के पायथन कोड से स्पॉन लगते हैं जिन्हें लोगों ने अनुवादित किया है, और एक Arduino लाइब्रेरी में हैक किया है।

कोड काम करता है, लेकिन Mifare कार्ड का मतलब 4, 7 या 10 बाइट UID है और उदाहरण / लाइब्रेरी 5 बाइट सीरियल नंबर दे रहा है।

कोई दस्तावेज नहीं है और NXP डेटाशीट समझ से बाहर है ... इसके अलावा यह अधिकांश कार्ड के साथ काम करने लगता है, लेकिन यह मास्टरकार्ड पेवेव कार्ड के साथ काम नहीं करता है जो आईएसओ 14443 मानक के अनुरूप है। अधिक महंगा RDM880 रीडर जो MFRC500 पर आधारित है, ठीक काम करता है और इसमें एक अच्छा पुस्तकालय है लेकिन लागत कार्यान्वयन को असंभव बना देती है।

तो, क्या कोई मुझे इस NXP MFRC522 आधारित इकाई को सभी आईएसओ 14443 कार्डों से यूआईडी पढ़ने में मदद कर सकता है।

#include <SPI.h>
#include <MFRC522.h>

#define RFID_SS  10
#define RFID_RST 5

MFRC522 rfid( RFID_SS, RFID_RST );

void setup() {
  SPI.begin();
  Serial.begin(115200);
  rfid.begin();
}

void loop() {
  byte data[MAX_LEN];
  byte uid[5];

  if ( rfid.requestTag( MF1_REQIDL, data ) == MI_OK ) {
    if ( rfid.antiCollision( data ) == MI_OK ) {
      memcpy( uid, data, 5 );
      for ( int i = 0; i < 5; i++ ) {
        Serial.print( uid[i], HEX );
        Serial.print( ' ' );
      }
      Serial.println();
    }
  }
}

यह शायद समस्या नहीं है, लेकिन आपकी uidसरणी लंबाई 5 है। क्या आपने 10 बाइट के परिणाम के बाद एक बड़े सरणी का उपयोग करने की कोशिश की?
एशेश्र

हां, मैंने किया, लेकिन इससे कोई मदद नहीं हुई, वास्तव में दूसरे पाठक को केवल 4 बाइट नंबर दिए गए हैं और यह एक अलग उदाहरण है, जो बहुत ही उलझा हुआ है।
अनजाने में

जवाबों:


6

क्षमा करें, लेकिन मुझे आपके 'एनएक्सपी डेटशीट की समझ से बाहर' से असहमत होना चाहिए । MFRC522 डेटाशीट के पहले पेज से:

'रिमार्क: द एमएफआरसी 522 एमआईएफईआर मिनी के सभी वेरिएंट्स, MIFARE 1K, MIFARE 4K, MIFARE अल्ट्रालाइट, MIFARE DESFire EV1 और MIFARE प्लस आरएफ पहचान प्रोटोकॉल का समर्थन करता है'

यहाँ यह कहते हैं कि MFRC522 आईएसओ / IEC 14443 के एक हिस्से को कवर करता है। निम्नलिखित NXP RC522 को याद कर रहे हैं:

* MIFARE DESFire EV1 (एईएस एन्क्रिप्शन शामिल है)

MIFARE DESFire EV2 (इसमें MIsmartApp, Transaction MAC, अनलिमिटेड एप्लीकेशन MIFARE प्लस ड्रॉप-इन रिप्लेसमेंट में MIFARE क्लासिक फॉर सर्टिफाइड सिक्योरिटी लेवल (AES 128 बेस्ड))

MIFARE SAM AV2 (सुरक्षित एक्सेस मॉड्यूल जो क्रिप्टोग्राफ़िक कुंजियों और क्रिप्टोग्राफ़िक फ़ंक्शंस का सुरक्षित भंडारण प्रदान करता है) *

ये शायद बैंक कार्ड में इस्तेमाल होने वाले हैं। फिर, MFRC500 डेटाशीट के पहले पृष्ठ से:

'ISO / IEC 14443 A की सभी प्रोटोकॉल परतें समर्थित हैं।'

आपको सभी अलग-अलग MIFARE / ISO / IEC 14443 स्पेक्स के माध्यम से यह पता लगाना होगा कि विभिन्न प्रकारों के लिए कितने ID बाइट्स हैं (मुझे संदेह है कि अलग-अलग प्रकार के बाइट्स की एक अलग मात्रा वापस आती है)।

तो, मूल रूप से, आप खराब हैं। महंगे MFRC500 आधारित रीडर के लिए स्प्रिंग। मुझे लगता है कि उच्च लागत के साथ आपको उच्च श्रेणी का एपीआई, प्रलेखन और उदाहरण या यहां तक ​​कि (हांफ!) तकनीकी सहायता भी मिलती है।

चियर्स


1
आप सही कह रहे हैं कि MFRC522 इसका समर्थन नहीं करता है, लेकिन आप गलत हैं कि MFRC500 समाधान है, यह डिवाइस केवल MIFARE क्लासिक, MIFARE 1K (S50) और MIFARE 4K (S70) कार्ड का समर्थन करता है।
अनकंडोमैन

1
इसके अलावा MFRC522 मॉड्यूल <£ 3 है और MFRC500 £ 30 है।
अनजाने में

1

MFRC522 :: requestTag () 2 प्रकार के पहले दो बाइट्स में कार्ड प्रकार लौटाता है ( आपके उदाहरण में डेटा )। आपको यह निर्धारित करने के लिए कि यह किस प्रकार का कार्ड है, इस मूल्य को देखना होगा। आईडी के आवश्यक एन बाइट्स को प्रिंट करने के लिए इस जानकारी का उपयोग करें ।

एक चुटकी पर, आप पूर्ण 16 बाइट्स (MAX_LEN) को डंप कर सकते हैं, और उन्हें अपने विभिन्न कार्ड प्रकारों के साथ परीक्षण करके देख सकते हैं कि कौन सी बाइट्स नियतात्मक तरीके से बदल रही हैं, इस प्रकार आपको आईडी की सही लंबाई निर्धारित करने की अनुमति मिलती है।

और मामले में यह आपको कुछ समय बचाता है, यदि आप उस पुस्तकालय के स्वयं परीक्षण कार्यों को कहते हैं - getFirmwareVersion () और digitalSelfTestPass (); MFRC522 को कॉल करना आवश्यक है :: फिर से शुरू (), अन्यथा आरएफआईडी आईडी (पाठ्यक्रम के लेखन के समय) पढ़ना संभव नहीं है।


1

सबसे लोकप्रिय एक का उपयोग करने का प्रयास करें।

https://github.com/miguelbalboa/rfid

यह मेरे लिए काम कर रहा है। यह आपकी इच्छानुसार यूआईडी लौटाता है। बस इसके उदाहरण से अन्य कार्यों को हटाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.