ESP32 - Sistema de Fechadura de Porta com RFID/NFC

Este tutorial ensina como usar o ESP32 para fazer um sistema de fechadura de porta com RFID/NFC.

※ Nota:

Você pode combinar esta fechadura com o sistema de fechadura de porta usando teclado.

Sobre o Módulo RFID/NFC RC522 e a Fechadura Eletromagnética

Temos tutoriais específicos sobre o módulo RFID/NFC RC522 e a fechadura eletromagnética. Cada tutorial contém informações detalhadas e instruções passo a passo sobre a pinagem do hardware, o princípio de funcionamento, a ligação com o ESP32, o código ESP32... Saiba mais sobre eles nos links a seguir:

Componentes do Sistema

Um sistema de fechadura de porta inclui duas partes principais:

  • Fechadura da porta: ESP32, leitor RFID/NFC, fechadura solenoide ou fechadura eletromagnética
  • Chave da porta: tags RFID/NFC
Componentes ESP32 da fechadura de porta com RFID

Como a Fechadura de Porta com RFID/NFC Funciona

  • Os UIDs das tags autorizadas (chaves) são predefinidos no código do ESP32
  • Quando uma tag RFID/NFC é aproximada do leitor RFID/NFC
  • O ESP32 lê o UID do leitor
  • O ESP32 compara o UID com os UIDs predefinidos
  • Se um UID corresponder, o ESP32 desativa a fechadura eletromagnética para destrancar a porta.

Diagrama de Ligação

Diagrama de ligação do sistema de fechadura de porta com ESP32 e RFID RC522

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 Chave

/* * 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-nfc-door-lock-system */ #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 connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte keyTagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap an RFID/NFC tag on the RFID-RC522 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] == keyTagUID[0] && rfid.uid.uidByte[1] == keyTagUID[1] && rfid.uid.uidByte[2] == keyTagUID[2] && rfid.uid.uidByte[3] == keyTagUID[3] ) { Serial.println("Access is granted"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied, 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.
  • Clique no ícone Libraries na barra esquerda da Arduino IDE.
  • Digite “MFRC522” na caixa de pesquisa e procure a biblioteca da GithubCommunity
  • Instale a biblioteca clicando no botão Install.
Biblioteca MFRC522 para ESP32
  • Descubra o UID da tag seguindo os passos abaixo:
    • Copie o código acima e cole na Arduino IDE.
    • Compile e faça o upload do código para a placa ESP32 clicando no botão Upload na Arduino IDE
    • Abra o Serial Monitor na Arduino IDE
    Como abrir o Serial Monitor na Arduino IDE
    • Aproxime do leitor RFID-RC522 a tag RFID/NFC que você quer autorizar
    • Anote o UID impresso 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 an RFID/NFC tag on the RFID-RC522 reader Access denied, UID: 2B B8 59 B1
    Ln 11, Col 1
    ESP32 Dev Module on COM15
    2
    • Atualize o UID na linha 18 do código acima. Por exemplo, mude byte keytagUID[4] = {0xFF, 0xFF, 0xFF, 0xFF}; PARA byte keytagUID[4] = {0x2B, 0xB8, 0x59, 0xB1};
    • Faça o upload do código para o ESP32 novamente
    • Aproxime uma tag RFID/NFC do módulo RFID-RC522
    • Veja o resultado 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 an RFID/NFC tag on the RFID-RC522 reader Access is granted
    Ln 11, Col 1
    ESP32 Dev Module on COM15
    2
    • Verifique a fechadura eletromagnética, ela deve estar desativada
    • Aproxime outra tag RFID/NFC do módulo RFID-RC522
    • Veja o resultado 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 an RFID/NFC tag on the RFID-RC522 reader Access is granted Access denied, UID: 1C 2A 52 E3
    Ln 11, Col 1
    ESP32 Dev Module on COM15
    2

Código ESP32 - Várias Chaves

Vamos fazer uma fechadura que aceita duas chaves: a chave do gerente e a chave da secretária para destrancar a porta.

/* * 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-nfc-door-lock-system */ #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 connects to relay MFRC522 rfid(SS_PIN, RST_PIN); byte managerKeyUID[4] = {0x3A, 0xC9, 0x6A, 0xCB}; byte secretaryKeyUID[4] = {0x30, 0x01, 0x8B, 0x15}; void setup() { Serial.begin(9600); SPI.begin(); // init SPI bus rfid.PCD_Init(); // init MFRC522 pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the door Serial.println("Tap an RFID/NFC tag on the RFID-RC522 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] == managerKeyUID[0] && rfid.uid.uidByte[1] == managerKeyUID[1] && rfid.uid.uidByte[2] == managerKeyUID[2] && rfid.uid.uidByte[3] == managerKeyUID[3] ) { Serial.println("The access is granted to manager"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else if (rfid.uid.uidByte[0] == secretaryKeyUID[0] && rfid.uid.uidByte[1] == secretaryKeyUID[1] && rfid.uid.uidByte[2] == secretaryKeyUID[2] && rfid.uid.uidByte[3] == secretaryKeyUID[3] ) { Serial.println("The access is granted to secretary"); digitalWrite(RELAY_PIN, LOW); // unlock the door for 2 seconds delay(2000); digitalWrite(RELAY_PIN, HIGH); // lock the door } else { Serial.print("Access denied, 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

  • Atualize no código os UUIDs das duas tags RFID/NFC autorizadas
  • Faça o upload do código para o ESP32
  • Aproxime as tags autorizadas, uma por uma, do módulo RFID-RC522.
  • O resultado 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 an RFID/NFC tag on the RFID-RC522 reader The access is granted to manager The access is granted to secretary
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Você pode modificar o código para adicionar 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!