ESP32 - Teclado - Fechadura Eletromagnética

Neste tutorial, vamos aprender a usar um teclado, uma fechadura eletromagnética e o ESP32 juntos. Em detalhes, se o usuário digitar a senha corretamente no teclado, o ESP32 liga a fechadura eletromagnética.

O tutorial também fornece o código que liga uma fechadura eletromagnética por um período de tempo e depois a desliga sem usar a função delay(). O código ESP32 também suporta várias senhas.

Sobre o Teclado e a Fechadura Eletromagnética

Não conhece o teclado e a fechadura eletromagnética, incluindo a pinagem, o funcionamento e a programação deles? Explore os tutoriais completos sobre esses temas abaixo:

Diagrama de Ligação

Diagrama de ligação do ESP32 com teclado e fechadura eletromagnética

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.

Código ESP32 - ligar a fechadura eletromagnética se a senha estiver correta

Os códigos abaixo ligam uma fechadura eletromagnética se a senha estiver correta

/* * 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-keypad-electromagnetic-lock */ #include <Keypad.h> #define RELAY_PIN 19 // ESP32 pin GPIO19 connected to the relay #define ROW_NUM 4 // keypad four rows #define COLUMN_NUM 3 // keypad three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pin_rows[ROW_NUM] = {12, 14, 27, 26}; // ESP32 pin: GPIO12, GPIO14, GPIO27, GPIO26 connected to the row pins byte pin_column[COLUMN_NUM] = {25, 33, 32}; // ESP32 pin: GPIO25, GPIO33, GPIO32 connected to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed pinMode(RELAY_PIN, OUTPUT); // initialize pin as an output. digitalWrite(RELAY_PIN, HIGH); // lock the electromagnetic lock } void loop() { char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct => unlock"); digitalWrite(RELAY_PIN, LOW); } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

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 (ex.: ESP32 Dev Module) e a porta COM.
  • Conecte o ESP32 ao PC por meio de um cabo USB
  • Abra a Arduino IDE e selecione a placa e a porta corretas
  • Clique no ícone Libraries na barra esquerda da Arduino IDE.
  • Pesquise “keypad” e encontre a biblioteca keypad de Mark Stanley, Alexander Brevig
  • Clique no botão Install para instalar a biblioteca keypad.
Biblioteca keypad para ESP32
  • Copie o código acima e abra-o com a Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no ESP32
Carregar código na Arduino IDE
  • Pressione as teclas 8123 e pressione #
  • Pressione as teclas 1234 e pressione #
  • Veja o resultado no Serial Monitor e o estado da fechadura eletromagnética
∞
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
The password is incorrect, try again The password is correct => unlock
Ln 11, Col 1
ESP32 Dev Module on COM15
2

Explicação do Código

As senhas autorizadas são pré-definidas no código ESP32.

Uma string, chamada de string de entrada, é usada para armazenar a senha digitada pelos usuários. No teclado, duas teclas (* e #) são usadas para funções especiais: limpar a senha e finalizar a senha. Quando uma tecla do teclado é pressionada:

  • Se a tecla pressionada não for uma das duas teclas especiais, ela é adicionada à string de entrada
  • Se a tecla pressionada for *, a string de entrada é limpa. Você pode usá-la para começar ou recomeçar a digitar a senha
  • Se a tecla pressionada for #:
    • A string de entrada é comparada com as senhas pré-definidas. Se ela corresponder a uma das senhas pré-definidas, a fechadura eletromagnética é ligada.
    • Não importa se a senha está correta ou não, a string de entrada é limpa para a próxima entrada

Código ESP32 - ligar a fechadura eletromagnética por um período de tempo se a senha estiver correta

O código abaixo liga a fechadura eletromagnética por 5 segundos se a senha estiver correta. Depois de 5 segundos, a fechadura eletromagnética é desligada.

/* * 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-keypad-electromagnetic-lock */ #include <Keypad.h> #include <ezOutput.h> #define UNLOCK_TIME 5000 // in milliseconds #define RELAY_PIN 19 // ESP32 pin GPIO19 connected to the relay #define ROW_NUM 4 // keypad four rows #define COLUMN_NUM 3 // keypad three columns char keys[ROW_NUM][COLUMN_NUM] = { {'1', '2', '3'}, {'4', '5', '6'}, {'7', '8', '9'}, {'*', '0', '#'} }; byte pin_rows[ROW_NUM] = {12, 14, 27, 26}; // ESP32 pin: GPIO12, GPIO14, GPIO27, GPIO26 connected to the row pins byte pin_column[COLUMN_NUM] = {25, 33, 32}; // ESP32 pin: GPIO25, GPIO33, GPIO32 connected to the column pins Keypad keypad = Keypad( makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM ); ezOutput relay(RELAY_PIN); const String password_1 = "1234"; // change your password here const String password_2 = "56789"; // change your password here const String password_3 = "901234"; // change your password here String input_password; void setup() { Serial.begin(9600); input_password.reserve(32); // maximum password size is 32, change if needed relay.high(); // lock the electromagnetic lock } void loop() { relay.loop(); // MUST call the loop() function first char key = keypad.getKey(); if (key) { Serial.println(key); if (key == '*') { input_password = ""; // reset the input password } else if (key == '#') { if (input_password == password_1 || input_password == password_2 || input_password == password_3) { Serial.println("The password is correct => unlock"); relay.high(); // set high before making a low pulse relay.pulse(UNLOCK_TIME); // deactivate the electromagnetic lock during UNLOCK_TIME duration } else { Serial.println("The password is incorrect, try again"); } input_password = ""; // reset the input password } else { input_password += key; // append new character to input password string } } }

Observe que o código acima usa a biblioteca ezOutput, que facilita o gerenciamento do tempo de forma não bloqueante. Você pode consultar o Guia de Instalação da Biblioteca ezOutput

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!