fbpixel
Etiquetas: , ,
4.6
(5)

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

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.

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.

Aplicaciones

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

Fuentes

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 4.6 / 5. Recuento de votos: 5

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en los medios sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?