Site icon AranaCorp

Utilizar um módulo RFID com um ESP32

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

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):

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

Fontes

Exit mobile version