/*☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄
☄ ☄
☄ ☘ DATOS GENERALES: ☄
☄ NOMBRE: Uso básico del lector RFID MFRC522. ☄
☄ FECHA: 14 de marzo de 2026. ☄
☄ VERSIÓN: 2.0. ☄
☄ ☄
☄ AUTOR: M. en C. Esli Castellanos Berján. ☄
☄ E-MAIL: [email protected]. ☄
☄ COMPAÑÍA: Universidad de Colima - Facultad de Telemática. ☄
☄ ☄
☄ uC: ESP32 (compatible con Arduino IDE). ☄
☄ Nombre: ESP32 DevKit v1. ☄
☄ ☄
☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄
☄ ☄
☄ ☘ DESCRIPCIÓN DEL PROGRAMA: ☄
☄ Arquitectura de software que ejemplifica el uso del lector RFID. ☄
☄ Se emplea la librería MFRC522 para comunicación SPI. ☄
☄ El programa detecta tarjetas, imprime su UID y continúa ejecutando ☄
☄ otras tareas sin bloquear el flujo gracias al uso de millis(). ☄
☄ ☄
☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄
☄ ☄
☄ ☘ NOTAS: ☄
☄ - El uso de millis() evita bloqueos y permite multitarea. ☄
☄ - La comunicación SPI requiere conexiones correctas: ☄
☄ SS_PIN → GPIO5, RST_PIN → GPIO21. ☄
☄ - El UID de la tarjeta es único y puede usarse como identificador. ☄
☄ - Este ejemplo es base para sistemas de acceso, control de inventario, ☄
☄ o registro de asistencia. ☄
☄ ☄
☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄☄*/
#include <SPI.h>
#include <MFRC522.h>
// Definición de pines para el lector RFID
#define SS_PIN 5 // Slave Select (chip select del lector)
#define RST_PIN 21 // Reset del lector
MFRC522 rfid(SS_PIN, RST_PIN); // Objeto RFID
// Variables para control no bloqueante con millis()
unsigned long lastCheck = 0; // almacena el último tiempo de revisión
const unsigned long interval = 200; // intervalo en ms para revisar el RFID
void setup() {
Serial.begin ( 115200 ); // Comunicación serial para depuración
SPI.begin ( ); // Inicializa bus SPI
rfid.PCD_Init ( ); // Inicializa el lector RFID
// Mensaje inicial en consola para indicar que el programa arrancó.
Serial.println("=====================================");
Serial.println(" PRUEBA DE MFRC522 - ESP-32 ");
Serial.println("=====================================");
Serial.println(F("El lector RFID-MFRC522 ha iniciado correctamente"));
}
void loop ( void ) {
// Ejemplo de otras tareas que se ejecutan en paralelo
//Serial.println("Programa corriendo otras tareas...");
delay(100); // Simulación de otra tarea (puede ser lectura de sensor)
// Llamamos a la función de revisión periódica del RFID
checkRFID();
}
// Función que revisa el lector RFID cada cierto intervalo usando millis()
void checkRFID ( void ) {
unsigned long currentMillis = millis();
if (currentMillis - lastCheck >= interval) {
lastCheck = currentMillis;
// Revisar si hay tarjeta nueva y leer su UID
if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
Serial.println("Tarjeta detectada!");
Serial.print("UID:");
for (byte i = 0; i < rfid.uid.size; i++) {
Serial.print(rfid.uid.uidByte[i] < 0x10 ? ":0" : ":");
Serial.print(rfid.uid.uidByte[i], HEX);
}
rfid.PICC_HaltA(); // Detiene la comunicación con la tarjeta
}
}
}
Loading
esp32-devkit-c-v4
esp32-devkit-c-v4
Loading
mfrc522
mfrc522