Controle de acesso ESP32 MQTT portão social e da garagem com sensor interno

Ha algum tempo atrás criei um controle de acesso que se comunicava com o servidor MQTT da Adafruit funcionou muito bem mas não era local, migrei ele para o HA mas o Código ficou muito bagunçado e para adicionar usuários era necessário usar um aplicativo android a parte. Resolvi recriar o projeto fazendo ele completamente compatível com o HA.

Para se conectar ao WiFi eh so segurar um botão o ESP ira gerar um access point onde voce loga com a senha 12345678 e entra com os dados do WiFi e também do servidor MQTT.

Entidades:
Eh possível enviar comando diretamente para o portão social e da garagem.
1

Sao três sensores de digital:
SESOC - Sensor externo do portão social.
SISOC - Sensor interno do portão social.
SIGAR - Sensor interno do portão da garagem.

Digital inscrita detectada - Fica ativa por 500ms quando uma digital cadastrada eh detectada;
Digital não inscrita detectada - Fica ativa por 500ms quando uma digital não cadastrada eh detectada;
Log de acessos - Possui a data horário nome do usuário e confiança da digital (pretendo deixar um card com o log de acesso de cada sensor para fácil visualização);
Ultimo detectado - Possui o nome do ultimo usuário que acessou.

Cadastrando digitais:
Todos os nomes de usuários ficam armazenados na EEPROM (flash) do ESP32 por isso a quantidade limitada de nomes (não queria usar EEPROM externa e a do ESP eh limitada em 4096 bytes, me arrependi no meio do caminho) mas ainda da pra aumentar;

1 Membro - Digitar nome com ate 13 caracteres para ser adicionado ou removido da lista de membros apertando os botões Adicionar membro ou Remover membro.
2.1 Membro - Possui a listagem de todos os membros adicionados selecione um para realizar uma ação.
2.2 Sensor - Selecione o sensor para adicionar ou remover digital;
2.3 Ação - Pode ser selecionado Cadastrar digital, remover digital ou remover todas as digitais.
2.4 Executar ação - realiza a ação programada.
4 - Apagar todos os dados - Apaga todos os membros, e todas as digitais salvas em todos so sensores, apaga tambem a rede WiFi salva e os dados do servidor MQTT, o ESP automaticamente gfera o access point para a entrada dos novos dados, deve ser apertado 3 vez em um intervalos de 5 segundos entre cada aperto para confirmar;
5 - Horário - Hora atualizada a cada 1 minuto (fornecida por um relógio de tempo real DS3231), basta modificar o campo para atualizar o horário;
6 - Dara - Data atualizada cada 1 minuto (fornecida por um relógio de tempo real DS3231), basta modificar o campo para atualizar o data;
7 - Dialogo - Apresenta informações e avisos durante o cadastro e remoção de digitais, também informa se o formato do horário ou da data enviado estava incorreto, mostra varias informações;

Resumo

Diagnostico:
CRC Memoria - Ficara com o status problema caso os dados na EEPROM estejam corrompidos, sera necessário apagar todos os dados caso ocorra (ocorrera sempre depois da gravação do firmware em um novo ESP32)
Quantidade de membros salva - Informa a quantidade salva e a maxima permitida;
SESOC/SISOC/SIGAR estado - Informa se o sensor esta Ok, se ele parar de se comunicar ficara com status problema.
SESOC/SISOC/SIGAR digitais salvas - Quantidade salva e maxima permitida;
Sinal - Forca do sinal WiFi
Status - Ficara offline se nenhum dado for recebido em 90 segundos dai todas as variáveis ficarão indisponíveis.

Resumo

Esses dados estao diretamente na pagina do dispositivo:

Resumo

Estou fazendo alguns testes finais.
O circuito esta todo em protoboard terminando posto o esquema, código e video mostrando.

3 Likes

Ótimo trabalho. Compartilha o hardware utilizado e se possível, o exemplo de código.

1 Like

