ESP32 - RFID - Servomotor

In diesem Tutorial lernen wir, wie man einen RFID/NFC-Tag verwendet, um einen Servomotor mit dem ESP32 zu steuern. Es funktioniert wie folgt:

Dies kann angewendet werden, um Schrank, Schublade und Tür zu verriegeln bzw. zu entriegeln oder den Futterautomaten zu öffnen/zu schließen.

Erforderliche Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Servo-Motor
1×5V Netzteil
1×DC-Stromanschluss
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Über RFID/NFC RC522-Modul und Servomotor

Wenn Sie nichts über das RFID/NFC RC522-Modul und den Servo-Motor wissen (Pinbelegung, wie es funktioniert, wie man programmiert ...), lernen Sie in den folgenden Tutorials darüber:

So funktioniert es

  • Die UIDs einiger RFID-/NFC-Tags sind im ESP32-Code voreingestellt.
  • Der Benutzer tippt ein RFID-/NFC-Tag auf den RFID-/NFC-Leser.
  • Der Leser liest die UID des Tags aus.
  • Der ESP32 erhält die UID vom Leser.
  • Der ESP32 vergleicht die gelesene UID mit den vordefinierten UIDs.
  • Wenn die UID mit einer der vordefinierten UIDs übereinstimmt, steuert der ESP32 den Servomotor auf 90°.
  • Wenn der Tag erneut berührt wird, steuert der ESP32 den Servomotor wieder auf 0°.
  • Dieser Vorgang wird unendlich oft wiederholt.

Verdrahtungsdiagramm

ESP32 RFID RC522 Servomotor-Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.

※ Notiz:

Die Reihenfolge der Pins kann je nach Hersteller variieren. Verwenden Sie IMMER die auf dem Modul aufgedruckten Beschriftungen. Das obige Bild zeigt die Pinbelegung der Module des Herstellers DIYables.

ESP32-Code – Einzelner RFID-/NFC-Tag

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.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 } } }

Schnelle Schritte

  • Falls dies das erste Mal ist, dass Sie ESP32 verwenden, sehen Sie sich an, wie man die Umgebung für ESP32 in der Arduino IDE einrichtet.
  • Verbinden Sie die Verkabelung gemäß dem obigen Bild.
  • Verbinden Sie das ESP32-Board über ein Micro-USB-Kabel mit Ihrem PC
  • Öffnen Sie die Arduino IDE auf Ihrem PC.
  • Wählen Sie das richtige ESP32-Board (z. B. ESP32 Dev Module) und den COM-Port aus.
  • Klicken Sie auf das Bibliotheken-Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie “MFRC522”, und finden Sie dann die Bibliothek von GithubCommunity
  • Klicken Sie auf die Installieren-Schaltfläche, um die MFRC522-Bibliothek zu installieren.
ESP32 MFRC522-Bibliothek
  • Geben Sie ServoESP32 in das Suchfeld ein, suchen Sie dann nach der Servo-Bibliothek von Jaroslav Paral. Bitte beachten Sie, dass sowohl Version 1.1.1 als auch 1.1.0 von Fehlern betroffen sind. Wählen Sie bitte eine andere Version.
  • Klicken Sie auf die Install-Schaltfläche, um die Servo-Bibliothek für ESP32 zu installieren.
ESP32-Servomotor-Bibliothek

Da die UID normalerweise nicht auf dem RFID-/NFC-Tag aufgedruckt ist, besteht der erste Schritt darin, die UID des Tags herauszufinden. Dies kann auf folgende Weise erfolgen:

  • Kopieren Sie den obigen Code und öffnen Sie ihn mit der Arduino-IDE.
  • Klicken Sie auf die Hochladen-Schaltfläche in der Arduino-IDE, um den Code auf den ESP32 hochzuladen.
  • Öffnen Sie den Seriellen Monitor.
  • Berühren Sie ein RFID/NFC-Tag am RFID-RC522-Modul.
  • Zeigen Sie die UID im Seriellen Monitor an.
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Nach Vorliegen der UID:

  • Aktualisiere die UID in der Zeile 20 des obigen Codes. Zum Beispiel ändere byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; auf byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Lade den Code erneut auf den ESP32 hoch
  • Tippe ein RFID-/NFC-Tag auf das RFID-RC522-Modul
  • Du wirst sehen, dass sich der Servomotor auf 90° dreht
  • Sieh dir die Ausgabe im Serial Monitor an
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Berühren Sie denselben RFID/NFC-Tag erneut am RFID-RC522-Modul.
  • Sie werden sehen, wie sich der Servomotor auf 0° dreht.
  • Siehe Ausgabe im Serial 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  
  • Berühren Sie ein weiteres RFID/NFC-Tag am RFID-RC522-Modul.
  • Sehen Sie die Ausgabe im Serial 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 - Mehrere RFID- und NFC-Tags

Wir können mehreren RFID-/NFC-Tags die Steuerung eines Servomotors ermöglichen. Der untenstehende Code verwendet zwei Tags als Beispiel.

/* * Dieser ESP32 Code wurde von newbiely.de entwickelt * Dieser ESP32 Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32/esp32-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.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("°"); }

Führen Sie ähnliche Schritte wie oben aus, und berühren Sie dann nacheinander jeden RFID-Tag am RFID-RC522-Modul. Das Ergebnis im Serial Monitor sieht wie folgt aus:

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  

Sie können den obigen Code auf drei, vier oder mehr Tags erweitern.

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!