Skip to content

Arquitetura de Software

Fluxo de Dados

  1. Os sensores coletam informações do dessalinizador.
  2. A ESP32 envia os dados para o broker HiveMQ via protocolo MQTT.
  3. O HiveMQ distribui os dados dos sensores para o backend Django.
  4. 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.
  5. 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

Figura 1: Diagrama de Arquitetura.
Fonte: Autoria própria.2025

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

  1. ESP32 (Microcontrolador)
  2. Descrição: Componente responsável por coletar dados dos sensores e enviá-los ao backend.
  3. 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.
  4. Sensores

  5. 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.
  6. Broker MQTT

  7. Descrição: Intermediário entre ESP32 e Backend.
  8. Interfaces:

    • Recebimento de Dados do ESP32.
    • Envio de Dados para Backend.
  9. Backend (Servidor)

  10. 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.
  11. Banco de Dados

  12. Descrição: Armazena os dados dos sensores com timestamp e outros metadados.
  13. Interfaces:

    • Comunicação com o backend para persistir e recuperar dados.
  14. Frontend (Painel de Visualização)

  15. Descrição: Interface gráfica para que os usuários visualizem o estado do sistema e os dados dos sensores em tempo real.
  16. Interfaces:

    • Consome dados do backend via API RESTful.
  17. Serviço de Notificação

  18. Descrição: Serviço que envia notificações (e-mail, SMS) em caso de valores críticos.
  19. Interfaces:
    • Recebe dados do backend e dispara notificações conforme as regras definidas.

Interações entre Componentes

  1. ESP32 lê dados dos Sensores e os transmite via HTTP/MQTT para o Backend.
  2. O Backend recebe os dados, realiza validações e persiste as leituras no Banco de Dados.
  3. O Frontend consulta o Backend, periodicamente ou em tempo real, para exibir as informações dos sensores ao usuário.
  4. 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

Figura 2: DDiagrama de Componentes.
Fonte: Autoria própria.2024

Referências

  1. 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