Système de verrouillage de porte ESP32 - RFID/NFC

Ce tutoriel vous explique comment utiliser l'ESP32 pour réaliser un système de verrouillage de porte RFID/NFC.

※ NOTE THAT:

Vous pouvez combiner cette serrure de porte avec le système de verrouillage de porte utilisant un clavier.

Préparation du matériel

1×ESP-WROOM-32 Dev Module
1×USB Cable Type-C
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×Solenoid Lock
1×(Aternative) Electromagnetic Lock
1×Relay
1×12V Power Adapter
10×Jumper Wires
1×(Optional) DC Power Jack
1×(Recommended) ESP32 Screw Terminal Adapter

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du module RFID/NFC RC522 et de la serrure électromagnétique

Nous avons des tutoriels spécifiques sur le module RFID/NFC RC522 et la serrure électromagnétique. Chaque tutoriel contient des informations détaillées et des instructions étape par étape sur le brochage du matériel, le principe de fonctionnement, la connexion des fils à l'ESP32, le code ESP32... Pour en savoir plus, consultez les liens suivants :

#Composants du système

Un système de verrouillage de porte comprend deux parties principales :

  • Serrure de porte : ESP32, lecteur RFID/NFC, serrure à solénoïde ou serrure électromagnétique
  • Clé de porte : étiquettes RFID/NFC
Composant de serrure de porte RFID ESP32

Comment fonctionne une serrure de porte RFID/NFC

  • Les UID des étiquettes autorisées (clé) sont prédéfinies dans le code ESP32
  • Lorsqu'une étiquette RFID/NFC est tapée sur le lecteur RFID/NFC
  • L'ESP32 lit l'UID depuis le lecteur
  • L'ESP32 compare l'UID avec les UID prédéfinis
  • Si un UID correspond, l'ESP32 désactive la serrure électromagnétique pour déverrouiller la porte.

Diagramme de câblage

Schéma de câblage du système de verrouillage de porte ESP32 RFID RC522

This image is created using Fritzing. Click to enlarge image

Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, vous pouvez trouver des conseils dans le tutoriel suivant : Comment alimenter l'ESP32.

※ NOTE THAT:

L'ordre des broches peut varier selon les fabricants. Utilisez TOUJOURS les étiquettes imprimées sur le module. L'image ci-dessus montre le schéma des broches des modules du fabricant DIYables.

Code ESP32 - Clé Unique

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } } }

Étapes rapides

  • Si c'est la première fois que vous utilisez ESP32, consultez comment configurer l'environnement pour ESP32 sur Arduino IDE.
  • Cliquez sur l'icône Libraries dans la barre latérale gauche de l'Arduino IDE.
  • Tapez "MFRC522" dans la boîte de recherche, puis recherchez la bibliothèque par GithubCommunity
  • Installez la bibliothèque en cliquant sur le bouton Install.
Bibliothèque ESP32 MFRC522
  • Découvrez l'UID de l'étiquette en suivant les étapes ci-dessous :
    • Copiez le code ci-dessus et collez-le dans l'IDE Arduino.
    • Compilez et téléchargez le code sur la carte ESP32 en cliquant sur le bouton Upload de l'IDE Arduino.
    • Ouvrez le moniteur série sur l'IDE Arduino.
    Comment ouvrir le moniteur série sur Arduino IDE
    • Appuyez sur une étiquette RFID/NFC que vous souhaitez autoriser sur le lecteur RFID-RC522
    • Notez l'UID affiché sur le moniteur série
    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  
    • Mettez à jour l'UID dans la ligne 18 du code ci-dessus. Par exemple, changez byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; en byte keytagUID[4] = {0x2B, 0xB8, 0x59, 0xB1};
    • Téléversez à nouveau le code sur l'ESP32
    • Tapez une étiquette RFID/NFC sur le module RFID-RC522
    • Vérifiez le résultat sur le moniteur série
    COM6
    Send
    Tap an RFID/NFC tag on the RFID-RC522 reader Access is granted
    Autoscroll Show timestamp
    Clear output
    9600 baud  
    Newline  
    • Vérifiez le verrou électromagnétique, il doit être désactivé
    • Tapez un autre tag RFID/NFC sur le module RFID-RC522
    • Consultez le résultat sur le moniteur série
    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  

Code ESP32 - Plusieurs clés

Fabriquons une serrure qui accepte deux clés : la clé du directeur et la clé du secrétaire pour déverrouiller la porte.

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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 } } }

Étapes rapides

  • Mis à jour les UUID de deux étiquettes RFID/NFC autorisées dans le code
  • Téléverser le code sur l'ESP32
  • Approcher les étiquettes autorisées une à une sur le module RFID-RC522.
  • Le résultat sur le moniteur série :
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  

Vous pouvez modifier le code pour ajouter trois, quatre ou plus de balises.

Vidéo

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!