Aller au contenu

Lecture d un tag rfid pn532

Lecture d'un tag RFID par PN532

Branchement du kit PN532

nfc_rfid_pn532_basic.jpg |A | |B| |----- |------- |-----| | GND | \<-> |GND| | VCC | \<-> |5V| | SDA | \<-> |A5| | SCL | \<-> |A4|


Nécessite l'installation de la librairie nfc_moudle_v1.1

Code Test

/**

  @brief   example of reading mf1s50 card for NFC_MODULE

    For this demo, waiting for a MF1S50 card or tag, after reading a card/tag UID,
    then try to read the block 4/5/6/7 ..

  V1.0 initial version

*/

/** include library */
#include "nfc.h"

/** define a nfc class */
NFC_Module nfc;

void setup(void)
{
  Serial.begin(9600);
  nfc.begin();
  Serial.println("NFC MF1S50 Reader!");

  uint32_t versiondata = nfc.get_version();
  /*if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }*/

  // Affiche la version de la puce!
  Serial.print("Puce 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 normal mode, and disable SAM */
  nfc.SAMConfiguration();
}

void loop(void)
{
  u8 buf[32],sta;

  /** Polling the mifar card, buf[0] is the length of the UID */
  sta = nfc.InListPassiveTarget(buf);

  /** check state and UID length */
  if(sta && buf[0] == 4){
    /** the card may be Mifare Classic card, try to read the block */ 
    Serial.println(); 
    Serial.print("UUID length:");
    Serial.print(buf[0], DEC);
    Serial.println();
    Serial.print("UUID:");
    nfc.puthex(buf+1, buf[0]);
    Serial.println();
    /** factory default KeyA: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF */
    u8 key[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
    u8 blocknum = 4;
    /** Authentication blok 4 */
    sta = nfc.MifareAuthentication(0, blocknum, buf+1, buf[0], key);
    if(sta){
      /** save read block data */
      u8 block[16];
      Serial.println("Authentication success.");

      // uncomment following lines for writing data to blok 4
/*    
      strcpy((char*)block, "Elechoues - NFC");
      sta = nfc.MifareWriteBlock(blocknum, block);
      if(sta){
        Serial.println("Write block successfully:");
      }
*/  

      /** read block 4 */
      sta = nfc.MifareReadBlock(blocknum, block);
      if(sta){
        Serial.println("Read block 4 successfully:");

        nfc.puthex(block, 16);
        Serial.println();
      }

      /** read block 5 */
      sta = nfc.MifareReadBlock(blocknum+1, block);
      if(sta){
        Serial.println("Read block 5 successfully:");

        nfc.puthex(block, 16);
        Serial.println();
      }

      /** read block 6 */
      sta = nfc.MifareReadBlock(blocknum+2, block);
      if(sta){
        Serial.println("Read block 6 successfully:");

        nfc.puthex(block, 16);
        Serial.println();
      }

      /** read block 7 */
      sta = nfc.MifareReadBlock(blocknum+3, block);
      if(sta){
        Serial.println("Read block 7 successfully:");

        nfc.puthex(block, 16);
        Serial.println();
      }
      delay(2000);
    }  
  }
}

Verification de tag RFID

Allume une LED orange si c'est le bon tag, LED rouge si erroné

/** include library */
#include "nfc.h"

/** define a nfc class */
NFC_Module nfc;


int ledPinOK =12;
int ledPinNO =13;
String valid_UUID = "77105186124";

void setup(void)
{

  pinMode(ledPinOK, OUTPUT);    
  pinMode(ledPinNO, OUTPUT); 
  Serial.begin(9600);
  nfc.begin();
  Serial.println("NFC MF1S50 Reader!");

  uint32_t versiondata = nfc.get_version();
  /*if (! versiondata) {
    Serial.print("Didn't find PN53x board");
    while (1); // halt
  }*/

  // Affiche la version de la puce!
  Serial.print("Puce 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 normal mode, and disable SAM */
  nfc.SAMConfiguration();
}

void loop(void)
{
  u8 buf[32],sta;

  String UUID; /* ajoutee */
  /** Polling the mifar card, buf[0] is the length of the UID */
  sta = nfc.InListPassiveTarget(buf);

  digitalWrite(ledPinOK, LOW);
  digitalWrite(ledPinNO, LOW);

  /** check state and UID length */
  if(sta && buf[0] == 4){
    /** the card may be Mifare Classic card, try to read the block */ 

    Serial.println(); 
    Serial.print("UUID length:");
    Serial.print(buf[0], DEC);
    Serial.println();
    Serial.print("UUID:");
    nfc.puthex(buf+1, buf[0]);
    Serial.print("Longueur :");
    Serial.println(buf[0],DEC);
    for (int i=1; i<=buf[0];i++){
        if (buf[i]<0x10){
            Serial.print("0");
        }
        Serial.print(buf[i]);
        UUID.concat(buf[i]);
    }
    Serial.println();

    // Verification du badge
    if(UUID == valid_UUID){
      Serial.print("OK");
      digitalWrite(ledPinOK, HIGH);
    }
    else{
      Serial.print("NO");
      digitalWrite(ledPinNO, HIGH);
    }      

    Serial.println();

  }
}

Mes tags RFID

Type Source UUID Block4
tag kit F5 11 C8 C5 45 6C 65 63 68 6F 75 65 73 20 2D 20 4E 46 43 00
carte kit 4D 69 BA 7C 45 6C 65 63 68 6F 75 65 73 20 2D 20 4E 46 43 00
tag Vigick M 52 1A B6 5D non lisible?