fbpixel
Etiquetas: , ,

El módulo RFID RC522 es un lector de tarjetas inteligentes que, entre otras cosas, permite activar un mecanismo cuando se presenta la tarjeta adecuada al lector. En este tutorial, veremos la gestión de un módulo RFID RC522 con una tarjeta NodeMCU ESP32.

Prerrequisito: Programar su NodeMCU con Arduino

Material

  • Ordenador
  • Placa NodeMCU ESP32
  • Cable USB A macho a Micro B macho
  • módulo RFID RC522

Esquema

El módulo RC522 RFID utiliza el protocolo SPI para comunicarse con el ESP32. La comunicación SPI utiliza cajas específicas en este tipo de microcontroladores.

El pinout es el siguiente (lado izquierdo RC522, lado derecho ESP32):

  • Vcc <-> 3V3 (o Vin(5V) según la versión del 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
nodemcu-esp32-rfid-rc522_bb Uso de un módulo RFID con un ESP32

Atención: Según la versión del módulo RFID, la tensión de alimentación puede ser diferente (3,3V o 5V). Compruebe la tensión de alimentación de su módulo.

Como recordatorio, aquí está el diagrama de pines de la placa ESP32.

ESP32-Pinout Uso de un módulo RFID con un ESP32

Código para leer una tarjeta RFID

Para utilizar el módulo RC522 RFID utilizamos la librería SPI.h que nos permitirá establecer la comunicación entre la tarjeta ESP32 y el módulo; y la librería MFRC522.h que nos permitirá dialogar con el 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

Cuando se pasa una tarjeta, un distintivo o un chip RFID por delante del módulo, la dirección de identificación del distintivo se muestra en el monitor de serie.

nodemcu-esp32-rfid-rc522-result Uso de un módulo RFID con un ESP32

Aplicaciones

  • Développer une interface Web qui ne s’active que lorsque le bon badge est passé devant le module

Fuentes