ESP8266 - RFID - Servo Motor

Este tutorial ensina como usar um ESP8266 e um módulo RFID NFC RC522 para controlar um servo motor. O processo funciona assim:

Isso pode ser usado para proteger um armário, uma gaveta, uma porta ou para controlar a abertura e o fechamento de um alimentador de pets...

Hardware Necessário

1×ESP8266 NodeMCU ESP-12F
1×Alternatively, ESP8266 D1 Mini NodeMCU ESP-12F
1×Alternatively, ESP8266 NodeMCU ESP-12E (Uno-form)
1×Micro USB Cable
1×Alternatively, ESP8266 NodeMCU ESP-12F (SMD-form)
1×Cabo USB Tipo-A para Tipo-C (para PC com USB-A)
1×Cabo USB Tipo-C para Tipo-C (para PC com USB-C)
1×RFID/NFC RC522 Kit (reader + tags)
1×Servo Motor
1×Fonte de Alimentação 5V
1×Conector de Alimentação DC
1×Fios Jumper
1×(Recomendado) Placa de Expansão com Bornes de Parafuso para ESP8266

Or you can buy the following kits:

1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Buy Note: For controlling multiple servo motors, use the PCA9685 16 Channel PWM Servo Driver Module to save MCU pins and simplify wiring.

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

Se você não está familiarizado com o Módulo RFID/NFC RC522 e o Servo Motor (incluindo pinagem, funcionamento e programação), confira os tutoriais a seguir:

componentes do arduino rfid servo motor com ESP8266 NodeMCU

Como Funciona

  • Alguns UIDs de tags RFID/NFC já estão programados no código do ESP8266.
  • Quando um usuário aproxima uma tag RFID/NFC do leitor RFID/NFC, o leitor lê o UID da tag.
  • O ESP8266 então recebe o UID do leitor.
  • Ele compara o UID lido com os UIDs predefinidos no código.
  • Se o UID corresponder a um dos UIDs predefinidos, o ESP8266 controlará o servo motor para 90°.
  • Quando a tag for aproximada novamente, o ESP8266 controlará o servo motor de volta para 0°.
  • Este processo se repetirá indefinidamente.

Diagrama de Ligação

diagrama de ligação do ESP8266 NodeMCU com RFID RC522 e servo motor

This image is created using Fritzing. Click to enlarge image

Para mais informações, veja Pinagem do ESP8266 e como alimentar o ESP8266 e outros componentes.

Para simplificar, o diagrama de ligação acima é usado para testes ou aprendizado, e para um servo motor de baixo torque. Na prática, recomendamos fortemente usar uma fonte de alimentação externa para o servo motor. O diagrama de ligação abaixo mostra como conectar o servo motor a uma fonte de alimentação externa.

diagrama de ligação do servo motor com fonte de alimentação externa e ESP8266 NodeMCU

This image is created using Fritzing. Click to enlarge image

※ Nota:

A disposição dos pinos pode variar dependendo do fabricante. SEMPRE use os rótulos impressos no módulo. A imagem acima mostra a pinagem de módulos do fabricante DIYables.

Tabela de ligação do 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(não conectado)
GND → GND
RST → TO_BE_UPDATED
VCC → 3.3V

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

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

Passos Rápidos

Para começar com o ESP8266 na Arduino IDE, siga estes passos:

  • Confira o tutorial como configurar o ambiente para ESP8266 na Arduino IDE se esta for a sua primeira vez usando o ESP8266.
  • Ligue os componentes como mostrado no diagrama.
  • Conecte a placa ESP8266 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Escolha a placa ESP8266 correta, como (por exemplo, NodeMCU 1.0 (ESP-12E Module)), e a respectiva porta COM.
  • Clique no ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise por “MFRC522” e localize a biblioteca de GithubCommunity.
  • Pressione o botão Install para instalar a biblioteca MFRC522.
biblioteca MFRC522 para ESP8266 NodeMCU

Para descobrir o UID de uma tag RFID/NFC, o primeiro passo é fazer upload do código para o ESP8266 usando a Arduino IDE e então clicar no botão Upload. Depois, abra o Serial Monitor e aproxime a tag do módulo RFID-RC522. O UID será exibido no Serial Monitor.

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Quando você tiver o seu UID:

  • Substitua o UID na linha 20 do código pelo seu. Por exemplo, mude byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; para byte authorizedUID[4] = {0x3A, 0xC9, 0x6A, 0xCB};
  • Faça upload do código para a sua placa ESP8266
  • Aproxime uma tag RFID/NFC do módulo RFID-RC522
  • O servo motor deve girar para 90°
  • Verifique a saída no Serial Monitor
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E Module)' on 'COM15')
New Line
9600 baud
Tap RFID/NFC tag on reader Authorized Tag Rotate Servo Motor to 90°
Ln 11, Col 1
Nodemcu 1.0 (ESP-12E Module) on COM15
2
  • Aproxime a tag RFID/NFC do módulo RFID-RC522 mais uma vez.
  • O servo motor girará para 0°, e você pode observar isso no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2
  • Aproxime uma tag RFID/NFC do módulo RFID-RC522.
  • Verifique a saída no Serial Monitor.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2

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

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

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

Repita os mesmos passos de antes e depois aproxime cada tag do módulo RFID-RC522. A saída no Serial Monitor deve aparecer assim:

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Nodemcu 1.0 (ESP-12E Module)
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Nodemcu 1.0 (ESP-12E 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
Nodemcu 1.0 (ESP-12E Module) on COM15
2

Você pode expandir o código escrito acima para incluir 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!