fbpixel
Etiquetas: , ,
0
(0)

O módulo RC522 RFID é um leitor de cartões inteligentes que permite, entre outras coisas, ativar um mecanismo quando o cartão certo é apresentado ao leitor. Neste tutorial, veremos como usar um módulo RC522 RFID com um cartão NodeMCU ESP8266.

Pré-requisito: Programar o seu NodeMCU com Arduino

Material

  • Computador
  • NodeMCU ESP8266
  • Cabo USB B macho/Micro B macho
  • Módulo RFID RC522

Esquema

O módulo RC522 RFID utiliza o protocolo SPI para comunicar com o ESP8266. A comunicação SPI utiliza pinos específicos neste tipo de microcontrolador.

O esquema de ligação é o seguinte (lado esquerdo RC522, lado direito ESP8266):

  • Vcc <-> 3V3 (ou Vin(5V), dependendo da versão do módulo)
  • RST (Reset) <-> D0
  • GND (Terra) <-> GND
  • MISO (Master Input Slave Output) <-> D6
  • MOSI (Master Output Slave Input) <-> D7
  • SCK (Serial Clock) <-> D5
  • SS/SDA (Slave select) <-> D8

Atenção: Dependendo da versão do módulo RFID, a tensão de alimentação pode ser diferente (3,3V ou 5V). Verifique a tensão de alimentação do seu módulo.

`Relembrando, o diagrama de ligação da placa ESP8266 é:

Código para leitura de um cartão RFID

Para utilizar o módulo RC522 RFID, utilizamos a biblioteca SPI.h, que permite estabelecer a comunicação entre o cartão ESP8266 e o módulo. Também usamos a biblioteca MFRC522.h, que permite dialogar com o módulo.

#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN D8
#define RST_PIN D0

MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class

MFRC522::MIFARE_Key key;

// Init array that will store new NUID
byte nuidPICC[4];

void setup() {
  Serial.begin(115200);
  SPI.begin(); // Init SPI bus
  rfid.PCD_Init(); // Init MFRC522
  Serial.println();
  Serial.print(F("Reader :"));
  rfid.PCD_DumpVersionToSerial();

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
  Serial.println();
  Serial.println(F("This code scan the MIFARE Classic NUID."));
  Serial.print(F("Using the following key:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}

void loop() {

  // Reset the loop if no new card present on the sensor/reader. This saves the entire process when idle.
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // Verify if the NUID has been readed
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&
      piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
      piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
    Serial.println(F("Your tag is not of type MIFARE Classic."));
    return;
  }

  if (rfid.uid.uidByte[0] != nuidPICC[0] ||
      rfid.uid.uidByte[1] != nuidPICC[1] ||
      rfid.uid.uidByte[2] != nuidPICC[2] ||
      rfid.uid.uidByte[3] != nuidPICC[3] ) {
    Serial.println(F("A new card has been detected."));

    // Store NUID into nuidPICC array
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }

    Serial.println(F("The NUID tag is:"));
    Serial.print(F("In hex: "));
    printHex(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
    Serial.print(F("In dec: "));
    printDec(rfid.uid.uidByte, rfid.uid.size);
    Serial.println();
  }
  else Serial.println(F("Card read previously."));

  // Halt PICC
  rfid.PICC_HaltA();

  // Stop encryption on PCD
  rfid.PCD_StopCrypto1();
}


/**
   Helper routine to dump a byte array as hex values to Serial.
*/
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}

/**
   Helper routine to dump a byte array as dec values to Serial.
*/
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}

Resultado

Quando um cartão, crachá ou chip RFID é passado na frente do módulo, o o monitor serial exibe o seu endereço de identificação.

Aplicações

  • Desenvolver uma interface web que se ativa somente quando o cartão certo é passado na frente do módulo

Fontes

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?