ISO14443 A/B/C standartlarında RFID okuyucu

Başlatan gokhangokcen, 19 Ocak 2018, 15:40:52

gokhangokcen

Merhabalar,
Daha önceleri RC522 ile ufak çaplı giriş çıkış sistemleri, kendi demo uygulamalarımda vs. kullanmışlığım var. Sorunsuz bir şekilde kartları tag'leri okuyup değerlendirebiliyorum.

Fakat bir arkadaşım elinde bu beyaz rfid kartlardan getirdi okuyucu ünite elindeki kartı okumuyor. Sıkıntının sebebi elindeki kart arızalıdır diye düşündüm kendi kartlarımdan okutunca id bilgilerini alabiliyorum. Arkadaşın söylediği elindeki kartın ISO14443 standardında olduğu idi.Görsel olarak normal elimdeki kartlar ile aynı hiç bir farkı yok.Mifare olmasından şüphelendim mifare okuyucu vardı elimde hazır onu denedim yine okumadı. İnternette çeşitli aramalar yaptım bu kartlar için PN532 isimli bir nfc,rfid okuyucu buldum. Adafruit'in bir ürünü.Datasında bu kartları okuduğunu yazıyordu.(az ingilizce ile anladığım kadarı ile)
datasheet linki:https://cdn-shop.adafruit.com/datasheets/pn532ds.pdf

Amaç deneme yapmak olunca hazır kod buldum github'da arduinonun içerisine yükledim gerekli bağlantıları yaptım fakat yine kartları okuyamıyorum. PN532 kendi elimde bulunan kartları okuyor. 13,56 khz'lik kartlar ve taglar. Fakat bu 14443a-b-c standartlarını yine okuyamadım. Bunun için nasıl bir okuyucu bulamam gerekiyor? ya da yazılım farkı mı var? Daha önce böyle bir şey ile karşılaşan oldu mu?

kod olarak paylaşayım belki benim göremediğim bir yer vardır.

kodun linki ise şurada: https://github.com/adafruit/Adafruit-PN532 kütüphaneler vs. burada. İncelediğim kadarı ile kodda farklı bir seçenek yok. derledim ve yükledim elimdeki sıradan kartları okuyor ama ıso14443 serisi kartları okutamadım.
/**************************************************************************/
/*! 
    @file     iso14443a_uid.pde
    @author   Adafruit Industries
	@license  BSD (see license.txt)

    This example will attempt to connect to an ISO14443A
    card or tag and retrieve some basic information about it
    that can be used to determine what type of card it is.   
   
    Note that you need the baud rate to be 115200 because we need to print
	out the data and read from the card at the same time!

This is an example sketch for the Adafruit PN532 NFC/RFID breakout boards
This library works with the Adafruit NFC breakout 
  ----> https://www.adafruit.com/products/364
 
Check out the links above for our tutorials and wiring diagrams 
These chips use SPI or I2C to communicate.

Adafruit invests time and resources providing this open source code, 
please support Adafruit and open-source hardware by purchasing 
products from Adafruit!

*/
/**************************************************************************/
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_PN532.h>

// If using the breakout with SPI, define the pins for SPI communication.
#define PN532_SCK  (2)
#define PN532_MOSI (3)
#define PN532_SS   (4)
#define PN532_MISO (5)

// If using the breakout or shield with I2C, define just the pins connected
// to the IRQ and reset lines.  Use the values below (2, 3) for the shield!
#define PN532_IRQ   (2)
#define PN532_RESET (3)  // Not connected by default on the NFC Shield

// Uncomment just _one_ line below depending on how your breakout or shield
// is connected to the Arduino:

// Use this line for a breakout with a SPI connection:
Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);

// Use this line for a breakout with a hardware SPI connection.  Note that
// the PN532 SCK, MOSI, and MISO pins need to be connected to the Arduino's
// hardware SPI SCK, MOSI, and MISO pins.  On an Arduino Uno these are
// SCK = 13, MOSI = 11, MISO = 12.  The SS line can be any digital IO pin.
//Adafruit_PN532 nfc(PN532_SS);

