ESP8266 - RFID - Moteur Servo

Ce tutoriel vous apprend à utiliser un ESP8266 et un module RFID NFC RC522 pour contrôler un moteur servo. Le processus fonctionne comme suit :

Cela peut être utilisé pour sécuriser un placard, un tiroir, une porte, ou contrôler l'ouverture et la fermeture du distributeur de nourriture pour animaux...

Préparation du matériel

1×ESP8266 NodeMCU
1×Micro USB Cable
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×Servo Motor
1×5V 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 moteur servo

Si vous n'êtes pas familier avec le module RFID/NFC RC522 et le moteur servo (y compris le brochage, le fonctionnement et la programmation), consultez les tutoriels suivants :

Composant servo moteur RFID Arduino ESP8266 NodeMCU

Comment ça fonctionne

  • Certains UID des étiquettes RFID/NFC sont déjà programmés dans le code de l'ESP8266.
  • Lorsqu'un utilisateur appose une étiquette RFID/NFC sur le lecteur RFID/NFC, le lecteur lit l'UID de l'étiquette.
  • L'ESP8266 reçoit ensuite l'UID du lecteur.
  • Il compare l'UID lu avec les UID prédéfinis qui étaient configurés dans le code.
  • Si l'UID correspond à l'un des UID prédéfinis, l'ESP8266 commandera le servo-moteur à 90°.
  • Lorsque l'étiquette est à nouveau apposée, l'ESP8266 commandera le retour du servo-moteur à 0°.
  • Ce processus se répétera indéfiniment.

Diagramme de câblage

Schéma de câblage du moteur servo 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.

Par souci de simplicité, le schéma de câblage ci-dessus est utilisé pour des tests ou des fins d'apprentissage, et pour un moteur servo de petit couple. En réalité, nous recommandons fortement l'utilisation d'une alimentation externe pour le moteur servo. Le schéma de câblage ci-dessous illustre comment connecter le moteur servo à une source d'alimentation externe.

Schéma de câblage d'alimentation externe du moteur servo ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

※ NOTE THAT:

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

Tableau de câblage du module RFID/NFC RC522

RFID/NFC RC522 ESP8266
SS → GPIO 5 (SPI CS/SS)
SCK → GPIO 8 (SPI CLK)
MOSI → GPIO 7 (SPI MOSI)
MISO → GPIO 6 (SPI MISO)
IRQ(not connected)
GNDGND
RST → TO_BE_UPDATED
VCC → 3.3V

Code ESP8266 - Balise RFID/NFC 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-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define SERVO_PIN D1 // The ESP8266 pin connects to servo motor MFRC522 rfid(SS_PIN, RST_PIN); Servo servo; byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; int angle = 0; // The current angle of servo motor void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 servo.attach(SERVO_PIN); servo.write(angle); // rotate servo motor to 0° 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] == authorizedUID[0] && rfid.uid.uidByte[1] == authorizedUID[1] && rfid.uid.uidByte[2] == authorizedUID[2] && rfid.uid.uidByte[3] == authorizedUID[3] ) { Serial.println("Authorized Tag"); // change angle of servo motor if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // rotate the servo motor to the angle position servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); } else { Serial.print("Unauthorized Tag with 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 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 d'un ESP8266.
  • Câblez les composants comme indiqué dans le schéma.
  • Connectez la carte ESP8266 à votre ordinateur via un câble USB.
  • Ouvrez Arduino IDE sur votre ordinateur.
  • Sélectionnez la bonne carte ESP8266, comme (par exemple NodeMCU 1.0 (Module ESP-12E)), et son port COM respectif.
  • Cliquez sur l'icône Libraries dans la barre latérale gauche de l'Arduino IDE.
  • Recherchez "MFRC522" et trouvez la bibliothèque par GithubCommunity.
  • Appuyez sur le bouton Install pour installer la bibliothèque MFRC522.
Bibliothèque ESP8266 NodeMCU MFRC522

Afin de découvrir l'UID d'une étiquette RFID/NFC, la première étape est de télécharger le code sur ESP8266 en utilisant l'IDE Arduino puis de cliquer sur le bouton Upload. Ensuite, ouvrez le moniteur série et tapez l'étiquette sur le module RFID-RC522. L'UID sera affiché sur le moniteur série.

COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Une fois que vous avez votre identifiant unique :

  • Remplacez l'UID à la ligne 20 du code par le vôtre. Par exemple, changez byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; en byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Téléversez le code sur votre carte ESP8266
  • Apposez une étiquette RFID/NFC sur le module RFID-RC522
  • Le moteur servo doit tourner à 90°
  • Vérifiez la sortie sur le moniteur série
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Tapez une fois de plus sur l'étiquette RFID/NFC du module RFID-RC522.
  • Le moteur servo va tourner à 0°, et vous pouvez observer cela sur le moniteur série.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Appuyez sur une étiquette RFID/NFC contre le module RFID-RC522.
  • Vérifiez le moniteur série pour voir la sortie.
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90° Authorized Tag Rotate Servo Motor to 0° Unauthorized Tag with UID: BD 1E 1D 00
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Code ESP8266 - Plusieurs étiquettes RFID/NFC

Nous pouvons activer plusieurs étiquettes RFID/NFC pour contrôler un moteur servo. À titre d'exemple, le code ci-dessous utilise deux étiquettes.

/* * 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-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define SERVO_PIN D1 // The ESP8266 pin connects to servo motor MFRC522 rfid(SS_PIN, RST_PIN); Servo servo; byte authorizedUID1[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; int angle = 0; // The current angle of servo motor void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 servo.attach(SERVO_PIN); servo.write(angle); // rotate servo motor to 0° 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] == authorizedUID1[0] && rfid.uid.uidByte[1] == authorizedUID1[1] && rfid.uid.uidByte[2] == authorizedUID1[2] && rfid.uid.uidByte[3] == authorizedUID1[3] ) { Serial.println("Authorized Tag 1"); changeServo(); } else if (rfid.uid.uidByte[0] == authorizedUID2[0] && rfid.uid.uidByte[1] == authorizedUID2[1] && rfid.uid.uidByte[2] == authorizedUID2[2] && rfid.uid.uidByte[3] == authorizedUID2[3] ) { Serial.println("Authorized Tag 2"); changeServo(); } else { Serial.print("Unauthorized Tag with 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 } } } void changeServo() { // change angle of servo motor if (angle == 0) angle = 90; else //if(angle == 90) angle = 0; // rotate the servo motor to the angle position servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

Répétez les mêmes étapes que précédemment, puis appuyez sur chaque étiquette vers le module RFID-RC522. Le résultat sur le moniteur série devrait apparaître ainsi :

COM6
Send
Tap RFID/NFC tag on reader Authorized Tag 2 Rotate Servo Motor to 90° Authorized Tag 1 Rotate Servo Motor to 0°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Vous pouvez étendre le code écrit ci-dessus pour inclure trois, quatre ou plusieurs 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!