Arquitetura de Software
Arquitetura de software é a estrutura fundamental de um sistema, englobando suas partes e a forma como elas se relacionam para alcançar os objetivos do sistema. Ela inclui componentes principais, interações, padrões, restrições, princípios de design e escolhas tecnológicas, proporcionando uma base para o desenvolvimento e a evolução do sistema [1].
A arquitetura do Alimentador de Pets será composta por um dispositivo físico embarcado em uma ESP 32, responsável pelo controle e funcionamento do sistema de alimentação. Um aplicativo mobile, desenvolvido para Android, permitirá ao usuário controlar o alimentador remotamente. Para viabilizar a comunicação entre o aplicativo e a ESP 32, será utilizada uma API que se conecta ao dispositivo por meio do protocolo MQTT, garantindo uma troca de mensagens eficiente e em tempo real entre o aplicativo e o hardware embarcado.
Componentes
-
ESP 32: Dispositivo físico embarcado que atua como o controlador principal do sistema de alimentação. Ele gerencia o funcionamento do alimentador, incluindo o acionamento do motor para liberar a ração e a coleta de dados, como nível de ração ou status do dispositivo.
-
Motor e Mecanismo de Alimentação: Componente mecânico responsável por liberar a quantidade de ração. É acionado pela ESP 32 conforme comandos recebidos do aplicativo.
-
API: Interface intermediária que permite a comunicação entre o aplicativo mobile e a ESP 32. Recebe comandos do aplicativo e os envia à ESP 32 utilizando o protocolo MQTT para controle do alimentador.
-
Protocolo MQTT: Protocolo de comunicação leve, utilizado para a troca de mensagens entre o aplicativo Android e a ESP 32. Garante que os comandos e os dados dos sensores sejam transmitidos de maneira rápida e eficiente.
-
Aplicativo Mobile Android: Aplicativo que permite ao usuário interagir com o alimentador, enviando comandos, configurando horários de alimentação e recebendo informações sobre o status do dispositivo. A interface do aplicativo oferece uma experiência amigável para o controle remoto do sistema.
Metas e Restrições Arquiteturais
Metas
-
Facilidade de Uso: Proporcionar uma interface intuitiva para o usuário final no aplicativo mobile Android, permitindo um controle fácil e rápido do alimentador, com configurações de horários de alimentação e notificações sobre o status do dispositivo.
-
Comunicação em Tempo Real: Implementar uma comunicação rápida e confiável entre o aplicativo Android e a ESP 32, usando o protocolo MQTT para troca de mensagens em tempo real, de modo a permitir um controle ágil e atualizações frequentes sobre o status do alimentador.
-
Escalabilidade: Possibilitar futuras expansões do sistema, como a integração com outros dispositivos IoT (Internet of Things) e sensores adicionais, sem a necessidade de grandes modificações na arquitetura inicial.
Restrições
-
Limitações de Hardware: A ESP 32 possui capacidade de processamento e memória limitadas, o que restringe o uso de softwares e bibliotecas pesados. A escolha de softwares e frameworks deve, portanto, otimizar o desempenho dentro dessas limitações.
-
Conectividade: A comunicação entre o aplicativo e o alimentador depende de uma conexão de rede estável (Wi-Fi) para funcionar corretamente. Em locais onde a conectividade é fraca ou instável, a funcionalidade do sistema pode ser comprometida.
-
Custo de Implementação: Manter os custos do projeto baixos para garantir acessibilidade ao usuário final. Isso influencia a escolha de componentes de hardware e limita a possibilidade de utilizar soluções mais caras de comunicação e controle.
Diagrama de arquitetura de software
A arquitetura definida para o projeto até a etapa 1 é esclarecida na imagem 1.
Imagem 1: Diagrama de Arquitetura Geral (Fonte: Yago Passos, 2024.)
Na imagem 2, está ilustrada a arquitetura de infraestrutura do projeto no ambiente de cloud (Amazon Web Services) em que o software será hospedado.
Imagem 2: Diagrama de Arquitetura de Infra-estrutura (Fonte: Eric Chagas, 2024.)
Na imagem 3, é possível entender melhor o funcionamento do Aplicativo Mobile, que seguirá a arquitetura de seu framework de confecção, o React Native.
Imagem 3: Diagrama de Arquitetura do React Native (Fonte: Lorenzo Sciandra, 2019)
Diagrama de Componentes
O diagrama de componentes demonstra os blocos de software do sistema, suas responsabilidades e as interações entre eles. Ele ajuda a compreender como as funcionalidades estão distribuídas e como os elementos se conectam para fornecer os serviços planejados.
Imagem 7: Diagrama de Componentes (Fonte: Lude Ribeiro, 2024.)
Diagrama de Sequência
O diagrama de sequência descreve o fluxo de mensagens e interações entre os diferentes componentes durante a execução de uma funcionalidade. Ele detalha a sequência de eventos no tempo, mostrando como os objetos colaboram para realizar a tarefa.
Imagem 8: Diagrama de Sequência (Fonte: Yago Passos, 2024.)
Tecnologias
O desenvolvimento do sistema Alimentador de Pets envolve uma combinação de tecnologias de hardware, software e comunicação, com o objetivo de criar uma solução eficiente e de fácil uso para o controle remoto do dispositivo de alimentação. Abaixo estão listadas as principais tecnologias utilizadas no projeto:
-
ESP32: Microcontrolador utilizado como o cérebro do sistema. Com suporte para Wi-Fi e Bluetooth, a ESP32 é responsável pelo gerenciamento dos componentes do alimentador, como sensores e o mecanismo de distribuição de ração. Ela executa a lógica de controle do dispositivo e se comunica com o aplicativo mobile por meio de MQTT.
-
MQTT (Message Queuing Telemetry Transport): Protocolo de comunicação leve, ideal para IoT, que possibilita a troca de mensagens entre o aplicativo e a ESP32 em tempo real. A escolha do MQTT é baseada em sua eficiência, baixo consumo de energia e simplicidade de implementação.
-
React Native: Framework utilizado para o desenvolvimento do aplicativo mobile para Android. Permite que o aplicativo seja desenvolvido com JavaScript, facilitando o desenvolvimento multiplataforma e oferecendo uma interface amigável ao usuário.
-
API Backend: Interface de comunicação intermediária entre o aplicativo e a ESP32. A API processa comandos enviados pelo aplicativo e os encaminha para o dispositivo, além de gerenciar a recepção de dados de status e nível de ração. Implementada para ser leve e performática, a API utiliza REST para simplificar a integração com o aplicativo mobile.
-
Banco de Dados: Em uma versão mais robusta do sistema, um banco de dados pode ser integrado para armazenar logs de alimentação, horários e históricos de ações, permitindo ao usuário um monitoramento mais detalhado.
Visão de caso de uso
O seguinte diagrama, presente na imagem 4, representa os principais Casos de Uso do aplicativo proposto para a solução, definindo os fluxos do sistema.
Imagem 4: Diagrama de Caso de Uso (Fonte: Yago Passos, 2024)
Visão Lógica
A visão lógica detalha a estrutura interna do sistema, destacando como ele é organizado em unidades e implementações. Ela apresenta a organização conceitual do sistema em níveis, incluindo camadas, pacotes, classes e interfaces, e revela como esses elementos estão interligados. Esse diagrama mostra as dependências entre componentes, a realização das interfaces e as relações entre partes, como composições e agregações, para dar uma visão clara do funcionamento e da interconexão entre os elementos do sistema.
Visão Geral
O Alimentador de Pets é um sistema automatizado que oferece aos donos de animais a conveniência de monitorar e gerenciar a alimentação de seus pets à distância. Por meio de um aplicativo mobile intuitivo, o usuário pode programar horários, controlar manualmente o dispensador de ração, e monitorar o nível de ração e o status do dispositivo em tempo real.
Composto por uma ESP32, que atua como controlador principal, e utilizando o protocolo MQTT para comunicação, o sistema garante uma troca de informações rápida e eficiente entre o aplicativo e o alimentador. A API backend permite uma integração simplificada e segura, facilitando o envio de comandos e a coleta de dados de status.
Esse projeto busca oferecer uma solução de baixo custo, escalável e segura, permitindo futuras expansões, como a adição de novos sensores ou funcionalidades avançadas de monitoramento.
Diagrama de Classes
Imagem 5: Diagrama de Caso de Uso 1.0 (Fonte: Fernando Vargas, 2024)
Camada de Aplicativo (App Android)
Classe Aplicativo
- Atributos:
usuarioId
: Identificador do usuário.configuracoes
: Configurações de alimentação, como horários e quantidades.
- Métodos:
enviarComando(comando: String)
: Envia um comando para o backend.atualizarStatus()
: Atualiza o status do alimentador com informações da API.notificarUsuario(mensagem: String)
: Notifica o usuário sobre eventos, como falha de conexão ou fim de ração.
Classe ControladorAlimentacao
- Atributos:
horarios
: Lista de horários programados.quantidade
: Quantidade de ração a ser dispensada.
- Métodos:
programarAlimentacao(horario: DateTime, quantidade: Float)
: Define um horário de alimentação e quantidade.ajustarConfiguracoes(configuracoes: Map)
: Ajusta as configurações conforme o perfil do animal.
Camada de Backend (API)
Classe APIController
- Atributos:
autenticacao
: Dados para autenticação do usuário.urlMQTT
: URL do broker MQTT.
- Métodos:
enviarComandoMQTT(topico: String, mensagem: String)
: Envia comandos para a ESP32 via MQTT.receberDadosStatus()
: Recebe e processa dados de status da ESP32.
Classe MonitoramentoStatus
- Atributos:
nivelRacao
: Nível atual de ração.conexaoStatus
: Status da conexão com a ESP32.historicoLog
: Logs de atividades e eventos.
- Métodos:
atualizarStatusESP32()
: Atualiza o status com base em mensagens recebidas da ESP32.registrarLog(evento: String)
: Armazena eventos importantes para monitoramento e histórico.
Camada de Dispositivo (ESP32)
Classe DispositivoESP32
- Atributos:
conexaoWiFi
: Status da conexão Wi-Fi.nivelSensor
: Sensor de nível de ração.
- Métodos:
conectarWiFi()
: Estabelece conexão Wi-Fi.desconectarWiFi()
: Finaliza conexão Wi-Fi.publicarStatus(topico: String, mensagem: String)
: Publica o status do dispositivo via MQTT.
Classe MotorControle
- Atributos:
estado
: Estado atual do motor (ligado/desligado).velocidade
: Velocidade do motor para controlar a quantidade de ração.
- Métodos:
acionarMotor(quantidade: Float)
: Aciona o motor para liberar a quantidade de ração especificada.pararMotor()
: Para o motor após a liberação da ração.
Relações Entre as Classes
- A classe
Aplicativo
se comunica comAPIController
no backend para enviar comandos e receber status. APIController
utilizaMonitoramentoStatus
para manter o status atualizado e registrar logs de eventos.APIController
se comunica comDispositivoESP32
via MQTT, enviando comandos de controle e recebendo atualizações.DispositivoESP32
controla oMotorControle
para dispensar ração, conforme os comandos recebidos.
Diagramas de Pacotes
Imagem 6: Diagrama de Pacotes 1.0 (Fonte: Fernando Vargas, 2024)
Pacote Aplicativo Android
- Descrição: Representa a camada do aplicativo mobile Android.
- Responsabilidade: Contém classes responsáveis pela interface do usuário e lógica de controle do alimentador.
- Classes:
Aplicativo
ControladorAlimentacao
Pacote API
- Descrição: Representa a camada intermediária responsável pela comunicação entre o aplicativo e a ESP32.
- Responsabilidade: Inclui a lógica para enviar comandos e processar dados via MQTT, além de manter logs e status.
- Classes:
APIController
MonitoramentoStatus
Pacote Dispositivo ESP32
- Descrição: Representa a camada embarcada, responsável pela execução dos comandos recebidos e operação do alimentador físico.
- Responsabilidade: Inclui o controle do motor e sensores conectados à ESP32.
- Classes:
DispositivoESP32
MotorControle
Relações Entre os Pacotes
No diagrama, conectamos os pacotes para mostrar a dependência de um pacote sobre o outro. Aqui estão as associações entre os pacotes:
Aplicativo
->Backend
: O pacoteAplicativo
depende do pacoteBackend
para enviar comandos e receber status do alimentador.Backend
->Dispositivo
: O pacoteBackend
depende do pacoteDispositivo
para comunicar comandos e receber dados da ESP32, utilizando o protocolo MQTT.
Referências
1 Bass, L., Clements, P., & Kazman, R. Software Architecture in Practice. Boston: Addison-Wesley, 2003.
Sciandra, Lorenzo. The New React Native Architecture Explained: Part Four, 2019. Disponível em: Nearform Commerce.
Tabela de versionamento
Versão | Data | Descrição | Responsável |
---|---|---|---|
1.0 | 09/11/2024 | Criação do documento. | Fernando Vargas |
1.1 | 12/11/2024 | Atualização do documento. | Yago |
1.2 | 13/11/2024 | Diagrama de Classe e Visão Geral | Fernando Vargas |
1.3 | 13/11/2024 | Diagrama de Pacotes | Fernando Vargas |
1.3 | 27/11/2024 | Ajuste path imagens | Fernando Vargas |
1.4 | 30/11/2024 | Adição de arquitetura de infra-estrutura | Eric Chagas |
1.5 | 30/11/2024 | Adição de diagrama de componentes | Lude Ribeiro |
1.6 | 01/12/2024 | Adição de diagrama de sequência | Yago |