ESP32 - RFID - Servo Motor

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:

Deze toepassing kan gebruikt worden om een kast, lade of deur te vergrendelen/ontgrendelen, of om een voerautomaat voor huisdieren te openen/sluiten...

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:

Hoe Het Werkt

  • 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

ESP32 RFID RC522 servo motor bedrading schema

This image is created using Fritzing. Click to enlarge image

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 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; // 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 } } }

Snelle Stappen

  • Gebruikt u voor het eerst een ESP32, zie dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Sluit alles aan volgens het bovenstaande schema.
  • 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.
ESP32 MFRC522 bibliotheek
  • 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.
ESP32 servo motor bibliotheek

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
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

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
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • 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
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  
  • Tik een andere RFID/NFC-tag op de RFID-RC522 module
  • Bekijk de output in Seriële Monitor
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  

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 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; // 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:

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  

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.

※ ONZE BERICHTEN

  • 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!