ESP8266 - Serrure de porte RFID

Ce tutoriel vous explique comment construire un système de verrouillage de porte en utilisant ESP8266, le module RFID/NFC RC522, un relais, un verrou à solénoïde ou un verrou électromagnétique, et éventuellement un LCD. Pour vous simplifier la tâche, le tutoriel vous guide dans la construction du verrou RFID en passant de simples à des étapes plus complexes. En détail, nous allons faire :

Serrure de porte RFID ESP8266 NodeMCU

Si vous souhaitez construire un système de verrouillage de porte à l'aide d'un mot de passe, veuillez consulter ESP8266 - Serrure de porte à clavier.

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×Solenoid Lock
1×(Alternative) Electromagnetic Lock
1×Relay
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) 5V Power Adapter for ESP8266
1×(Optional) ESP8266 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 du verrou électromagnétique

Si vous n'êtes pas familier avec le module RFID/NFC RC522, le verrou électromagnétique, le verrou à solénoïde (y compris le brochage, son fonctionnement et comment le programmer), vous pouvez en apprendre davantage en suivant ces tutoriels :

#Composants du système de verrouillage de porte

Le système de verrouillage de porte comprend deux composants principaux :

  • Verrou de porte : un ESP8266, un relais, un lecteur RFID/NFC, un verrou à solénoïde ou un verrou électromagnétique
  • Clé de porte : étiquettes RFID/NFC
Composant de serrure de porte RFID ESP8266 NodeMCU

Fonctionnement d'une serrure de porte RFID/NFC

  • L'utilisateur appuie sur une étiquette RFID/NFC sur le lecteur RFID/NFC, qui lit l'UID de l'étiquette.
  • ESP8266 récupère ensuite l'UID du lecteur et le compare aux UID qui ont été définis dans le code.
  • Si l'UID correspond à l'un des UID prédéfinis, ESP8266 désactivera le verrou solénoïde, déverrouillant ainsi la porte.
  • Ces étiquettes agissent comme les clés autorisées.
  • Le relais sera activé par ESP8266 pour verrouiller la porte après une période de temps spécifique.

Diagramme de câblage

  • Serrure de porte RFID RC522 avec serrure à solénoïde
Schéma de câblage de la serrure de porte à solénoïde RFID RC522 ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

Voir plus dans l'agencement des broches de l'ESP8266 et comment alimenter l'ESP8266 et d'autres composants.

  • Serrure de porte RFID RC522 avec serrure électromagnétique
Schéma de câblage du système de verrouillage de porte RFID RC522 ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

※ NOTE THAT:

Les fabricants peuvent agencer l'ordre des broches différemment, il est donc important de se fier aux étiquettes imprimées sur le module. Le schéma de brochage ci-dessus montre l'agencement des broches pour les modules produits par le fabricant DIYables.

Code ESP8266 - Clé Unique

/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU 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/esp8266/esp8266-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define RELAY_PIN D1 // The ESP8266 pin 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