Vou colocar sim estou fazendo alguns testes e ajustes e tentando achar erros e bugs, ja encontrei um, também adicionei a confiança separada pois pode ser útil para alguma automação.

Resumo

1 Like

Esquemático… Haverá uma placa principal, o sinal serial eh convertido de TTL para RS422 ponto a ponto e então saem três cabos de rede um para cada sensor de digital (o comprimento do cabo pode ser de vários metros teoricamente pois usa sinal diferencial para eliminação do erro).

Resumo

Essas são fotos do meu sistema atual, a placa principal eh antiga mas o novo sistema ficara com o mesmo layout.

Resumo

Da um trabalho mas depois de montado voce tem um sistema de controle de acesso por digital full compatível com o HA.

Componentes:

Resumo

ESP32 com antena externa. Não fiz testes mas gosto da antena externa.


Barra de pinos para fácil substituição do ESP (opcional)

DS3231 modificado para retirar o circuito carregador da bateria pois ele não funciona.
https://www.youtube.com/watch?v=ND2shVqV9s4

AMS1117 de 5V para 3V3 (1 para sensores de digital e 1 para reles)

Modulo rele 3,3V

6 unidades. Comprei da china mas me enviaram CI falsificado e ele não funcionou então resolvi comprar do ML mesmo. Se os sensores forem ficar perto da placa de controle principal esse CI não eh necessário.

6 unidades. Para facilitar a substituicao caso necessário (em três anos o sistema antigo esta funcionando sem necessidade de reparo algum).

LED de 6V para indicar o estado da placa. (pisca 1 vez = desconectado MQTT; 2 vezes = desconectado do WiFi; 3 vezes = não há rede WiFi salva). Opicional.

Transistor BC337 para ligar o led (opcional)

Fonte 5V

Conector RJ45 para placa

Barra de pinos:

3 unidades sensores de digital.

Placa dos sensores de digital.

Resistores 150Ohm e 3300Ohm.

Eu corto o fio e soldo novos conectores para ficar mais fácil utilizar.

Placa principal

Cabo de rede com tamanho a depender do seu local de montagem

Depois de montado e testado posto o código.

Esquemático final:

O código esta aqui não da pra postar direto aqui, ficou muito grande, vou deixar somente o arquivo principal. Foi feito no platform IO (Arduino) da para importar direto a pasta para alteração e visualização.

main.c
#include <Arduino.h>
#include <stdio.h>
#include <Adafruit_I2CDevice.h>
#include <SPI.h>
#include <SoftwareSerial.h>
#include <WiFiManager.h> // https://github.com/tzapu/WiFiManager
#include <ESP32Ping.h>
#include <EEPROM.h>
#include <pinos.h>
#include <pubsubclient.h>
#include <definicoes.h>
#include <Adafruit_Fingerprint.h>
#include "classesStructs.c"
#include "RTClib.h"
#include "variaveiGlobais.c"
#include "funcoes.c"
#include "sensorDigital.c"
#include "WiFi_MQTT.c"

void setup() {
  Serial.begin(115200);
  ininializarEEPROM();
  InicializarWiFi();
  lerDadosMQTTEEMPROM();
  configurarPinos();
  incializarSesnsoresDeDigital();
  inicializarRealTimeClock_DS3231();
}

void loop() {
  wm.process();
  realTimeClock_dataHora();
  verificaConexaoWiFi();
  atualizarLedStatus();
  atualizarRelesPortoes();
  verificarSensoresDeDigital();
  ConexaoMQTTfuncao();
}

Placas, bem de hobbysta mesmo, mas ficaram funcionais:

Nao implementei a configuração de senha para os sensores, mas como isso não altera em nada o Hardware irei atualizar o código depois. Logo mais posto um video rápido mostrando o funcionamento.

Nada como construir o seu próprio dispositivo, funciona perfeitamente, sem desconexões, local e faz exatamente o que voce espera que el faca :rofl: :joy: :nerd_face: