Neste tutorial, vamos aprender como fazer um sistema de fechadura de porta baseado em RFID usando o ESP32, o leitor RFID RC522 e uma fechadura solenoide.
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.
Sobre o Módulo RFID/NFC RC522 e a Fechadura Solenoide
Ainda não conhece o Módulo RFID/NFC RC522 e a fechadura solenoide, incluindo a pinagem, o funcionamento e a programação deles? Explore os tutoriais completos sobre esses temas abaixo:
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
/* * 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-solenoid-lock*/#include <SPI.h>#include <MFRC522.h>#define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define RELAY_PIN 32 // ESP32 pin GPIO32 controls the solenoid lock via therelayMFRC522 rfid(SS_PIN, RST_PIN);byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF};voidsetup() {Serial.begin(9600);SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output.digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => lockedSerial.println("Tap RFID Tag on reader");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::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");digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked }else {Serial.print("Unauthorized Tag:");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 } }}
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.
Como o UID normalmente não vem impresso na tag RFID, 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 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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Unauthorized Tag: 51 3D C1 AC
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Depois de obter o UID:
Atualize o UID na linha 18 do código acima. Por exemplo, mude byte authorizedUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; PARA byte authorizedUID[4] = {0x51, 0x3D, 0xC1, 0xAC};
Faça o upload do código para o ESP32 novamente
Aproxime uma tag RFID 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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Aproxime outra tag RFID 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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag
Unauthorized Tag: 5D 11 1A D3
Ln 11, Col 1
ESP32 Dev Module on COM15
2
Código ESP32 - Várias Tags RFID
Podemos permitir que várias tags RFID/NFC ativem a fechadura solenoide. 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-solenoid-lock*/#include <SPI.h>#include <MFRC522.h>#define SS_PIN 5 // ESP32 pin GPIO5 #define RST_PIN 27 // ESP32 pin GPIO27 #define RELAY_PIN 32 // ESP32 pin GPIO32 controls the solenoid lock via therelayMFRC522 rfid(SS_PIN, RST_PIN);byte authorizedUID1[4] = {0x51, 0x3D, 0xC1, 0xAC};byte authorizedUID2[4] = {0x30, 0x01, 0x8B, 0x15}; voidsetup() {Serial.begin(9600);SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output.digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => lockedSerial.println("Tap RFID Tag on reader");}voidloop() {if (rfid.PICC_IsNewCardPresent()) { // new tag is availableif (rfid.PICC_ReadCardSerial()) { // NUID has been readedMFRC522::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");digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked }elseif (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");digitalWrite(RELAY_PIN, LOW); // deactivate the solenoid lock => unlockeddelay(2000);digitalWrite(RELAY_PIN, HIGH); // activate the solenoid lock => locked }else {Serial.print("Unauthorized Tag:");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 } }}
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
···
8Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
Tap RFID Tag on reader
Authorized Tag 2
Authorized Tag 1
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!