Dans ce tutoriel, nous allons apprendre à utiliser une étiquette RFID/NFC pour contrôler un moteur servo à l'aide d'un ESP32. Voici comment cela fonctionne :
Si un tag autorisé est touché, l'ESP32 fait tourner le moteur servo à 90°.
Si un tag autorisé est touché à nouveau, l'ESP32 fait tourner le moteur servo à 0°.
Le processus ci-dessus est répété à l'infini.
Cela peut être utilisé pour verrouiller/déverrouiller un placard, un tiroir, une porte, ou pour ouvrir/fermer le distributeur de nourriture pour animaux...
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.
Note d'achat: Si vous utilisez plusieurs servomoteurs, nous recommandons d'utiliser le PCA9685 16 Channel PWM Servo Driver Module pour économiser les broches du MCU et faciliter le câblage.
À propos du module RFID/NFC RC522 et du moteur servo
Si vous ne connaissez pas le module RFID/NFC RC522 et le moteur servo (brochage, fonctionnement, programmation...), renseignez-vous à leur sujet dans les tutoriels suivants :
Les UID de certains tags RFID/NFC sont prédéfinis dans le code ESP32.
L'utilisateur tape un tag RFID/NFC sur le lecteur RFID/NFC.
Le lecteur lit l'UID du tag.
L'ESP32 récupère l'UID du lecteur.
L'ESP32 compare l'UID lu avec les UID prédéfinis.
Si l'UID correspond à l'un des UID prédéfinis, l'ESP32 contrôle le servo moteur à 90°.
Si le tag est tapé à nouveau, l'ESP32 ramène le servo moteur à 0°.
Ce processus est répété à l'infini.
Diagramme de câblage
Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, consultez les instructions dans le tutoriel suivant : Comment alimenter l'ESP32..
※ Note:
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 de brochage des modules du fabricant DIYables.
Code ESP32 - Tag RFID/NFC 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-servo-motor*/#include <SPI.h>#include <MFRC522.h>#include <ESP32Servo.h>#define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define SERVO_PIN 32 // ESP32 pin GPIO32 connects to servo motorMFRC522 rfid(SS_PIN, RST_PIN);Servo servo;byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};int angle = 0; // the current angle of servo motorvoidsetup() {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");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::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 motorif (angle == 0) angle = 90;else//if(angle == 90) angle = 0;// control servo motor arccoding to the angle 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 } }}
Connectez la carte ESP32 à votre PC via un câble micro USB.
Ouvrez Arduino IDE sur votre PC.
Sélectionnez la bonne carte ESP32 (par exemple, Module de développement ESP32) et le port COM.
Cliquez sur l'icône Libraries dans la barre latérale gauche de l'Arduino IDE.
Recherchez "MFRC522", puis trouvez la bibliothèque par GithubCommunity.
Cliquez sur le bouton Install pour installer la bibliothèque MFRC522.
Tapez ESP32Servo dans la zone de recherche, puis recherchez la bibliothèque servo de Kevin Harrington,John K. Bennett.
Cliquez sur le bouton Install pour installer la bibliothèque du moteur servo pour ESP32.
Comme l'UID n'est généralement pas imprimé sur l'étiquette RFID/NFC, la première étape que nous devons faire est de découvrir l'UID de l'étiquette. Cela peut être fait en :
Copiez le code ci-dessus et ouvrez-le avec Arduino IDE
Cliquez sur le bouton Upload dans Arduino IDE pour téléverser le code vers ESP32
Ouvrez le moniteur série
Tapez une étiquette RFID/NFC sur le module RFID-RC522
Obtenez l'UID sur le moniteur série
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader
Unauthorized Tag with UID: 3A C9 6A CB
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Après avoir UID :
Mettez à jour l'UID à la ligne 20 du code ci-dessus. Par exemple, changez byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; en byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
Téléversez de nouveau le code sur l'ESP32
Appliquez une étiquette RFID/NFC sur le module RFID-RC522
Vous verrez le servo-moteur tourner à 90°
Voyez la sortie sur le moniteur série
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader
Authorized Tag
Rotate Servo Motor to 90°
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Appuyez à nouveau sur le même tag RFID/NFC sur le module RFID-RC522
Vous verrez le servo-moteur tourner à 0°
Voir la sortie sur le moniteur série
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader
Authorized Tag
Rotate Servo Motor to 90°
Authorized Tag
Rotate Servo Motor to 0°
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Appuyez sur un autre tag RFID/NFC sur le module RFID-RC522
Voir le résultat sur le moniteur série
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Code ESP32 - Plusieurs tags RFID/NFC
Nous pouvons permettre à plusieurs étiquettes RFID/NFC de contrôler un moteur servo. Le code ci-dessous utilise deux étiquettes comme exemple.
/* * 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-servo-motor*/#include <SPI.h>#include <MFRC522.h>#include <ESP32Servo.h>#define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define SERVO_PIN 32 // ESP32 pin GPIO32 connects to servo motorMFRC522 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 motorvoidsetup() {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");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::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(); } elseif (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 motorif (angle == 0) angle = 90;else//if(angle == 90) angle = 0;// control servo motor arccoding to the angle servo.write(angle);Serial.print("Rotate Servo Motor to ");Serial.print(angle);Serial.println("°");}
Effectuez les mêmes étapes que celles mentionnées ci-dessus, puis appuyez successivement sur chaque étiquette du module RFID-RC522. Le résultat sur le moniteur série apparaît comme ci-dessous :
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader
Authorized Tag 2
Rotate Servo Motor to 90°
Authorized Tag 1
Rotate Servo Motor to 0°
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Vous pouvez étendre le code ci-dessus pour trois, quatre ou plus de balises.
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !