ESP8266 - Verrouillage de porte à clavier

Ce tutoriel vous explique comment construire un système de verrouillage de porte par mot de passe en utilisant un ESP8266, un clavier et un verrou à solénoïde ou un verrou électromagnétique. Voici le fonctionnement du système de verrouillage de porte :

ESP8266 NodeMCU, clavier, serrure à solénoïde

Pour simplifier, le tutoriel est divisé en plusieurs étapes, allant de facile à difficile :

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×Keypad 3x4 and 4x4 Kit
1×Relay
1×Solenoid Lock
1×12V Power Adapter
1×DC Power Jack
1×Jumper Wires
1×(Optional) Electromagnetic Lock
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 clavier, du verrou à solénoïde et du verrou électromagnétique

Le verrou à solénoïde et le verrou électromagnétique sont utilisés pour verrouiller/déverrouiller la porte. Ils diffèrent principalement l'un de l'autre en termes de conception mécanique. Leur câblage pour l'ESP8266 est similaire. Le code ESP8266 pour les contrôler est le même.

Si vous n'êtes pas familier avec le clavier, le verrou à solénoïde, le verrou électromagnétique (brochage, fonctionnement, programmation...), les tutoriels suivants peuvent vous aider à apprendre :

Diagramme de câblage

  • Schéma de câblage avec ESP8266, clavier et serrure à solénoïde
Schéma de câblage de l'ESP8266 NodeMCU, du clavier numérique et de la serrure à solénoïde

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.

  • Schéma de câblage avec ESP8266, clavier et serrure électromagnétique
Schéma de câblage de l'ESP8266 NodeMCU, du clavier et de la serrure électromagnétique

This image is created using Fritzing. Click to enlarge image

Code ESP8266 - Serrure de porte à clavier

/* * 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-keypad-door-lock */ #include <Keypad.h> #define RELAY_PIN D0 // The ESP8266 pin connected to the IN pin of relay #define ROW_NUM 4 // 4 rows #define COLUMN_NUM 3 // 3 columns char key_layout[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {D1, D2, D3, D4}; // The ESP8266 pins connect to the row pins byte pin_column[COLUMN_NUM] = {D5, D6, D7}; // The ESP8266 pins connect to the column pins Keypad keypad = Keypad( makeKeymap(key_layout), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "0156CAB"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "545423"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 32 pinMode(RELAY_PIN, OUTPUT); digitalWrite(RELAY_PIN, HIGH); // lock the door } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("Valid Password => unlock the door"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.println("Invalid Password => Try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Étapes rapides

Pour commencer avec ESP8266 sur Arduino IDE, 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é dans le schéma.
  • Connectez la carte ESP8266 à votre ordinateur à l'aide d'un câble USB.
  • Ouvrez l'Arduino IDE sur votre ordinateur.
  • Choisissez la bonne carte ESP8266, comme par exemple le NodeMCU 1.0 (Module ESP-12E), et son port COM respectif.
  • Connectez un câble USB entre l'ESP8266 et le PC.
  • Ouvrez l'Arduino IDE, sélectionnez la bonne carte et le bon port.
  • Cliquez sur l'icône Libraries dans la barre latérale gauche de l'Arduino IDE.
  • Recherchez "keypad" et localisez la bibliothèque de clavier créée par Mark Stanley et Alexander Brevig.
  • Ensuite, appuyez sur le bouton Install pour compléter l'installation de la bibliothèque de clavier.
Bibliothèque de clavier pour ESP8266 NodeMCU
  • Copiez le code ci-dessus et ouvrez-le avec l'IDE Arduino.
  • Cliquez sur le bouton Upload dans l'IDE Arduino pour envoyer le code à l'ESP8266.
  • Ouvrez le moniteur série.
  • Appuyez sur les touches 12345 suivi du symbole #.
  • Ensuite, appuyez sur les touches 1234ABC suivi du symbole #.
  • Vérifiez l'état de la langue de la serrure pendant 20 secondes.
  • Consultez le résultat sur le moniteur série.
COM6
Send
The incorrect password! try again The correct password! Unlocking the door in 20 seconds
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Explication du code

