Arquitetura de Software
Fluxo de Dados
- Os sensores coletam informações do dessalinizador.
- A ESP32 envia os dados para o broker HiveMQ via protocolo MQTT.
- O HiveMQ distribui os dados dos sensores para o backend Django.
- O Backend Django: Processa os dados recebidos via MQTT. Persiste os dados no Banco de Dados PostgreSQL. Disponibiliza as informações por meio de uma API REST.
- O Frontend(HTML, CSS E JS) consome essa API e apresenta os dados na interface para os usuários.
Decisões de Arquitetura
MQTT para Comunicação com ESP32
- Ideal para sistemas embarcados e IoT, pois é leve, eficiente em termos de consumo de dados e energia, e permite comunicação em tempo real entre a ESP32 e o broker de mensagens.
HiveMQ como Broker de Mensagens
- HiveMQ é a plataforma MQTT empresarial comprovada porque é confiável sob estresse do mundo real, desenvolvida para flexibilidade, segurança e escala. E é amplamente utilizado e conhecido pela equipe de Engenharia Eletrônica. Ele facilita a distribuição de mensagens entre dispositivos e sistemas, sendo uma escolha natural para a comunicação entre a ESP32 e o Backend.
Django para Backend
- Oferece uma estrutura robusta para criar APIs REST e gerenciar dados. Ele facilita o consumo dos dados via MQTT e a exposição da API para a interface de usuário, além de ter integração nativa com bancos de dados relacionais.
PostgreSQL como Banco de Dados
- Banco de dados relacional robusto e escalável, perfeito para armazenar os dados estruturados, como métricas de sensores. Ele também oferece alto desempenho em consultas e garantias de integridade dos dados.
HTML, CSS E JS para Interface
- O uso de HTML, CSS e JavaScript permite a criação de interfaces interativas e dashboards personalizados, consumindo a API REST do Django. Com essas tecnologias, é possível projetar layouts responsivos e atrativos, além de implementar interatividade avançada, como gráficos dinâmicos, animações e validações de formulários no frontend. A combinação dessas ferramentas oferece flexibilidade total para atender às necessidades específicas do projeto, permitindo uma maior personalização e controle sobre o design e a experiência do usuário, diferente da opção inicial que era o Streamlit.
Diagrama de Arquitetura

Diagrama de componentes
Para enriquecer o entendimento da arquitetura do projeto, utilizou-se também do diagrama de componentes, que possui como objetivo mostrar a estrutura do sistema de software, descrevendo seus componentes, suas interfaces e suas dependências. É possível utilizar diagramas de componentes para modelar sistemas de software em um alto nível ou para mostrar componentes em um nível de pacote mais baixo. Esse tipo de diagrama suporta o desenvolvimento com base em componentes no qual um sistema de software é dividido em componentes e interfaces que são reutilizáveis e substituíveis.
Os diagramas de componentes são úteis pelos seguintes motivos:
- Definir os aspectos executáveis e reutilizáveis de um sistema de software;
- Revelar problemas de configuração de software através de relacionamentos de dependência;
- Mostrar uma representação precisa de um aplicativo de software antes de fazer alterações ou aprimoramentos;
Também é possível utilizar os diagramas de componentes para descrever as seguintes peças físicas de um sistema de software:
- Os arquivos de código fonte desenvolvidos em um ambiente de desenvolvimento integrado;
- Os arquivos executáveis necessários para fornecer um sistema em execução;
- Bancos de dados físicos que armazenam informações nas tabelas de um banco de dados relacional ou nas páginas de um banco de dados orientado a objetos, e
- Sistemas adaptáveis que possuem componentes que migram para equilíbrio de carga e recuperação de defeitos.
Componentes para o Diagrama
- ESP32 (Microcontrolador)
- Descrição: Componente responsável por coletar dados dos sensores e enviá-los ao backend.
-
Interfaces:
- Sensores: Interfaces para o pH, nível, vazão e temperatura.
- Comunicação com Backend: Utilizando HTTP ou MQTT para enviar dados ao backend.
-
Sensores
-
Sensores de pH, Nível, Vazão e Temperatura
- Descrição: Coletam medições específicas da água e enviam ao ESP32.
- Interfaces:
- Conectados ao ESP32.
-
Broker MQTT
- Descrição: Intermediário entre ESP32 e Backend.
-
Interfaces:
- Recebimento de Dados do ESP32.
- Envio de Dados para Backend.
-
Backend (Servidor)
-
Descrição: Processa e armazena os dados recebidos do ESP32, persiste os dados em um banco de dados e fornece dados para visualização.
- Interfaces:
- Recebimento de dados do ESP32 (HTTP ou MQTT)
- Fornecimento de dados para o frontend
- Serviço de Armazenamento (Banco de Dados): Persistência dos dados de sensores.
- Interfaces:
-
Banco de Dados
- Descrição: Armazena os dados dos sensores com timestamp e outros metadados.
-
Interfaces:
- Comunicação com o backend para persistir e recuperar dados.
-
Frontend (Painel de Visualização)
- Descrição: Interface gráfica para que os usuários visualizem o estado do sistema e os dados dos sensores em tempo real.
-
Interfaces:
- Consome dados do backend via API RESTful.
-
Serviço de Notificação
- Descrição: Serviço que envia notificações (e-mail, SMS) em caso de valores críticos.
- Interfaces:
- Recebe dados do backend e dispara notificações conforme as regras definidas.
Interações entre Componentes
- ESP32 lê dados dos Sensores e os transmite via HTTP/MQTT para o Backend.
- O Backend recebe os dados, realiza validações e persiste as leituras no Banco de Dados.
- O Frontend consulta o Backend, periodicamente ou em tempo real, para exibir as informações dos sensores ao usuário.
- Caso o valor de algum sensor esteja fora dos parâmetros normais, o Backend aciona o Serviço de Notificação para alertar os responsáveis.
Diagrama de Componentes

Referências
- Diagramas de Componentes. IBM, 2021. Disponível em: https://www.ibm.com/docs/pt-br/rsas/7.5.0?topic=services-component-diagrams. Acesso em: 12 de novembro de 2024.
Histórico de versão
Data | Versão | Descrição | Autores | Revisor |
---|---|---|---|---|
12/11/2024 | 1.0 | Criação do Documento de Arquitetura de Software | João Victor Bisinotti e Victor Gonçalves | |
12/11/2024 | 1.0 | Texto sobre Diagrama de Componentes | Douglas da Silva e João Bisinotti | |
12/11/2024 | 1.1 | Descrição dos componentes e das suas interações | Douglas da Silva e João Bisinotti | |
21/11/2024 | 2.0 | Junção do documento de arquitetura com o diagrama de componentes | Victor Gonçalves | Mylena |
14/01/2025 | 3.0 | Ajustes de mudanças no Frontend | Mylena Farias | ----- |
25/01/2025 | 4.0 | Alteração do broker MQTT | Douglas da Silva e João Bisinotti | Mylena Farias |