ESP32 - Sistema de Fechadura com Senha
Aprenda a criar um sistema de fechadura eletrônica usando senha com teclado (keypad) e fechadura eletromagnética.
Usuários inserem a senha pelo teclado. Se a senha for válida, o ESP32 aciona a fechadura para destravar a porta. O sistema também pode incluir um display LCD para feedback visual.
Como funciona a verificação da senha
*
- reseta a entrada de senha#
- finaliza a entrada de senha e a valida- Caracteres inseridos são armazenados em uma string
- Ao pressionar
#
, a string é comparada com as senhas válidas
Diagrama de Fiação
Código: ESP32 com Teclado e Fechadura
#include <Keypad.h>
#define RELAY_PIN 19
#define ROW_NUM 4
#define COLUMN_NUM 3
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};
byte pin_column[COLUMN_NUM] = {25,33,32};
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
const String password_1 = "1234";
const String password_2 = "4444";
const String password_3 = "55555";
String input_password;
void setup() {
Serial.begin(9600);
input_password.reserve(32);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // trancar porta
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
if (key == "*") {
input_password = "";
} else if (key == "#") {
if (input_password == password_1 || input_password == password_2 || input_password == password_3) {
Serial.println("Senha válida => destravar porta");
digitalWrite(RELAY_PIN, LOW);
delay(20000);
digitalWrite(RELAY_PIN, HIGH);
} else {
Serial.println("Senha inválida => tente novamente");
}
input_password = "";
} else {
input_password += key;
}
}
}
Instruções Rápidas
- Conecte o ESP32 ao PC via USB
- Abra o Arduino IDE
- Instale a biblioteca Keypad
- Copie e cole o código
- Compile e envie para o ESP32
- Use um eletroímã simulando a fechadura
- Digite uma senha e pressione
#
Teste
Digite 1234 e #
→ destrava a porta
Digite 1111 e #
→ senha incorreta
Código com LCD I2C
#include <LiquidCrystal_I2C.h>
#include <Keypad.h>
#define RELAY_PIN 19
#define ROW_NUM 4
#define COLUMN_NUM 3
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};
byte pin_column[COLUMN_NUM] = {25,33,32};
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_column, ROW_NUM, COLUMN_NUM);
const String password_1 = "1234";
const String password_2 = "4444";
const String password_3 = "55555";
String input_password;
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
Serial.begin(9600);
input_password.reserve(32);
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH);
lcd.init();
lcd.backlight();
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
if (key == "*") {
input_password = "";
lcd.clear();
} else if (key == "#") {
lcd.clear();
if (input_password == password_1 || input_password == password_2 || input_password == password_3) {
Serial.println("Senha válida => destravar porta");
lcd.setCursor(0, 0); lcd.print("CORRETO!");
lcd.setCursor(0, 1); lcd.print("PORTA ABERTA!");
digitalWrite(RELAY_PIN, LOW);
delay(20000);
digitalWrite(RELAY_PIN, HIGH);
} else {
Serial.println("Senha inválida => tente novamente");
lcd.setCursor(0, 0); lcd.print("INCORRETO!");
lcd.setCursor(0, 1); lcd.print("ACESSO NEGADO!");
}
input_password = "";
} else {
if (input_password.length() == 0) lcd.clear();
input_password += key;
lcd.setCursor(input_password.length(), 0);
lcd.print("*");
}
}
}
Nota: o endereço I2C do LCD pode variar. Neste exemplo, foi usado 0x27
, comum em modelos da marca DIYables.
Tutorial em Vídeo
Se quiser vídeo tutorial, acesse e inscreva-se: Canal do ESP32io