Saya sedang mengerjakan proyek untuk Makerspace lokal saya, kami memiliki anggaran terbatas, jadi saya berharap dapat menggunakan pembaca RFID / NFC el'cheap'o RFID-RC522 di eBay, saya menerima beberapa papan berbasis SPI, mereka bekerja, namun, contoh kode untuk mereka terbatas.
Saya telah menemukan beberapa perpustakaan yang berbeda dan memilih yang ini: https://github.com/ljos/MFRC522
Masalahnya adalah bahwa semua kode yang tersedia secara online tampaknya muncul dari beberapa kode Python orang Cina yang telah diterjemahkan orang, dan diretas ke perpustakaan Arduino.
Kode berfungsi, tetapi kartu Mifare dimaksudkan untuk memiliki 4, 7 atau 10 byte UID dan contoh / pustaka mengembalikan nomor seri 5 byte.
Tidak ada dokumentasi dan lembar data NXP tidak dapat dipahami ... Selain itu tampaknya berfungsi dengan sebagian besar kartu, tetapi tidak berfungsi dengan kartu Mastercard PayWave yang sesuai dengan standar ISO 14443. Pembaca RDM880 yang lebih mahal yang didasarkan pada MFRC500 berfungsi dengan baik dan memiliki perpustakaan yang bagus tetapi biaya membuat implementasi tidak mungkin.
Jadi, dapatkah seseorang membantu saya untuk mendapatkan unit berbasis NXP MFRC522 ini membaca UID dari semua kartu 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
panjang array Anda 5. Apakah Anda mencoba menggunakan array yang lebih besar karena Anda menginginkan hasil 10 byte?Jawaban:
Maaf, tapi saya harus tidak setuju dengan 'lembar data NXP Anda tidak dapat dipahami' . Dari HALAMAN PERTAMA dari lembar data MFRC522:
'Keterangan: MFRC522 mendukung semua varian MIFARE Mini, MIFARE 1K, MIFARE 4K, MIFARE Ultralight, MIFARE DESFire EV1 dan protokol identifikasi RF MIFARE Plus'
Di sini dikatakan bahwa MFRC522 hanya mencakup sebagian dari ISO / IEC 14443. Berikut ini tidak ada pada NXP RC522:
* MIFARE DESFire EV1 (termasuk enkripsi AES)
MIFARE DESFire EV2 (termasuk MIsmartApp, MAC Transaksi, Aplikasi Tak Terbatas. Pengganti drop-in MIFARE Plus untuk MIFARE Classic dengan tingkat keamanan bersertifikat (berbasis AES 128))
MIFARE SAM AV2 (modul akses aman yang menyediakan penyimpanan kunci kriptografi dan fungsi kriptografi yang aman) *
Ini mungkin yang digunakan dalam kartu bank. Sekali lagi, dari HALAMAN PERTAMA dari lembar data MFRC500:
'Semua lapisan protokol ISO / IEC 14443 A didukung.'
Anda harus membajak semua spesifikasi MIFARE / ISO / IEC 14443 yang berbeda untuk mengetahui berapa banyak byte ID yang ada untuk tipe yang berbeda (saya menduga tipe yang berbeda mengembalikan jumlah byte yang berbeda).
Jadi, pada dasarnya, Anda kacau. Pegas untuk pembaca berbasis MFRC500 yang mahal. Saya berasumsi bahwa dengan biaya yang lebih tinggi Anda juga mendapatkan API kelas tinggi, dokumentasi, dan contoh atau bahkan dukungan teknis (terkesiap!).
Bersulang
sumber
MFRC522 :: requestTag () mengembalikan jenis kartu dalam dua byte pertama dari parameter ke-2 ( data dalam contoh Anda di atas). Anda perlu melihat nilai ini untuk menentukan jenis kartu itu. Gunakan informasi ini untuk mencetak diperlukan N byte dari ID.
Dalam keadaan darurat, Anda dapat membuang 16 byte penuh (MAX_LEN), dan mengujinya dengan berbagai jenis kartu Anda untuk melihat byte mana yang berubah secara deterministik, sehingga memungkinkan Anda untuk menentukan panjang ID yang benar.
Dan kalau-kalau itu menghemat waktu Anda, jika Anda memanggil fungsi swa-uji pustaka itu - getFirmwareVersion () dan digitalSelfTestPass (); perlu untuk memanggil MFRC522 :: begin () lagi, jika tidak, tidak mungkin untuk membaca ID RFID (pada saat penulisan tentunya.)
sumber
Coba gunakan yang paling populer.
https://github.com/miguelbalboa/rfid
Ini bekerja untuk saya. Ini mengembalikan UID seperti yang Anda inginkan. Hapus saja fungsi-fungsi lain hanya dengan mendapatkan uid dari contohnya.
sumber