Isso torna essa placa otina para interfacear com computador pela USB. Vamos descrever ao longo desse post como utilizar em conjunto com um modulo de RFID, vamos fazer a leitura desse cartão, e verificar se ele foi previamente cadastrado, se sim, o programa vai bloquear/desbloquear o windows(win+l)
Em um ambiente de trabalho esse projeto traz mais segurança as suas informações, sem necessidade de digitar senhas e se expor a vírus etc... Existe a possibilidade de ler o cartão e executar uma ação, assim como ficar lendo continuamente, se o cartão com a senha não estiver mais presente ele toma uma ação.
Nessa primeira parte vamos mostrar a leitura do cartão. Não vou entrar em detalhes sobre os módulos porque já foi feito nos reviews:
Review Arduino Leonardo
Review RFID Shield
Biblioteca usada
Esse exemplo faz a leitura de todos blocos de memoria de 0x00 até 0x63:
Esta tudo bem comendado e fácil de entender, vou colocar um vídeo para exemplificar
- #include <PN532.h>
- #define SCK 13
- #define MOSI 11
- #define SS 10
- #define MISO 12
- PN532 nfc(SCK, MISO, MOSI, SS);
- void setup(void)
- {
- Serial.begin(9600);
- Serial.println("Ola!");
- nfc.begin();
- uint32_t versiondata = nfc.getFirmwareVersion();
- if (! versiondata)
- {
- Serial.print("Placa com PN53x nao encontrada");
- while (1); // para programa
- }
- // Recebeu dados, hora de imprimir!
- Serial.print("Chip PN5 encontrado"); Serial.println((versiondata>>24) & 0xFF, HEX);
- Serial.print("Versao do Firmware: "); Serial.print((versiondata>>16) & 0xFF, DEC);
- Serial.print('.'); Serial.println((versiondata>>8) & 0xFF, DEC);
- Serial.print("Suporta "); Serial.println(versiondata & 0xFF, HEX);
- // configura placa para ler RFID
- nfc.SAMConfig();
- }
- void loop(void)
- {
- uint32_t id;
- // procura por cartoes
- id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);
- if (id != 0)
- {
- Serial.print("Lendo cartao #");
- Serial.println(id);
- Serial.println();
- uint8_t keys[]= {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; // chave primaria de cartao novo
- for(uint8_t blockn=0;blockn<64;blockn++)
- {
- if(nfc.authenticateBlock(1, id ,blockn,KEY_A,keys)) //autentica bloco
- {
- //se autenticou com sucesso
- uint8_t block[16];
- //faz leitura do bloco de memoria
- if(nfc.readMemoryBlock(1,blockn,block))
- {
- //se operacao de leitura teve sucesso
- for(uint8_t i=0;i<16;i++)
- {
- //imprime bloco de memoria
- Serial.print(block[i],HEX);
- if(block[i] <= 0xF) //arrumando dados para mostra de forma mais bonita
- {
- Serial.print(" ");
- }
- else
- {
- Serial.print(" ");
- }
- }
- Serial.print("| Bloco ");
- if(blockn <= 9) //arrumando dados para mostra de forma mais bonita
- {
- Serial.print(" ");
- }
- Serial.print(blockn,DEC);
- Serial.print(" | ");
- if(blockn == 0)
- {
- Serial.println("Block do produtor");
- }
- else
- {
- if(((blockn + 1) % 4) == 0)
- {
- Serial.println("Setor");
- }
- else
- {
- Serial.println("Dados do bloco");
- }
- }
- }
- }
- }
- }
- delay(2000);
- }
Ao se aproximar o cartão do modulo tem a seguinte leitura:
Chip PN5 encontrado32
Versao do Firmware: 1.6
Suporta 7
Found 1 tags
Sens Response: 0x4
Sel Response: 0x8
0x7 0x83 0xBE 0x4ELendo cartao #126074446
7 83 BE 4E 74 8 4 0 B9 46 7 83 BE 4E 74 2 | Bloco 0 | Block do produtor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 1 | Dados do bloco
A FF FF 7F F5 0 0 80 A FF FF 7F 0 FF 0 FF | Bloco 2 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 3 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 4 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 5 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 6 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 7 | Setor
0 1 2 3 4 5 6 7 8 9 A B C D E F | Bloco 8 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 9 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 10 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 11 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 12 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 13 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 14 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 15 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 16 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 17 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 18 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 19 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 20 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 21 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 22 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 23 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 24 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 25 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 26 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 27 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 28 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 29 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 30 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 31 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 32 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 33 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 34 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 35 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 36 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 37 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 38 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 39 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 40 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 41 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 42 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 43 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 44 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 45 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 46 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 47 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 48 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 49 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 50 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 51 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 52 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 53 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 54 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 55 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 56 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 57 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 58 | Dados do bloco
0 0 0 0 0 0 FF 7 80 69 FF FF FF FF FF FF | Bloco 59 | Setor
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 60 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 61 | Dados do bloco
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 | Bloco 62 | Dados do bloco
0 0 0 0 0 0 FF 7 80 BC FF FF FF FF FF FF | Bloco 63 | Setor
Assim conseguimos fazer a leitura completa do cartão, no próximo post vamos aprender a escrever os dados no cartão.
Olá
ResponderExcluirÉ possível realizar a leitura dos dados de um celular que possua a tecnologia nfc com essa shield ?
Oi Plinio, com Arduino nunca vi funcionando. Não sei te dizer ao certo se funciona e a compatibilidade com telefones.
Excluirabs