Come posso usare RFID-RC522 con un Arduino?


11

Sto lavorando a un progetto per il mio Makerspace locale, abbiamo un budget limitato, quindi speravo di utilizzare i lettori RFID-RC522 e l''Reap'o RFID / NFC su eBay, ho ricevuto un paio di schede basate su SPI, funzionano, tuttavia funzionano gli esempi di codice per loro sono limitati.

Ho trovato diverse librerie diverse e ho optato per questa: https://github.com/ljos/MFRC522

Il problema è che tutto il codice disponibile online sembra provenire da alcuni ragazzi cinesi codice Python che le persone hanno tradotto e violato in una libreria Arduino.

Il codice funziona, ma le schede Mifare devono avere UID da 4, 7 o 10 byte e l'esempio / libreria restituisce un numero seriale di 5 byte.

Non c'è documentazione e la scheda tecnica NXP è incomprensibile ... Inoltre sembra funzionare con la maggior parte delle carte, ma non funziona con le carte Mastercard PayWave conformi allo standard ISO 14443. Il lettore RDM880 più costoso, basato sull'MFRC500, funziona bene e ha una bella libreria ma il costo rende impossibile l'implementazione.

Quindi, qualcuno può aiutarmi a ottenere questa unità basata su NXP MFRC522 che legge l'UID da tutte le carte 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();
    }
  }
}

Questo probabilmente non è il problema, ma l' uidarray è di lunghezza 5. Hai provato a utilizzare un array più grande poiché desideri un risultato di 10 byte?
asheeshr,

Sì, l'ho fatto ma non ha aiutato, in effetti l'altro lettore sembra restituire solo numeri di 4 byte ed è una marca diversa con un codice di esempio decente, molto confuso.
sconosciuto dominio

Risposte:


6

Siamo spiacenti, ma non sono d'accordo con la tua "scheda tecnica NXP è incomprensibile" . Dalla PRIMA PAGINA del datasheet del MFRC522:

"Nota: MFRC522 supporta tutte le varianti dei protocolli di identificazione RF MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 e MIFARE Plus RF"

Qui dice che l'MFRC522 copre solo una parte della ISO / IEC 14443. Di seguito manca l'NXP RC522:

* MIFARE DESFire EV1 (include la crittografia AES)

MIFARE DESFire EV2 (include MIsmartApp, Transaction MAC, Applicazioni illimitate Sostituzione drop-in MIFARE Plus per MIFARE Classic con livello di sicurezza certificato (basato su AES 128))

MIFARE SAM AV2 (modulo di accesso sicuro che fornisce l'archiviazione sicura di chiavi crittografiche e funzioni crittografiche) *

Questi sono probabilmente quelli utilizzati nelle carte bancarie. Ancora una volta, dalla PRIMA PAGINA della scheda tecnica MFRC500:

"Sono supportati tutti i livelli di protocollo ISO / IEC 14443 A."

Dovrai esaminare tutte le diverse specifiche MIFARE / ISO / IEC 14443 per scoprire quanti byte ID ci sono per i diversi tipi (sospetto che tipi diversi restituiscano una diversa quantità di byte).

Quindi, fondamentalmente, sei fregato. Molla per il costoso lettore basato su MFRC500. Presumo che con il costo più elevato si ottenga anche un'API di alta classe, documentazione ed esempi o persino supporto tecnico (sussulto!).

Saluti


1
Hai ragione sul fatto che MFRC522 non lo supporta, ma ti sbagli che MFRC500 è la soluzione, che il dispositivo supporta solo le schede MIFARE Classic, MIFARE 1K (S50) e MIFARE 4K (S70).
sconosciuto dominio

1
Anche il modulo MFRC522 è <£ 3 e MFRC500 è £ 30.
sconosciuto dominio

1

MFRC522 :: requestTag () restituisce il tipo di scheda nei primi due byte del secondo parametro ( dati nell'esempio sopra riportato). Dovrai guardare questo valore per determinare che tipo di carta è. Utilizzare queste informazioni per stampare gli N byte ID richiesti.

In breve, potresti scaricare tutti i 16 byte (MAX_LEN) e testarli con i vari tipi di carte per vedere quali byte cambiano in modo deterministico, permettendoti così di determinare la lunghezza corretta dell'ID.

E nel caso ti faccia risparmiare un po 'di tempo, se chiami le funzioni di autotest di quella libreria - getFirmwareVersion () e digitalSelfTestPass (); è necessario chiamare nuovamente MFRC522 :: begin (), altrimenti non è possibile leggere gli ID RFID (al momento della scrittura, ovviamente.)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.