ESP8266 - RFID - servomotor

Este tutorial te enseña cómo usar un ESP8266 y un módulo RFID/NFC RC522 para controlar un servomotor. El proceso funciona de la siguiente manera:

Esto se puede usar para asegurar un gabinete, un cajón o una puerta, o para controlar la apertura y el cierre del alimentador de mascotas...

Hardware Requerido

1×ESP8266 NodeMCU
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×RFID/NFC RC522 Kit (reader + tags)
1×RFID Key Fob
1×RFID Card
1×Servomotor
1×Adaptador de Corriente 5V
1×Conector de Alimentación DC
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP8266
1×(Recomendado) Divisor de Alimentación para ESP8266 Tipo-C

Or you can buy the following kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

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

Si no estás familiarizado con el módulo RFID/NFC RC522 y el servomotor (incluyendo el esquema de pines, su funcionamiento y la programación), consulta los siguientes tutoriales:

ESP8266 NodeMCU Arduino RFID servomotor componente

Cómo funciona

  • Algunos UIDs de etiquetas RFID/NFC ya están programados en el código del ESP8266.
  • Cuando un usuario acerca una etiqueta RFID/NFC al lector RFID/NFC, el lector lee el UID de la etiqueta.
  • El ESP8266 recibe entonces el UID desde el lector.
  • Compara el UID leído con los UIDs predefinidos que se establecieron en el código.
  • Si el UID coincide con alguno de los UIDs predefinidos, el ESP8266 controlará el motor servo a 90°.
  • Cuando la etiqueta se vuelva a acercar al lector, el ESP8266 volverá a controlar el motor servo a 0°.
  • Este proceso se repetirá indefinidamente.

Diagrama de Cableado

Diagrama de cableado del servomotor para ESP8266 NodeMCU RFID RC522

This image is created using Fritzing. Click to enlarge image

Para obtener m\u00e1s informaci\u00f3n, consulte Pines del ESP8266 y c\u00f3mo alimentar ESP8266 y otros componentes.

Para simplificar, el diagrama de cableado anterior se utiliza para pruebas o fines de aprendizaje, y para un servomotor de par pequeño. En realidad, recomendamos encarecidamente utilizar una fuente de alimentación externa para el servomotor. El diagrama de cableado a continuación ilustra cómo conectar el servomotor a una fuente de alimentación externa.

Diagrama de cableado de la fuente de alimentación externa para el servomotor ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

※ Nota:

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

Tabla de cableado del módulo RFID/NFC RC522

RFID/NFC RC522 ESP8266
SS → GPIO 5 (SPI CS/SS)
SCK → GPIO 8 (SPI CLK)
MOSI → GPIO 7 (SPI MOSI)
MISO → GPIO 6 (SPI MISO)
IRQ(not connected)
GNDGND
RST → TO_BE_UPDATED
VCC → 3.3V

Código ESP8266 - Una sola etiqueta RFID/NFC

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define SERVO_PIN D1 // The ESP8266 pin 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; // rotate the servo motor to the angle position 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

Para comenzar con ESP8266 en Arduino IDE, siga estos pasos:

  • Consulta el tutorial cómo configurar el entorno para ESP8266 en Arduino IDE si es la primera vez que usas ESP8266.
  • Conecta los componentes tal como se muestran en el diagrama.
  • Conecta la placa ESP8266 a tu computadora usando un cable USB.
  • Abre Arduino IDE en tu computadora.
  • Selecciona la placa ESP8266 correcta, como (p. ej. NodeMCU 1.0 (ESP-12E Module)), y su puerto COM correspondiente.
  • Haz clic en el icono Bibliotecas en la barra izquierda del Arduino IDE.
  • Busca “MFRC522” y localiza la biblioteca de GithubCommunity.
  • Pulsa el botón Instalar para instalar la biblioteca MFRC522.
Biblioteca MFRC522 para ESP8266 NodeMCU

Para descubrir el UID de una etiqueta RFID/NFC, el primer paso es subir código al ESP8266 usando el IDE de Arduino y luego hacer clic en el botón Subir. Después de eso, abra el Monitor Serial y acerque la etiqueta al módulo RFID-RC522. El UID se mostrará 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  

Una vez que tengas tu UID:

  • Reemplaza el UID en la línea 20 del código por el tuyo. Por ejemplo, cambia byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; a byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Sube el código a tu placa ESP8266
  • Acerca una etiqueta RFID/NFC al módulo RFID-RC522
  • El motor servo debe girar a 90°
  • Verifica la salida en el Monitor Serie
COM6
Send
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Toca la etiqueta RFID/NFC en el módulo RFID-RC522 una vez más.
  • El motor servo girará a 0°, y podrás observarlo en el Monitor serie.
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 una etiqueta RFID/NFC al módulo RFID-RC522.
  • Revise el Monitor Serial para la salida.
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 ESP8266 - Múltiples etiquetas RFID/NFC

Podemos habilitar varias etiquetas RFID/NFC para controlar un servomotor. Como ejemplo, el código que se muestra a continuación utiliza dos etiquetas.

/* * Este código de ESP8266 NodeMCU fue desarrollado por es.newbiely.com * Este código de ESP8266 NodeMCU se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp8266/esp8266-rfid-servo-motor */ #include <SPI.h> #include <MFRC522.h> #include <Servo.h> #define SS_PIN D8 // The ESP8266 pin D8 #define RST_PIN D2 // The ESP8266 pin D2 #define SERVO_PIN D1 // The ESP8266 pin 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; // rotate the servo motor to the angle position servo.write(angle); Serial.print("Rotate Servo Motor to "); Serial.print(angle); Serial.println("°"); }

Repite los mismos pasos que antes, y luego acerca cada etiqueta al módulo RFID-RC522. La salida en el Monitor Serial debería verse así:

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 escrito arriba para incluir 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!