Este projeto apresenta uma opção interessante para o controle de acesso, combinando tecnologia web e a versátil placa NodeMCU ESP8266. Veja abaixo suas principais características e funcionalidades:
Controle Remoto via Página Web: Utilizando uma página web acessível via navegador, este sistema permite o controle remoto da abertura da porta de forma simples e segura. A placa NodeMCU ESP8266 é configurada para um IP fixo dentro da rede local, possibilitando o acesso à página e a ativação do mecanismo de abertura com apenas alguns cliques.
Transformação em Atalho no Desktop: Além do controle via página web, este projeto também oferece a possibilidade de transformar o link de acionamento em um atalho no seu desktop. Ao abrir o atalho, a página web é automaticamente acessada, permitindo o acionamento da trava da porta de maneira fácil e rápida.
Descrição dos materiais:

Observação: A trava elétrica alimentada por 12V no esquema é meramente ilustrativa, pois a intenção do projeto é o acionamento de uma trava elétrica já existente no portão de sua casa ou escritório. Portanto, o circuito pode ser instalado próximo ao interfone ou em qualquer lugar onde passem os dois fios de acionamento da trava. A única conexão necessária é ligar esses dois fios no módulo relé, facilitando a integração do sistema de controle remoto com a trava elétrica já instalada. Além disso, o projeto pode ser adaptado para acionar outras travas elétricas ou qualquer outro mecanismo suportado pelo relé, ampliando suas possibilidades de uso.
Código completo:
#include <ESP8266WiFi.h>
// Definição das credenciais da rede WiFi
#ifndef STASSID
#define STASSID "REDE"
#define STAPSK "SENHA"
#endif
// Definição dos parâmetros de rede
IPAddress ip(192, 168, 100, 54);
IPAddress gateway(192, 168, 100, 1);
IPAddress subnet(255, 255, 255, 0);
// Definição das credenciais da rede WiFi
const char* ssid = STASSID;
const char* password = STAPSK;
// Inicialização do servidor na porta 47
WiFiServer server(47);
// Pino do relé para controle da porta
const int relePin = 5;
// Margem de leitura para evitar múltiplos acionamentos
int margemLeitura = 15000;
// Variável para armazenar o tempo de acionamento
unsigned long tempoAC = 0;
void setup() {
Serial.begin(115200);
// Inicialização da conexão WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Configuração do endereço IP estático
WiFi.config(ip, gateway, subnet);
server.begin();
Serial.println("Conectado ao WiFi. IP: " + WiFi.localIP().toString());
// Configuração dos pinos do relé e do LED embutido
pinMode(relePin, OUTPUT);
digitalWrite(relePin, LOW);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW);
Serial.println("Inicialização concluída.");
}
void loop() {
unsigned long tempoAT = millis();
// Verificação da conexão WiFi
if (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
// Verificação de clientes conectados
WiFiClient client = server.available();
if (!client) {
return;
}
Serial.println("Cliente conectado.");
// Leitura da requisição do cliente
String req = client.readStringUntil('\r');
Serial.println("Requisição: " + req);
// Verificação da requisição para abrir a porta
if (req.indexOf("GET /AbrirPorta") != -1) {
Serial.println("Requisição para abrir a porta.");
// Verificação do tempo de acionamento
if (tempoAT >= tempoAC) {
Serial.println("Tempo atual maior que tempo de acionamento.");
// Acionamento do relé e LED
digitalWrite(relePin, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
tempoAC = millis() + margemLeitura;
Serial.println("Porta aberta.");
// Resposta para o cliente após abrir a porta
client.println("HTTP/1.1 200 OK"); // Inicia a resposta HTTP com o status 200 (OK)
client.println("Content-Type: text/html; charset=utf-8"); // Define o tipo de conteúdo como HTML
client.println(); // Linha em branco indicando o fim dos cabeçalhos
// Início do documento HTML
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title>Controle de Porta</title>");
client.println("<link rel='icon' type='image/png' href='https://i.im.ge/2024/04/15/Zota51.download-5.png'>");
client.println("<style>body { background-color: black; color: white; } #header { display: flex; align-items: center; } #header img { margin-right: 10px; width: 50px; height: auto; } #author { position: absolute; top: 10px; right: 10px; font-size: 10px; }</style>");
client.println("<script>window.setTimeout(function() { window.close(); }, 3000);</script>"); // Fecha a janela após 3 segundos
client.println("</head>");
client.println("<body>");
client.println("<div id='header'><img src='https://i.im.ge/2024/04/15/Zota51.download-5.png' alt='Logo'>");
client.println("<h1>Controle de Porta</h1></div>");
client.println("<p>Porta Aberta</p>"); // Adiciona a mensagem "Porta Aberta"
client.println("<div id='author'>Autor: Rafael Faleiros</div>"); // Adiciona o texto do autor
client.println("</body>");
client.println("</html>");
// Aguarda antes de desativar o relé e o LED
delay(2000);
digitalWrite(relePin, LOW);
digitalWrite(LED_BUILTIN, LOW);
} else {
Serial.println("Tempo atual menor que tempo de acionamento.");
// Resposta para o cliente se o tempo de acionamento não foi atingido
client.println("HTTP/1.1 200 OK"); // Inicia a resposta HTTP com o status 200 (OK)
client.println("Content-Type: text/html; charset=utf-8"); // Define o tipo de conteúdo como HTML
client.println(); // Linha em branco indicando o fim dos cabeçalhos
// Início do documento HTML
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title>Controle de Porta</title>");
client.println("<link rel='icon' type='image/png' href='https://i.im.ge/2024/04/15/Zota51.download-5.png'>");
client.println("<style>body { background-color: black; color: white; } #header { display: flex; align-items: center; } #header img { margin-right: 10px; width: 50px; height: auto; } #author { position: absolute; top: 10px; right: 10px; font-size: 10px; }</style>");
client.println("</head>");
client.println("<body>");
client.println("<div id='header'><img src='https://i.im.ge/2024/04/15/Zota51.download-5.png' alt='Logo'>");
client.println("<h1>Controle de Porta</h1></div>");
client.println("<p>Porta Já Acionada, aguarde...</p>");
client.println("<div id='author'>Autor: Rafael Faleiros</div>"); // Adiciona o texto do autor
client.println("<script>window.setTimeout(function() { window.close(); }, 5000);</script>"); // Fecha a janela após 4 segundos
client.println("</head>");
client.println("</body>");
client.println("</html>");
}
} else {
Serial.println("Requisição inválida.");
// Resposta para requisições inválidas ou para a rota raiz
client.println("HTTP/1.1 200 OK"); // Inicia a resposta HTTP com o status 200 (OK)
client.println("Content-Type: text/html; charset=utf-8"); // Define o tipo de conteúdo como HTML
client.println(); // Linha em branco indicando o fim dos cabeçalhos
// Início do documento HTML
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<title>Controle de Porta</title>");
client.println("<link rel='icon' type='image/png' href='https://i.im.ge/2024/04/15/Zota51.download-5.png'>");
client.println("<style>body { background-color: black; color: white; } #header { display: flex; align-items: center; } #header img { margin-right: 10px; width: 50px; height: auto; } #author { position: absolute; top: 10px; right: 10px; font-size: 10px; }</style>");
client.println("</head>");
client.println("<body>");
client.println("<div id='header'><img src='https://i.im.ge/2024/04/15/Zota51.download-5.png' alt='Logo'>");
client.println("<h1>Controle de Porta</h1></div>");
client.println("<p>Pressione o botão para abrir a porta:</p>");
client.println("<form action='/AbrirPorta' method='get'>");
client.println("<input type='submit' value='Abrir Porta'>");
client.println("</form>");
client.println("<div id='author'>Autor: Rafael A. Faleiros</div>");
client.println("</body>");
client.println("</html>");
}
Serial.println("Fechando conexão com o cliente.");
client.stop();
}
Ao configurar seu dispositivo para se conectar à rede Wi-Fi, é fundamental ajustar os parâmetros de rede corretamente, considerando as caracteristicas da rede. Dependendo do roteador utilizado, podem ser necessários diferentes valores de endereço IP e gateway.
Para encontrar o endereço correto do gateway da sua rede, você pode usar o comando ipconfig no prompt de comando no seu computador (Windows). Este comando fornecerá uma lista de informações sobre a sua conexão de rede, incluindo o endereço do gateway padrão.

Substitua o endereço Gateway encontrado.
IPAddress gateway(192, 168, 100, 1);
Neste caso não podemos utilizar o protocolo DHCP (Dynamic Host Configuration Protocol). O DCHP atribui automaticamente endereços IP aos dispositivos na rede, o que dificultaria o controle do dispositivo de forma significativa, pois sempre que o dispositivo for reiniciado ele pode receber um endereço IP diferente, para que o projeto possa funcionar corretamente devemos usar um IP estático.
Para localizar um endereço disponível utilize um endereço dentro da faixa do endereço de Gateway, como no exemplo abaixo:
// Definição dos parâmetros de rede IPAddress ip(192, 168, 100, 54); IPAddress gateway(192, 168, 100, 1); IPAddress subnet(255, 255, 255, 0);
Nota: É importante verificar se o IP inserido não está em conflito com outros dispositivos na rede. Para isso, basta abrir o prompt de comando e digitar o comando arp -a. Ele retornará todos os dispositivos conectados em sua rede e quais IPs estão em uso.
Verifique o monitor serial para garantir que o IP foi definido corretamente:

Além de definir corretamente o endereço IP, é necessário definir uma porta para o servidor. No exemplo fornecido, o servidor está inicializado na porta 47. Certifique-se de escolher uma porta que não esteja em uso por outros serviços na rede.
Aqui está um trecho do código que inicializa o servidor na porta 47:
// Inicialização do servidor na porta 47 WiFiServer server(47);
Seguindo essas etapas, você poderá configurar seu dispositivo para se conectar à rede Wi-Fi de forma estável e confiável, utilizando um endereço IP estático e uma porta definida.
Abra o navegador Edge e digite o endereço IP e porta definidos no programa, já com o caminho para abertura da porta. Por exemplo: http://192.168.12.54:47/AbrirPorta
Siga o caminho para instalação do link como arquivo executável.

Personalize com o nome e imagem de sua preferência.

Selecione onde deseja fixar o atalho do aplicativo:

Pronto! Assim que clicar, a porta será aberta e o aplicativo vai fechar automaticamente.
No vídeo abaixo você pode conferir o funcionamento do projeto:
Esperamos que tenha entendido o passo a passo para implementação desse projeto. Novos recursos e funcionalidades podem ser desenvolvidos tomando esse tutorial por base, sua imaginação é o limite!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!