In deze handleiding leert u hoe u een RFID/NFC-tag gebruikt om een servo motor aan te sturen met een ESP32. Het werkt als volgt:
Als een geautoriseerde tag wordt aangetikt, draait de ESP32 de servo motor naar 90°
Als diezelfde geautoriseerde tag opnieuw wordt aangetikt, draait de ESP32 de servo motor terug naar 0°
Dit proces wordt oneindig herhaald
Deze toepassing kan gebruikt worden om een kast, lade of deur te vergrendelen/ontgrendelen, of om een voerautomaat voor huisdieren te openen/sluiten...
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.
Aankoopadvies: Als u meerdere servomotoren gebruikt, raden we aan de PCA9685 16 Channel PWM Servo Driver Module te gebruiken om MCU-pinnen te besparen en de bedrading te vereenvoudigen.
Over RFID/NFC RC522 Module en Servo Motor
Als u nog niet bekend bent met de RFID/NFC RC522 Module en Servo Motor (pinout, werking, programmeren...), kunt u meer leren in de volgende tutorials:
De UIDs van bepaalde RFID/NFC-tags zijn vooraf ingesteld in de ESP32 code
De gebruiker tikt een RFID/NFC-tag aan op de RFID/NFC-lezer
De lezer leest de UID van de tag
De ESP32 ontvangt de UID van de lezer
De ESP32 vergelijkt de uitgelezen UID met de vooraf gedefinieerde UIDs
Als de UID overeenkomt met een van de gedefinieerde UIDs, stuurt de ESP32 de servo motor naar 90°
Bij opnieuw aantikken van de tag stuurt de ESP32 de servo motor terug naar 0°
Dit proces wordt oneindig herhaald
Bedradingsschema
Deze afbeelding is gemaakt met Fritzing. Klik om de afbeelding te vergroten.
Als u niet weet hoe u ESP32 en andere componenten van stroom moet voorzien, vindt u instructies in de volgende tutorial: Hoe ESP32 van stroom te voorzien.
※ Notiz:
De volgorde van de pinnen kan per fabrikant verschillen. Gebruik ALTIJD de op het module geprinte labels. Bovenstaande afbeelding toont de pinout van modules van de fabrikant DIYables.
ESP32 Code - Enkel RFID/NFC Tag
/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 } }}
Verbind de ESP32 met uw PC via een micro USB-kabel.
Open Arduino IDE op uw PC.
Selecteer het juiste ESP32 bord (bijv. ESP32 Dev Module) en COM-poort.
Klik op het Libraries icoon in de linker balk van Arduino IDE.
Zoek op “MFRC522” en vind de bibliotheek van GithubCommunity.
Klik op de Installeren knop om de MFRC522 bibliotheek te installeren.
Typ ESP32Servo in het zoekvak en zoek de servo bibliotheek van Kevin Harrington, John K. Bennett.
Klik op de Installeren knop om de servo motor bibliotheek voor ESP32 te installeren.
Omdat de UID meestal niet op de RFID/NFC-tag is afgedrukt, is de eerste stap het achterhalen van de UID van de tag. Dit doet u als volgt:
Kopieer bovenstaande code en open deze in Arduino IDE
Klik op de Upload knop om de code naar de ESP32 te uploaden
Open de Seriële Monitor
Tik een RFID/NFC-tag op de RFID-RC522 module
Lees de UID af in de Seriële Monitor
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
Nadat u de UID hebt:
Werk de UID bij in regel 20 van bovenstaande code. Bijvoorbeeld verander byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; NAAR byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
Upload de code opnieuw naar ESP32
Tik een RFID/NFC-tag op de RFID-RC522 module
U zult zien dat de servo motor naar 90° draait
Bekijk de output in Seriële Monitor
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
Tik nogmaals dezelfde RFID/NFC-tag op de RFID-RC522 module
U zult zien dat de servo motor terug naar 0° draait
Bekijk de output in Seriële Monitor
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
Tik een andere RFID/NFC-tag op de RFID-RC522 module
Bekijk de output in Seriële Monitor
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
ESP32 Code - Meerdere RFID/NFC Tags
We kunnen meerdere RFID/NFC-tags toestaan om de servo motor te bedienen. De onderstaande code gebruikt twee tags als voorbeeld.
/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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("°");}
Voer dezelfde stappen uit als hierboven en tik vervolgens één voor één de tags op de RFID-RC522 module. De output in Seriële Monitor ziet er als volgt uit:
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
U kunt de bovenstaande code uitbreiden voor drie, vier of meer tags.
Video Tutorial
We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.
Bekijk onze video-tutorial voor een visuele begeleiding bij dit project! De video biedt extra inzichten en helpt u het project sneller te begrijpen.
U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!