meta data de esta página
  •  

Lector RFID

En esta práctica vamos a utilizar un ESP8266-12E y el módulo RC522, para construirnos un lector de tarjetas de identificación por radio frecuencia (RFID)

Lo primero que tenemos que tener en cuenta es que dependiendo del modelos de Arduino que utilicemos tenemos que usar un pin u otro. La tabla con las equivalencias es la siguiente:

Módulo RC522ESP8266-12EESP8266Arduino
1→ Vcc3V3 3V3 3V3
2→ RSTD8D4D9
3→ GNDGNDGNDGND
4→ IRQ
5→ MISOD12D6D12
6→ MOSID11D7D11
7→ SCKD13D5D13
8→ SDAD10D8D10

El circuito quedaría de la siguiente forma:

El código para comprobar que se leen las etiquetas

//
#include <WiFiClientSecure.h>
#include <ESP8266WiFi.h>
#include <SPI.h>
#include <MFRC522.h>

#define SS_PIN 15
#define RST_PIN 2
 
MFRC522 rfid(SS_PIN, RST_PIN);

MFRC522::MIFARE_Key key; 
// Init array that will store new NUID 
byte nuidPICC[3];

void setup() 
{ 
  Serial.begin(9600);
  SPI.begin();          // Init SPI bus
  rfid.PCD_Init();      // Init MFRC522 

  for (byte i = 0; i < 6; i++) 
    {  key.keyByte[i] = 0xFF;
    }

  Serial.println(F("Este código escanea el NUID de etiquetas MIFARE Classsic."));
  Serial.print(F("Usar la siguiente llave:"));
  printHex(key.keyByte, MFRC522::MF_KEY_SIZE);
}
// ------------------------------------------------------------------
void printHex(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], HEX);
  }
}
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? " 0" : " ");
    Serial.print(buffer[i], DEC);
  }
}
//------------------------------------------------------------------

void loop() {

  // Buscamos tarjetas
  if ( ! rfid.PICC_IsNewCardPresent())
    return;

  // SI la encuentra la leemos
  if ( ! rfid.PICC_ReadCardSerial())
    return;

  Serial.print(F("PICC type: "));
  MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak);
  Serial.println(rfid.PICC_GetTypeName(piccType));

  // Check is the PICC of Classic MIFARE type
  if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI &&  
    piccType != MFRC522::PICC_TYPE_MIFARE_1K &&
    piccType != MFRC522::PICC_TYPE_MIFARE_4K) 
      {
        Serial.println(F("La etiqueta no es del tipo MIFARE Classic."));
        return;
      }

  if (rfid.uid.uidByte[0] != nuidPICC[0] || 
    rfid.uid.uidByte[1] != nuidPICC[1] || 
    rfid.uid.uidByte[2] != nuidPICC[2] || 
    rfid.uid.uidByte[3] != nuidPICC[3] ) 
    {
        Serial.println(F("Una nueva tarjeta ha sido detectada."));
    
        Serial.println(F("El NUID de la etiqueta es:"));
        Serial.print(F("En hex: "));
        printHex(rfid.uid.uidByte, rfid.uid.size);
        Serial.println();
        Serial.print(F("En decimal: "));
        printDec(rfid.uid.uidByte, rfid.uid.size);
        Serial.println();
     
       rfid.PICC_HaltA();
       rfid.PCD_StopCrypto1();
    }
    delay(600);
}

Referencias