// Or use this line for a breakout or shield with an I2C connection:
//Adafruit_PN532 nfc(PN532_IRQ, PN532_RESET);

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
// also change #define in Adafruit_PN532.cpp library file
   #define Serial SerialUSB
#endif

void setup(void) {

  pinMode(7, OUTPUT);

  #ifndef ESP8266
    while (!Serial); // for Leonardo/Micro/Zero
  #endif
  Serial.begin(115200);
  Serial.println("Hello!");

  nfc.begin();

  uint32_t versiondata = nfc.getFirmwareVersion();
  if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }
  
  // Got ok data, print it out!
  Serial.print("Found chip PN5"); Serial.println((versiondata>>24) & 0xFF, HEX); 
  Serial.print("Firmware ver. "); Serial.print((versiondata>>16) & 0xFF, DEC); 
  Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
  
  // Set the max number of retry attempts to read from a card
  // This prevents us from waiting forever for a card, which is
  // the default behaviour of the PN532.
  nfc.setPassiveActivationRetries(0xFF);
  
  // configure board to read RFID tags
  nfc.SAMConfig();
  
  Serial.println("Waiting for an ISO14443A card");
}

void loop(void) {
  boolean success;
  uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 };	// Buffer to store the returned UID
  uint8_t uidLength;				// Length of the UID (4 or 7 bytes depending on ISO14443A card type)
  
  // Wait for an ISO14443A type cards (Mifare, etc.).  When one is found
  // 'uid' will be populated with the UID, and uidLength will indicate
  // if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
  success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, &uid[0], &uidLength);
  
  if (success) {
    Serial.println("Found a card!");
    Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
    Serial.print("UID Value: ");
    for (uint8_t i=0; i < uidLength; i++) 
    {
      Serial.print(" 0x");Serial.print(uid[i], HEX); 
    }
    Serial.println("");
	// Wait 1 second before continuing
  digitalWrite(7, HIGH);
	delay(1000);
  digitalWrite(7, LOW);
  }
  else
  {
    // PN532 probably timed out waiting for a card
    Serial.println("Timed out waiting for a card");
  }
}


edit: kod ile veri kitapçığı ekleme.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

mg1980

#1
Epey zaman oldu,hafızamı toparlamaya çalışıyorum. Arduino'da bahsettiğiniz kartlarla uğraşırken mavi anahtarlığı halletmiş, beyaz karta gelince okutamamıştım.Üzerlerinde yazan seri no ile eşleşme olmuyordu galiba. O zaman şöyle bir şey yaptığımı hatırlıyorum: Arduino'ya LCD ekran bağladım. Okuduğu kodu ekrana yazdırdım.Üzerindeki no.dan farklıydı..kodu buna göre düzenleyince hallettim diye hatırlıyorum.
Sizin sorun böyle midir, yoksa kart cinsi mi farklıdır bilemiyorum.

gokhangokcen

Hocam mevzu veri okuyamamam. yalan yanlış birşeyler okusa çözümü olur ama hiç birşey okumuyor. Bahsettiğim gibi önceden elimde olan piyasa da ayak altında olan rfid kartları okuyor.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

controller

Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

gokhangokcen

Linkteki ürün benim elimdeki okuyucudan farklı @controller hocam. Yeni bir okuyucu almak mantıklı gelmiyor. Çünkü datasheette elimdeki okuyucunun bu tarz kartları okuduğu yazıyor (yanlış anlamadı isem)
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

controller

Farklı ürün olmasının bir önemi yok. İkisi de PN532 kullanmıyor mu? İki source kodu karşılaştırıp TypeB için farkı kendi koduna ekleyebilirsin.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

gokhangokcen

@controller deneyeceğim üstad. Ancak Pazartesi günü gidip deneyebilirim.Kartlar bir kurumda ve dışarıya çıkışına izin vermiyorlar. Gidip yerinde program güncelleyerek denerim artık.
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.