RFID I2C

La carte testée ici est accessible via le protocole I2C.

IMGP2154

La carte sera connectée sur les ports SDA et SCL de la carte Arduino A4 et A5 pour la carte UNO.

Afin de lire et d’écrire avec cette carte nous avons utilisé la librairie d’AdaFruit que vous pourrez télécharger ici

http://learn.adafruit.com/adafruit-pn532-rfid-nfc/arduino-library

Le Sketch de test est le suivant :

 #include <Wire.h>  
 #include <Adafruit_NFCShield_I2C.h>  
 #define IRQ  (2)  
 #define RESET (3) // Not connected by default on the NFC Shield  
 Adafruit_NFCShield_I2C nfc(IRQ, RESET);  
 void setup(void) {  
  Serial.begin(9600);  
  Serial.println("Hello!");  
  nfc.begin();  
  // configure board to read RFID tags  
  nfc.SAMConfig();   
  Serial.println("Waiting for an ISO14443A Card ...");  
 }  
 void loop(void) {  
  uint8_t 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, &uidLength);  
  if (success) {  
   // Display some basic information about the card  
   Serial.println("Found an ISO14443A card");  
   Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");  
   Serial.print(" UID Value: ");  
   nfc.PrintHex(uid, uidLength);  
   Serial.println("");  
   if (uidLength == 4)  
   {  
    // We probably have a Mifare Classic card ...   
    Serial.println("Seems to be a Mifare Classic card (4 byte UID)");  
    // Now we need to try to authenticate it for read/write access  
    // Try with the factory default KeyA: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF  
    Serial.println("Trying to authenticate block 4 with default KEYA value");  
    uint8_t keya[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };  
    // Start with block 4 (the first block of sector 1) since sector 0  
    // contains the manufacturer data and it's probably better just  
    // to leave it alone unless you know what you're doing  
    success = nfc.mifareclassic_AuthenticateBlock(uid, uidLength, 4, 0, keya);  
    if (success)  
    {  
     Serial.println("Sector 1 (Blocks 4..7) has been authenticated");  
     uint8_t data[16];  
     // If you don't want to write something to block 4 to test with, comment  
     // the following line and this text should be read back in a minute  
     // WARNING ! Write only on block 4, 5 and 6; 8, 9 and 10;  
     memcpy(data, (const uint8_t[]){ 'a', 'd', 'a', 'f', 'r', 'u', 'i', 't', '.', 'c', 'o', 'm', 0, 0, 0, 0 }, sizeof data);  
     success = nfc.mifareclassic_WriteDataBlock (4, data);  
     // Try to read the contents of block 4  
     success = nfc.mifareclassic_ReadDataBlock(4, data);  
     if (success)  
     {  
      // Data seems to have been read ... spit it out  
      Serial.println("Reading Block 4:");  
      nfc.PrintHexChar(data, 16);  
      Serial.println("");  
      // Wait a bit before reading the card again  
      delay(1000);  
     }  
     else  
     {  
      Serial.println("Ooops ... unable to read the requested block. Try another key?");  
     }  
    }  
    else  
    {  
     Serial.println("Ooops ... authentication failed: Try another key?");  
    }  
   }  
   if (uidLength == 7)  
   {  
    // We probably have a Mifare Ultralight card ...  
    Serial.println("Seems to be a Mifare Ultralight tag (7 byte UID)");  
    // Try to read the first general-purpose user page (#4)  
    Serial.println("Reading page 4");  
    uint8_t data[32];  
    success = nfc.mifareultralight_ReadPage (4, data);  
    if (success)  
    {  
     // Data seems to have been read ... spit it out  
     nfc.PrintHexChar(data, 4);  
     Serial.println("");  
     // Wait a bit before reading the card again  
     delay(1000);  
    }  
    else  
    {  
     Serial.println("Ooops ... unable to read the requested page!?");  
    }  
   }  
  }  
 }  

et le résultat donne :

Lecture1

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories