ESP32 - Sistema de Cerradura de Puerta RFID/NFC

Este tutorial explica cómo usar el ESP32 para crear un sistema de cerradura de puerta RFID/NFC.

※ Nota:

Puedes combinar esta cerradura con el sistema de cerradura de puerta con teclado.

Acerca del módulo RFID/NFC RC522 y de la cerradura electromagnética

Tenemos tutoriales específicos sobre el módulo RFID/NFC RC522 y la cerradura electromagnética. Cada tutorial contiene información detallada e instrucciones paso a paso sobre la disposición de pines del hardware, el principio de funcionamiento, la conexión de cableado al ESP32, el código para ESP32... Obtenga más información sobre ellos en los siguientes enlaces:

Componentes del Sistema

Un sistema de cierre de puertas incluye dos partes principales:

  • Cerradura: ESP32, lector RFID/NFC, cerradura de solenoide o cerradura electromagnética
  • Llave de la puerta: etiquetas RFID/NFC
ESP32 ESP32 componente de cerradura RFID para puerta

Cómo funciona la cerradura de la puerta RFID/NFC

  • Los UIDs de las etiquetas autorizadas (clave) están predefinidos en el código del ESP32.
  • Cuando se acerca una etiqueta RFID/NFC al lector RFID/NFC.
  • El ESP32 lee el UID desde el lector.
  • El ESP32 compara el UID con los UIDs predefinidos.
  • Si coincide un UID, el ESP32 desactiva la cerradura electromagnética para abrir la puerta.

Diagrama de Cableado

Diagrama de cableado del sistema de cerradura RFID RC522 con ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

※ Nota:

El orden de los pines puede variar según los fabricantes. SIEMPRE utilice las etiquetas impresas en el módulo. La imagen de arriba muestra la disposición de pines de los módulos del fabricante DIYables.

Código ESP32 - Una sola tecla

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-rfid-nfc-door-lock-system */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define RELAY_PIN 32 // ESP32 pin GPIO32 connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte keyTagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == keyTagUID[0] && rfid.uid.uidByte[1] == keyTagUID[1] && rfid.uid.uidByte[2] == keyTagUID[2] && rfid.uid.uidByte[3] == keyTagUID[3] ) { Serial.println("Access is granted"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied, UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Haz clic en el icono de Bibliotecas en la barra izquierda del Arduino IDE.
  • Escribe “MFRC522” en el cuadro de búsqueda, luego busca la biblioteca por GithubCommunity
  • Instala la biblioteca haciendo clic en el botón Instalar.
Biblioteca MFRC522 para ESP32
  • Obtén el UID de la etiqueta siguiendo estos pasos:
    • Copia el código anterior y pégalo en el IDE de Arduino.
    • Compila y sube el código a la placa ESP32 haciendo clic en el botón Subir en el IDE de Arduino.
    • Abre el Monitor Serial en el IDE de Arduino.
    Cómo abrir el monitor serie en el IDE de Arduino
    • Toca una etiqueta RFID/NFC que quieras autorizar en el lector RFID-RC522
    • Anota el UID que se muestra en el Monitor Serial
    COM6
    Send
    Tap an RFID/NFC tag on the RFID-RC522 reader Access denied, UID: 2B B8 59 B1
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Actualiza el UID en la línea 18 del código anterior. Por ejemplo, cambia byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; a byte keytagUID[4] = {0x2B, 0xB8, 0x59, 0xB1};
    • Vuelve a cargar el código en el ESP32
    • Acerca una etiqueta RFID/NFC al módulo RFID-RC522
    • Consulta el resultado en el Monitor serie
    COM6
    Send
    Tap an RFID/NFC tag on the RFID-RC522 reader Access is granted
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Verifique la cerradura electromagnética; debería estar desactivada
    • Acerca otra etiqueta RFID/NFC al módulo RFID-RC522
    • Ver el resultado en el Monitor Serial
    COM6
    Send
    Tap an RFID/NFC tag on the RFID-RC522 reader Access is granted Access denied, UID: 1C 2A 52 E3
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  

Código ESP32 - Múltiples teclas

Hagamos una cerradura que acepte dos llaves: la llave del gerente y la llave de la secretaria para abrir la puerta.

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-rfid-nfc-door-lock-system */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define RELAY_PIN 32 // ESP32 pin GPIO32 connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap an RFID/NFC tag on the RFID-RC522 reader"); } void loop() { if (rfid.PICC_IsNewCardPresent()) { // new tag is available if (rfid.PICC_ReadCardSerial()) { // NUID has been readed MFRC522::PICC_Type piccType = rfid.PICC_GetType(rfid.uid.sak); if (rfid.uid.uidByte[0] == managerKeyUID[0] && rfid.uid.uidByte[1] == managerKeyUID[1] && rfid.uid.uidByte[2] == managerKeyUID[2] && rfid.uid.uidByte[3] == managerKeyUID[3] ) { Serial.println("The access is granted to manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else if (rfid.uid.uidByte[0] == secretaryKeyUID[0] && rfid.uid.uidByte[1] == secretaryKeyUID[1] && rfid.uid.uidByte[2] == secretaryKeyUID[2] && rfid.uid.uidByte[3] == secretaryKeyUID[3] ) { Serial.println("The access is granted to secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied, UID:"); for (int i = 0; i < rfid.uid.size; i++) { Serial.print(rfid.uid.uidByte[i] < 0x10 ? " 0" : " "); Serial.print(rfid.uid.uidByte[i], HEX); } Serial.println(); } rfid.PICC_HaltA(); // halt PICC rfid.PCD_StopCrypto1(); // stop encryption on PCD } } }

Pasos R\u00e1pidos

  • Se actualizaron los UUID de dos etiquetas RFID/NFC autorizadas para el código.
  • Sube el código al ESP32.
  • Acércalas una por una al módulo RFID-RC522.
  • El resultado en el Monitor Serial:
COM6
Send
Tap an RFID/NFC tag on the RFID-RC522 reader The access is granted to manager The access is granted to secretary
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Puedes modificar el código para agregar tres, cuatro o más etiquetas.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!