ฉันจะใช้ RFID-RC522 กับ Arduino ได้อย่างไร


11

ฉันกำลังทำงานในโครงการสำหรับ Makerspace ในพื้นที่ของฉันเรามีงบประมาณ จำกัด ดังนั้นฉันจึงหวังว่าจะใช้ RFID-RC522 el'cheap'o เครื่องอ่าน RFID / NFC บน eBay ฉันได้รับกระดาน SPI สองชุดพวกเขาทำงาน แต่ ตัวอย่างรหัสสำหรับพวกเขาถูก จำกัด

ฉันพบห้องสมุดที่แตกต่างกันหลายแห่งและตัดสินในห้องสมุดนี้: https://github.com/ljos/MFRC522

ปัญหาคือรหัสทั้งหมดที่มีออนไลน์ดูเหมือนจะวางไข่จากคนจีนรหัส Python ที่คนแปลและเจาะเข้าไปในห้องสมุด Arduino

รหัสใช้งานได้ แต่การ์ด Mifare มีความหมายว่าจะมี UID 4, 7 หรือ 10 ไบต์และตัวอย่าง / ไลบรารีจะส่งคืนหมายเลขซีเรียล 5 ไบต์

ไม่มีเอกสารประกอบและแผ่นข้อมูล NXPไม่สามารถเข้าใจได้ ... นอกจากนี้ดูเหมือนว่าจะทำงานกับการ์ดส่วนใหญ่ แต่ไม่สามารถใช้งานได้กับการ์ด Mastercard PayWave ซึ่งเป็นไปตามมาตรฐาน ISO 14443 เครื่องอ่าน RDM880 ที่มีราคาแพงกว่าซึ่งอิงกับ MFRC500 นั้นใช้งานได้ดีและมีห้องสมุดที่ดี

ดังนั้นใครบางคนสามารถช่วยฉันในการรับหน่วยตาม NXP MFRC522 นี้อ่าน UID จากการ์ด ISO 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 ไบต์หรือไม่
asheeshr

ใช่ฉันทำ แต่มันไม่ได้ช่วยจริงๆแล้วผู้อ่านคนอื่นดูเหมือนจะส่งคืนหมายเลข 4 ไบต์เท่านั้นและมันก็เป็นยี่ห้อที่ต่างจากรหัสตัวอย่างที่ดีและสับสนมาก
unknowndomain

คำตอบ:


6

ขออภัย แต่ผมต้องไม่เห็นด้วยกับคุณ'NXP แผ่นข้อมูลเป็นที่เข้าใจได้ยาก' จากหน้าแรกของแผ่นข้อมูล MFRC522:

'หมายเหตุ: MFRC522 รองรับทุกรุ่นของ MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 และ MIFARE Plus RF โปรโตคอลการระบุ'

นี่มันบอกว่า MFRC522 ครอบคลุมเพียงส่วนหนึ่งของ ISO / IEC 14443 ต่อไปนี้จะหายไปจาก NXP RC522:

* MIFARE DESFire EV1 (รวมถึงการเข้ารหัส AES)

MIFARE DESFire EV2 (รวมถึง MIsmartApp, ธุรกรรม MAC, แอปพลิเคชั่นไม่ จำกัด MIFARE Plus แทนการแทนที่สำหรับ MIFARE Classic พร้อมระดับความปลอดภัยที่ผ่านการรับรอง (ตาม AES 128))

MIFARE SAM AV2 (โมดูลการเข้าถึงที่ปลอดภัยซึ่งให้การจัดเก็บที่ปลอดภัยของคีย์เข้ารหัสและฟังก์ชั่นการเข้ารหัสลับ) *

อาจเป็นสิ่งที่ใช้ในบัตรธนาคาร อีกครั้งจากหน้าแรกของแผ่นข้อมูล MFRC500:

'รองรับทุกชั้นโปรโตคอลของ ISO / IEC 14443 A'

คุณจะต้องใช้ข้อมูลจำเพาะต่างๆของ MIFARE / ISO / IEC 14443 ที่แตกต่างกันทั้งหมดเพื่อค้นหาว่ามีกี่ไบต์ ID สำหรับประเภทที่แตกต่างกัน

ดังนั้นโดยทั่วไปคุณกำลังเมา สปริงสำหรับเครื่องอ่านที่ใช้ MFRC500 ราคาแพง ฉันคิดว่าด้วยค่าใช้จ่ายที่สูงขึ้นคุณจะได้รับ API ชั้นสูงเอกสารประกอบและตัวอย่างหรือแม้แต่การสนับสนุนด้านเทคนิค (gasp!)

ไชโย


1
คุณถูกต้องว่า MFRC522 ไม่รองรับสิ่งนี้ แต่คุณผิดที่ MFRC500 เป็นวิธีแก้ปัญหาอุปกรณ์นั้นรองรับเฉพาะ MIFARE Classic, MIFARE 1K (S50) และ MIFARE 4K (S70) การ์ด
unknowndomain

1
นอกจากนี้โมดูล MFRC522 คือ <£ 3 และ MFRC500 คือ£ 30
unknowndomain

1

MFRC522 :: requestTag () ส่งคืนชนิดการ์ดในสองไบต์แรกของพารามิเตอร์ที่ 2 ( ข้อมูลในตัวอย่างของคุณด้านบน) คุณจะต้องดูที่ค่านี้เพื่อกำหนดประเภทของการ์ด ใช้ข้อมูลนี้เพื่อพิมพ์Nไบต์ของ ID ที่ต้องการ

คุณสามารถถ่ายโอนข้อมูลเต็ม 16 ไบต์ (MAX_LEN) และทดสอบกับการ์ดชนิดต่าง ๆ ของคุณเพื่อดูว่ามีการเปลี่ยนแปลงไบต์ใดในลักษณะที่กำหนดขึ้นซึ่งช่วยให้คุณสามารถกำหนดความยาวของ ID ได้อย่างถูกต้อง

และในกรณีที่มันช่วยคุณประหยัดเวลาถ้าคุณเรียกใช้ฟังก์ชันทดสอบตัวเองของไลบรารีนั่นคือ getFirmwareVersion () และ digitalSelfTestPass (); จำเป็นต้องโทรไปที่ MFRC522 :: เริ่มต้น () อีกครั้งมิฉะนั้นจะไม่สามารถอ่านรหัสประจำตัว RFID (ในขณะที่เขียนแน่นอน)


1

ลองใช้สิ่งที่เป็นที่นิยมที่สุด

https://github.com/miguelbalboa/rfid

มันใช้งานได้สำหรับฉัน มันคืนค่า uID ตามที่คุณต้องการ เพียงแค่ลบฟังก์ชั่นอื่น ๆ เพียงรับ uid จากตัวอย่าง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.