Otázka:
Jak mohu použít RFID-RC522 s Arduino?
unknowndomain
2014-04-29 04:41:49 UTC
view on stackexchange narkive permalink

Pracuji na projektu pro svůj místní Makerspace, máme omezený rozpočet, takže jsem doufal, že použiji čtečky RFID / RC522 el'cheap'o RFID / NFC na eBay, dostal jsem pár desek založených na SPI, oni práce, ale příklady kódu pro ně jsou omezené.

Našel jsem několik různých knihoven a usadil se na této: https://github.com/ljos/MFRC522

Potíž je v tom, že se zdá, že se veškerý dostupný kód online objevuje u některých čínských lidí Pythonský kód, který lidé přeložili a nabourali do knihovny Arduino.

Kód funguje, ale karty Mifare jsou chtěl mít 4, 7 nebo 10 bajtů UID a příklad / knihovna vrací 5 bajtové sériové číslo.

Neexistuje žádná dokumentace a datový list NXP je nepochopitelný ... Navíc se zdá, že funguje s většinou karet, ale nefunguje s kartami Mastercard PayWave, které odpovídají normě ISO 14443. Dražší čtečka RDM880, která je založena na MFRC500, funguje dobře a má pěknou knihovnu, ale náklady znemožňují implementaci.

Takže mi může někdo pomoci získat tuto jednotku založenou na NXP MFRC522, která čte UID z všechny karty ISO 14443.

  #include <SPI.h> # include <MFRC522.h> # definovat RFID_SS 10 # definovat RFID_RST 5MFRC522 rfid (RFID_SS, RFID) ; 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 (); }}}  
To pravděpodobně není problém, ale vaše pole `uid` má délku 5. Zkusili jste použít větší pole, protože chcete výsledek 10 bajtů?
Ano, udělal, ale nepomohlo to, ve skutečnosti se zdá, že druhý čtenář vrací pouze 4 bajtová čísla a je to jiná značka se slušným ukázkovým kódem, velmi zmatená.
Tři odpovědi:
staqUUR
2014-05-06 06:53:47 UTC
view on stackexchange narkive permalink

Je nám líto, ale musím nesouhlasit s vaším „Datový list NXP je nepochopitelný“ . Z PRVNÍ STRÁNKY datasheetu MFRC522:

'Poznámka: MFRC522 podporuje všechny varianty MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 a MIFARE Plus Protokoly RF identifikace

Zde uvádí, že MFRC522 pokrývá pouze část ISO / IEC 14443. Následující chybí NXP RC522:

* MIFARE DESFire EV1 (zahrnuje šifrování AES)

MIFARE DESFire EV2 (zahrnuje MIsmartApp , Transakční MAC, neomezený počet aplikací MIFARE Plus náhrada za MIFARE Classic s certifikovanou úrovní zabezpečení (na základě AES 128))

MIFARE SAM AV2 (zabezpečený přístupový modul, který poskytuje bezpečné úložiště kryptografických klíčů a kryptografických funkcí) *

Toto jsou pravděpodobně ty, které se používají u bankovních karet. Opět z PRVNÍ STRÁNKY datasheetu MFRC500:

„Podporovány jsou všechny protokolové vrstvy normy ISO / IEC 14443 A.“

Budete muset projít všemi různými specifikacemi MIFARE / ISO / IEC 14443, abyste zjistili, kolik ID bajtů existuje pro různé typy (mám podezření, že různé typy vracejí různé množství bytů).

Takže jste v zásadě v háji. Pružina pro drahou čtečku založenou na MFRC500. Předpokládám, že s vyššími náklady získáte také prvotřídní API, dokumentaci a příklady, nebo dokonce (gasp!) Technickou podporu.

Na zdraví

Máte pravdu, že to MFRC522 nepodporuje, ale mýlíte se, že řešením je MFRC500, že toto zařízení podporuje pouze karty MIFARE Classic, MIFARE 1K (S50) a MIFARE 4K (S70).
Také modul MFRC522 je <3 GBP a MFRC500 je 30 GBP.
Kingsley
2014-08-27 07:58:50 UTC
view on stackexchange narkive permalink

MFRC522 :: requestTag () vrací typ karty v prvních dvou bajtech druhého parametru ( data ve výše uvedeném příkladu). Tuto hodnotu budete muset zkontrolovat, abyste zjistili, o jaký typ karty jde. Tyto informace použijte k vytištění požadovaných N bajtů ID.

Okamžitě můžete vyhodit celých 16 bajtů (MAX_LEN) a otestovat je pomocí různých karet typy, abyste zjistili, které bajty se mění deterministickým způsobem, což vám umožňuje určit správnou délku ID.

A v případě, že vám ušetří nějaký čas, pokud zavoláte funkce autotestu této knihovny - getFirmwareVersion () a digitalSelfTestPass (); je nutné znovu zavolat MFRC522 :: begin (), jinak není možné číst RFID ID (v době psaní samozřejmě).

Jeff Valerio
2014-10-31 06:46:01 UTC
view on stackexchange narkive permalink

Zkuste použít nejoblíbenější.

https://github.com/miguelbalboa/rfid

Toto pro mě funguje. Vrátí uID jako to, co si přejete. Jednoduše odstraňte ostatní funkce, pouze získání uid z jeho příkladu.



Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...