Pour commencer avec l'ESP8266 sur l'IDE Arduino, suivez ces étapes :

  • Consultez le tutoriel comment configurer l'environnement pour ESP8266 sur Arduino IDE si c'est votre première utilisation de l'ESP8266.
  • Câblez les composants comme indiqué sur le schéma.
  • Connectez la carte ESP8266 à votre ordinateur à l'aide d'un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Choisissez la bonne carte ESP8266, comme (par exemple NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.

Afin de déterminer l'UID d'une étiquette RFID/NFC :

  • Téléchargez le code sur l'ESP8266 et ouvrez le moniteur série.
  • Tapez sur l'étiquette du module RFID-RC522 et l'UID s'affichera sur le moniteur série.
COM6
Send
Tap RFID/NFC tag on reader Access denied for user with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Une fois que vous avez l'UID :

  • Modifiez la ligne 18 du code ci-dessus pour refléter l'UID. Par exemple, remplacez byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; par byte keytagUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Téléversez le code modifié sur le ESP8266
  • Placez une étiquette RFID/NFC sur le module RFID-RC522
  • Vérifiez la sortie sur le moniteur série
COM6
Send
Tap RFID/NFC tag on reader Access is granted
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vérifiez que le verrou électromagnétique n'est pas verrouillé.
  • Tapez un autre tag RFID/NFC sur le module RFID-RC522.
  • Consultez la sortie sur le moniteur série.
COM6
Send
Tap RFID/NFC tag on reader Access is granted Access denied for user with UID: BD 1E 1D 22
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ NOTE THAT:

  • Pour faciliter les tests, le temps de déverrouillage a été réglé sur 2 secondes ; cependant, il devrait être augmenté pour une utilisation pratique/démonstration.
  • L'installation de la bibliothèque MFRC522 est nécessaire. Pour plus d'informations, veuillez vous référer au tutoriel ESP8266 - RFID/NFC RC522.

Code ESP8266 - Clés Multiples

Imaginons une pièce à laquelle seuls le directeur et la secrétaire peuvent accéder.

Dans ce cas, deux étiquettes RFID/NFC sont nécessaires : une pour le gestionnaire et l'autre pour le secrétaire. Les UID des deux étiquettes doivent être spécifiés dans le code.

/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU 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/esp8266/esp8266-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define RELAY_PIN D1 // The ESP8266 pin 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 } } }

Répétez les mêmes étapes que précédemment, puis tapez sur chaque étiquette du module RFID-RC522. L'affichage sur le moniteur série devrait apparaître comme suit :

COM6
Send
Tap RFID/NFC tag on reader Access is granted for secretary Access is granted for manager
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vous pouvez étendre le code écrit ci-dessus pour inclure trois, quatre ou plusieurs balises.

Ajout d'un écran LCD au verrouillage de porte RFID

Nous pouvons ajouter en option un écran LCD pour afficher le statut d'accès (par exemple ACCORDÉ/REFUSÉ) aux utilisateurs. Vous pouvez en savoir plus sur les écrans LCD dans ESP8266 - Tutoriel LCD

Schéma de câblage - Système de verrouillage de porte utilisant RFID, verrou à solénoïde ou serrure électromagnétique, et affichage LCD

Schéma de câblage d'une serrure de porte RFID RC522 avec ESP8266 NodeMCU et écran LCD

This image is created using Fritzing. Click to enlarge image

Veuillez noter que dans le schéma de câblage ci-dessus, une alimentation de 5V est ajoutée car la broche 5V de l'ESP8266 ne peut pas fournir assez de puissance pour alimenter à la fois le relais et l'écran LCD simultanément.

Code ESP8266 - Système de verrouillage de porte avec mot de passe utilisant le module RFID RC522, serrure à solénoïde ou serrure électromagnétique, et affichage LCD

/* * Ce code ESP8266 NodeMCU a été développé par newbiely.fr * Ce code ESP8266 NodeMCU 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/esp8266/esp8266-rfid-door-lock */ #include <SPI.h> #include <MFRC522.h> #include <LiquidCrystal_I2C.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D4 // The ESP8266 pin D4 #define RELAY_PIN D3 // The ESP8266 pin connects to relay MFRC522 rfid(SS_PIN, RST_PIN); LiquidCrystal_I2C lcd(0x27, 16, 2); // I2C address 0x27 (from DIYables LCD), 16 column and 2 rows 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 lcd.init(); // Initialize the LCD I2C display lcd.backlight(); Serial.println("Tap RFID/NFC Tag on 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("Access is granted for manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds lcd.clear(); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.clear(); } 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("Access is granted for secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds lcd.clear(); lcd.setCursor(0, 0); lcd.print("CORRECT!"); lcd.setCursor(0, 1); lcd.print("DOOR UNLOCKED!"); delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door lcd.clear(); } else { Serial.print("Access denied for user with UID:"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("INCORRECT!"); lcd.setCursor(0, 1); lcd.print("ACCESS DENIED!"); 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 } } }

※ NOTE THAT:

L'adresse du LCD peut varier selon le fabricant. Nous avons utilisé 0x27 dans notre code, comme spécifié par DIYables.

Ajout d'un capteur de porte à la serrure de porte RFID

Dans le code mentionné précédemment, l'ESP8266 verrouille la porte après un délai suivant le déverrouillage. Cependant, dans les applications pratiques, un capteur de porte est généralement ajouté au système. Si l'ESP8266 détecte que la porte est fermée, il verrouille immédiatement la porte au lieu d'attendre le délai.

Pour éviter de vous submerger, nous n'avons pas inclus le capteur de porte dans le schéma de câblage et le code. Au lieu de cela, nous laissons cette partie à votre créativité. Vous pouvez consulter les tutoriels ESP8266 - Capteur de porte et ESP8266 - Contrôle de relais par capteur de porte pour plus de conseils.

Gérer et stocker les clés RFID valides dans l'EEPROM

Le code ci-dessus contient des clés RFID (UID) valides qui sont intégrées en dur dans le code ESP8266. Cela signifie que si vous souhaitez ajouter ou supprimer des clés, vous devez modifier le code et le télécharger à nouveau sur l'ESP8266, ce qui est peu pratique.

Dans les applications réelles, il est nécessaire de gérer les clés RFID sans avoir à modifier et télécharger le code à chaque fois. Pour ce faire, les clés RFID peuvent être stockées dans l'EEPROM au lieu d'être codées en dur. Par conséquent, une méthode permettant de gérer facilement les clés RFID depuis l'EEPROM est nécessaire.

Deux méthodes sont disponibles pour gérer les clés RFID dans l'EEPROM :

  • Clés RFID comme clés maîtres
    • En utilisant une clé RFID comme clé maître ADD, de nouvelles clés peuvent être ajoutées au système. Une fois que l'ESP8266 détecte la clé maître ADD, il bascule entre le mode ADD et le mode OPERATION.
    • Durant le mode ADD, l'ESP8266 ajoute toutes les nouvelles clés qu'il détecte à l'EEPROM.
    • Une approche similaire est utilisée pour la clé maître DELETE et le mode DELETE.
  • Utiliser des commandes ADD/DELETE via Série/Bluetooth/IR
    • Les commandes sont transmises via Série/Bluetooth/IR, en utilisant des outils tels que le Moniteur Série, l'application Bluetooth, ou le contrôleur IR.
    • Les commandes consistent en une directive (ADD/DELETE) et l'UID de la clé RFID.
    • Pour améliorer la sécurité, un mot de passe devrait également être inclus avec la commande. L'ESP8266 vérifie le mot de passe pour déterminer si la commande est valide ou non.

    Afin d'utiliser l'une des deux méthodes mentionnées ci-dessus, une quantité considérable de code ESP8266 doit être ajoutée. Pour les personnes qui sont novices en programmation, cela peut représenter un défi. Par conséquent, ce tutoriel vise à fournir une compréhension de base du système de verrouillage de porte sans submerger les débutants avec un code complexe. Si vous souhaitez mettre en œuvre ce système à des fins pratiques, veuillez nous contacter via notre service de programmation payant.

Stockage de l'historique d'accès sur la carte SD

Pour suivre l'historique des accès, il peut être nécessaire de sauvegarder l'UID de la clé RFID, le statut d'accès (AUTORISÉ/REFUSÉ) et la date et l'heure. Comme l'EEPROM a une capacité insuffisante pour stocker tout l'historique, une carte SD peut être utilisée à la place. Vous pouvez trouver des instructions sur ce sujet dans le tutoriel ESP8266 - Enregistrer des données avec horodatage sur une carte SD.

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!