quarta-feira, 18 de setembro de 2013

Arduino leonardo + RFID escrevendo no cartão

No post anterior aprendemos a fazer a leitura do cartão, nessa vamos aprender a escrever nos blocos, para depois juntar isso tudo e criar um programa que automatize o login em computadores usando apenas o cartão de RFID:

Arduino leonardo + RFID introdução


O exemplo a seguir faz a leitura do cartão de RFID no bloco 0x08, o bloco 0 é aleatorio e contem dados do produtor do cartão, NÃO escreva nesse bloco, ou podera inutilizar o cartão.



  1. #include <PN532.h>
  2. #define SCK 13
  3. #define MOSI 11
  4. #define SS 10
  5. #define MISO 12
  6. PN532 nfc(SCK, MISO, MOSI, SS);
  7. uint8_t written=0;
  8. void setup(void)
  9. {
  10.   Serial.begin(9600);
  11.   Serial.println("Ola!");
  12.   nfc.begin();
  13.   uint32_t versiondata = nfc.getFirmwareVersion();
  14.   if (! versiondata)
  15.   {
  16.     Serial.print("Placa com PN53x nao encontrada");
  17.     while (1); // para programa
  18.   }
  19.     // Recebeu dados, hora de imprimir!
  20.     Serial.print("Chip PN5 encontrado"); Serial.println((versiondata>>24) & 0xFF, HEX);
  21.     Serial.print("Versao do Firmware: "); Serial.print((versiondata>>16) & 0xFF, DEC);
  22.     Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
  23.     Serial.print("Suporta "); Serial.println(versiondata & 0xFF, HEX);
  24.     // configura placa para ler RFID
  25.     nfc.SAMConfig();
  26. }
  27. void loop(void)
  28. {
  29.   uint32_t id;
  30.   // procura por cartoes
  31.   id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
  32.   if (id != 0)
  33.   {
  34.     Serial.print("Lendo cartao #");
  35.     Serial.println(id);
  36.     Serial.println();
  37.    
  38.     uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
  39.     uint8_t writeBuffer[16];
  40.     for(uint8_t ii=0;ii<16;ii++)
  41.     {
  42.        writeBuffer[ii]=ii; //completa o buffer com 0,1,2....F
  43.     }
  44.     if(nfc.authenticateBlock(1, id ,0x08,KEY_A,keys)) //autentica bloco 8 0x08
  45.     {
  46.    //se autenticou com sucesso
  47.     if(written == 0) //nao escrito
  48.     {
  49.     written = nfc.writeMemoryBlock(1,0x08,writeBuffer); // escreve writeBuffer[] no bloco 0x08
  50.     if(written)
  51.       Serial.println("Escreveu com sucesso!");  
  52.     }
  53.     uint8_t block[16];
  54.     //faz leitura do bloco 0x08
  55.     if(nfc.readMemoryBlock(1,0x08,block))
  56.     {
  57.     Serial.println("Lendo bloco 0x08:");  
  58.     //se operacao de leitura teve sucesso
  59.       for(uint8_t i=0;i<16;i++)
  60.       {
  61.         //imprime bloco de memoria
  62.         Serial.print(block[i],HEX);
  63.         Serial.print(" ");
  64.       }
  65.       Serial.println();
  66.      }
  67.    }
  68.   }
  69.   delay(500);
  70. }


Essa é a saída da leitura:


Found 1 tags
Sens Response: 0x4
Sel Response: 0x8
 0x7 0x83 0xBE 0x4ELendo cartao #126074446

Lendo bloco 0x08:
0 1 2 3 4 5 6 7 8 9 A B C D E F


Ou seja, o cartão #126074446, no bloco 0x08, escrevemos 0 1 2 3 4 5 6 7 8 9 A B C D E F 
O bloco, e ordem podem ser modificadas livremente, vamos deixar esse cartão dessa forma para utilizar no próximo post



Nenhum comentário:

Postar um comentário