fbpixel
Etiquetas: , ,
0
(0)

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

Pré-requisito: Programar o seu NodeMCU com Arduino

Material

  • Computador
  • Cartão ESP32 NodeMCU
  • Cabo USB A macho/ Micro B macho
  • módulo RFID RC522

Esquema

O módulo RC522 RFID se comunica com o ESP32 por meio do protocolo SPI. A comunicação SPI utiliza pinos específicos neste tipo de microcontrolador.

A ligação é feita da seguinte forma (lado esquerdo RC522, lado direito ESP32):

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

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

Para lembrar, este é o diagrama de ligação do cartão ESP32:

Código para ler um cartão RFID

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

//Libraries
#include <SPI.h>//https://www.arduino.cc/en/reference/SPI
#include <MFRC522.h>//https://github.com/miguelbalboa/rfid

//Constants
#define SS_PIN 5
#define RST_PIN 0

//Parameters
const int ipaddress[4] = {103, 97, 67, 25};

//Variables
byte nuidPICC[4] = {0, 0, 0, 0};
MFRC522::MIFARE_Key key;
MFRC522 rfid = MFRC522(SS_PIN, RST_PIN);

void setup() {
  //Init Serial USB
  Serial.begin(115200);
  Serial.println(F("Initialize System"));
  //init rfid D8,D5,D6,D7
  SPI.begin();
  rfid.PCD_Init();

  Serial.print(F("Reader :"));
  rfid.PCD_DumpVersionToSerial();
}

void loop() {
  readRFID();
}

void readRFID(void ) { /* function readRFID */
  ////Read RFID card

  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
  // Look for new 1 cards
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

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

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

  Serial.print(F("RFID In dec: "));
  printDec(rfid.uid.uidByte, rfid.uid.size);
  Serial.println();

  // 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 em frente do módulo, o monitor serial exibe o seu endereço de comunicação.

Aplicações

  • Desenvolver uma interface web que se ativa somente quando o cartão certo é passado em 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?