Site icon AranaCorp

Utilizar um módulo RFID com um ESP32

facebook Utilizar um módulo RFID com um ESP32twitter Utilizar um módulo RFID com um ESP32pinterest Utilizar um módulo RFID com um ESP32a2a 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):

nodemcu-esp32-rfid-rc522_bb Utilizar um módulo RFID com um 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