Les mots de passe valides sont prédéfinis dans le code ESP8266. Une chaîne est utilisée pour stocker le mot de passe saisi par les utilisateurs, appelée chaîne d'entrée. Sur le clavier, deux touches (* et #) sont utilisées à des fins spéciales : effacer le mot de passe et terminer le mot de passe. Le système fonctionne comme suit :

  • À part deux touches spéciales, si une autre touche est pressée, elle est ajoutée à la chaîne d'entrée
  • Si * est pressé, la chaîne d'entrée est effacée. Vous pouvez l'utiliser pour initier ou recommencer à saisir le mot de passe
  • Si # est pressé :
    • L'ESP8266 compare la chaîne d'entrée avec les mots de passe pré-définis. S'il correspond à un des mots de passe pré-définis, l'ESP8266 contrôle le relais pour déverrouiller la porte.
    • Que le mot de passe soit correct ou non, l'ESP8266 efface la chaîne d'entrée pour la prochaine saisie.

Code ESP8266 - Clés Multiples

/* * 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-keypad-door-lock */ #include <Keypad.h> #define RELAY_PIN D0 // The ESP8266 pin connected to the IN pin of relay #define ROW_NUM 4 // 4 rows #define COLUMN_NUM 3 // 3 columns char key_layout[ROW_NUM][COLUMN_NUM] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte pin_rows[ROW_NUM] = {D1, D2, D3, D4}; // The ESP8266 pins connect to the row pins byte pin_column[COLUMN_NUM] = {D5, D6, D7}; // The ESP8266 pins connect to the column pins Keypad keypad = Keypad( makeKeymap(key_layout), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234ABC"; // change your password here const String password_2 = "5642CD"; // change your password here const String password_3 = "4545B"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum input characters is 33, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, LOW); // lock the door } void loop() { char key = keypad.getKey(); if (key){ Serial.println(key); if(key == '*') { input_password = ""; // reset the input password } else if(key == '#') { if(input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The correct password! Unlocking the door in 20 seconds"); digitalWrite(RELAY_PIN, HIGH); // unlock the door for 20 seconds delay(20000); digitalWrite(RELAY_PIN, LOW); // lock the door } else { Serial.println("The incorrect password! try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Ajout du bip sonore lors de la pression sur le clavier.

Nous pouvons rendre la serrure de porte réactive en ajoutant un buzzer piézoélectrique pour générer un bref bip à chaque fois qu'une touche du clavier est pressée.

Il est assez simple de l'ajouter. Nous laissons donc cette partie à votre créativité. Vous pouvez consulter le tutoriel ESP8266 - Bip du clavier pour plus de conseils.

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

Dans le code mentionné précédemment, l'ESP8266 verrouille la porte après un délai suite au 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 ne pas vous submerger, nous n'avons pas inclus le capteur de porte dans le schéma de câblage et le code. À la place, nous laissons cette partie à votre créativité. Vous pouvez consulter les tutoriels ESP8266 - Capteur de porte et ESP8266 - Capteur de porte contrôle Relais pour plus de conseils.

Gestion et stockage des mots de passe valides dans l'EEPROM

Le code ci-dessus contient des mots de passe valides (UID) qui sont codés en dur dans le code ESP8266. Cela signifie que si vous souhaitez ajouter ou supprimer des mots de passe, 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 mots de passe sans avoir à modifier et télécharger le code à chaque fois. Pour ce faire, les mots de passe peuvent être stockés dans l'EEPROM au lieu d'être codés en dur. Par conséquent, une méthode permettant de gérer facilement les mots de passe depuis l'EEPROM est nécessaire.

Deux méthodes sont disponibles pour gérer les mots de passe dans l'EEPROM :

  • Utilisez des mots de passe principaux
    • En utilisant un mot de passe comme mot de passe principal ADD, de nouveaux mots de passe peuvent être ajoutés au système. Une fois que l'ESP8266 détecte le mot de passe principal ADD, il bascule entre le mode ADD et le mode OPERATION.
    • Pendant le mode ADD, l'ESP8266 ajoute tout nouveau mot de passe qu'il détecte à l'EEPROM.
    • Une approche similaire est utilisée pour le mot de passe principal DELETE et le mode DELETE.
  • Utilisez des commandes ADD/DELETE via Serial/Bluetooth/IR
    • Les commandes sont transmises via Serial/Bluetooth/IR, en utilisant des outils tels que le Serial Monitor, l'application Bluetooth ou le contrôleur IR.
    • Les commandes consistent en une directive (ADD/DELETE) et le mot de passe.

    Afin d'utiliser l'une des deux méthodes ci-dessus, une quantité considérable de code ESP8266 doit être ajoutée. Pour ceux qui sont novices en programmation, cela peut être une tâche difficile. En conséquence, 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 d'enregistrer le statut d'accès (AUTORISÉ/REFUSÉ), ainsi que la date et l'heure. Étant donné que 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 à 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!