ESP32 - RFID - Servo Motor

Neste tutorial, vamos aprender como usar uma tag RFID/NFC para controlar um servo motor usando o ESP32. Funciona assim:

Isso pode ser aplicado para trancar/destrancar um armário, uma gaveta, uma porta, ou abrir/fechar um alimentador de pets...

Sobre o Módulo RFID/NFC RC522 e o Servo Motor

Se você ainda não conhece o Módulo RFID/NFC RC522 e o Servo Motor (pinagem, como funcionam, como programar...), aprenda sobre eles nos tutoriais a seguir:

Como Funciona

  • Os UIDs de algumas tags RFID/NFC são predefinidos no código do ESP32
  • O usuário aproxima uma tag RFID/NFC do leitor RFID/NFC
  • O leitor lê o UID da tag.
  • O ESP32 obtém o UID do leitor
  • O ESP32 compara o UID lido com os UIDs predefinidos
  • Se o UID corresponder a um dos UIDs predefinidos, o ESP32 gira o servo motor para 90°.
  • Se a tag for aproximada novamente, o ESP32 gira o servo motor de volta para 0°
  • Esse processo se repete infinitamente.

Diagrama de Ligação

Diagrama de ligação do ESP32 com RFID RC522 e servo motor

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

※ Nota:

A ordem dos pinos pode variar de acordo com o fabricante. SEMPRE use os rótulos impressos no módulo. A imagem acima mostra a pinagem dos módulos do fabricante DIYables.

Código ESP32 - Uma Única Tag RFID/NFC

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 } } }

Passos Rápidos

  • Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para o ESP32 na Arduino IDE.
  • Faça a ligação como na imagem acima.
  • Conecte a placa ESP32 ao seu PC por meio de um cabo USB Type-C
  • Abra a Arduino IDE no seu PC.
  • Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
  • Clique no ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise “MFRC522” e encontre a biblioteca da GithubCommunity
  • Clique no botão Install para instalar a biblioteca MFRC522.
Biblioteca MFRC522 para ESP32
  • Digite ESP32Servo na caixa de pesquisa e procure a biblioteca de servo de Kevin Harrington,John K. Bennett.
  • Clique no botão Install para instalar a biblioteca de servo motor para o ESP32.
Biblioteca de servo motor para ESP32

Como o UID normalmente não vem impresso na tag RFID/NFC, o primeiro passo que precisamos fazer é descobrir o UID da tag. Isso pode ser feito assim:

  • Copie o código acima e abra na Arduino IDE
  • Clique no botão Upload na Arduino IDE para fazer o upload do código para o ESP32
  • Abra o Serial Monitor
  • Aproxime uma tag RFID/NFC do módulo RFID-RC522
  • Obtenha o UID no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.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

Depois de obter o UID:

  • Atualize o UID na linha 20 do código acima. Por exemplo, mude byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; PARA byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Faça o upload do código para o ESP32 novamente
  • Aproxime uma tag RFID/NFC do módulo RFID-RC522
  • Você verá o servo motor girar para 90°
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.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
  • Aproxime a mesma tag RFID/NFC do módulo RFID-RC522 novamente
  • Você verá o servo motor girar para 0°
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.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
  • Aproxime outra tag RFID/NFC do módulo RFID-RC522
  • Veja a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.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

Código ESP32 - Várias Tags RFID/NFC

Podemos permitir que várias tags RFID/NFC controlem o servo motor. O código abaixo usa duas tags como exemplo.

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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("°"); }

Faça os mesmos passos acima e depois aproxime as tags, uma por uma, do módulo RFID-RC522. O resultado no Serial Monitor fica assim:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.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

Você pode ampliar o código acima para três, quatro ou mais tags.

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!