ESP32 - RFID - servomotor

En este tutorial, vamos a aprender a usar una etiqueta RFID/NFC para controlar un servomotor con ESP32. Así es como funciona:

Esto se puede usar para bloquear/desbloquear un armario, un cajón, una puerta, o abrir/cerrar el alimentador de mascotas...

Acerca del módulo RFID/NFC RC522 y del servomotor

Si no conoces el módulo RFID/NFC RC522 y el motor servo (diagrama de pines, cómo funciona, cómo programarlos...), apréndelos en los siguientes tutoriales:

Cómo funciona

  • Los identificadores únicos (UID) de algunas etiquetas RFID/NFC están predefinidos en el código del ESP32.
  • El usuario acerca una etiqueta RFID/NFC al lector RFID/NFC.
  • El lector lee el UID de la etiqueta.
  • El ESP32 obtiene el UID del lector.
  • El ESP32 compara el UID leído con los UIDs predefinidos.
  • Si el UID coincide con alguno de los UID predefinidos, el ESP32 controla el servomotor para posicionarlo a 90°.
  • Si la etiqueta se toca de nuevo, el ESP32 controla el servomotor de vuelta a 0°.
  • Este proceso se repite indefinidamente.

Diagrama de Cableado

Diagrama de cableado de ESP32, RFID RC522 y servomotor.

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

※ Nota:

La disposición de pines puede variar según el fabricante. SIEMPRE utilice las etiquetas impresas en el módulo. La imagen de arriba muestra el esquema de pines de los módulos del fabricante DIYables.

Código ESP32 - Etiqueta RFID/NFC única

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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 } } }

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Realiza el cableado tal como en la imagen anterior.
  • Conecta la placa ESP32 a tu PC mediante un cable micro USB.
  • Abre Arduino IDE en tu PC.
  • Selecciona la placa ESP32 adecuada (p. ej. ESP32 Dev Module) y el puerto COM.
  • Haz clic en el icono Libraries en la barra izquierda del IDE de Arduino.
  • Busca “MFRC522”, luego encuentra la biblioteca en GithubCommunity
  • Haz clic en el botón Install para instalar la biblioteca MFRC522.
Biblioteca MFRC522 para ESP32
  • Escribe ESP32Servo en la caja de búsqueda, luego busca la biblioteca de servomotores de Kevin Harrington,John K. Bennett.
  • Haz clic en el botón Instalar para instalar la biblioteca de servomotores para ESP32.
Biblioteca de servomotores para ESP32

Como el UID normalmente no está impreso en la etiqueta RFID/NFC, el primer paso que debemos dar es averiguar el UID de la etiqueta. Esto se puede hacer mediante:

  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al ESP32
  • Abre el Monitor Serial
  • Acerca una etiqueta RFID/NFC al módulo RFID-RC522
  • Obtén el UID en el Monitor Serial
COM6
Send
Tap RFID/NFC tag on reader Unauthorized Tag with UID: 3A C9 6A CB
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Después de tener UID:

  • Actualiza la UID en la línea 20 del código anterior. Por ejemplo, cambia byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; a byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Carga el código en el ESP32 de nuevo
  • Acerca una etiqueta RFID/NFC al módulo RFID-RC522
  • Verás que el servomotor gira a 90°
  • Verás la salida en el Monitor Serial
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Vuelve a acercar la misma etiqueta RFID/NFC al módulo RFID-RC522.
  • Verás que el motor del servo gira a 0°.
  • Observa la salida en el Monitor Serial.
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  
  • Toque otra etiqueta RFID/NFC en el módulo RFID-RC522
  • Ver la salida en el Monitor Serial
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  

Código ESP32 - Múltiples Etiquetas RFID/NFC

Podemos permitir que múltiples etiquetas RFID/NFC controlen el servomotor. El código siguiente utiliza dos etiquetas como ejemplo.

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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("°"); }

Realiza los pasos similares a los anteriores y luego acerca cada etiqueta por separado al módulo RFID-RC522. El resultado en el Monitor Serial se muestra a continuación:

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  

Puedes ampliar el código anterior para tres, cuatro o más etiquetas.

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!