Arquitetura de Software
Introdução
Nesta seção do documento, apresentamos a arquitetura definida para o projeto, que integra sensores conectados a um sistema embarcado baseado no ESP32. A comunicação entre os sensores e o ESP32 permite a coleta de dados em tempo real, possibilitando a geração de relatórios detalhados e personalizados. Além disso, foi implementada uma API que estabelece a integração entre o ESP32 e a Alexa, permitindo que o sistema seja controlado por meio de comandos de voz. Essa integração é viabilizada por uma skill personalizada desenvolvida para a Alexa, que possibilita ao usuário solicitar informações sobre os sensores, consultar os relatórios gerados ou até mesmo executar comandos específicos diretamente por meio do assistente virtual.
Como nosso sistema envolve um software embarcado, a arquitetura utilizada difere das abordagens convencionais, como a arquitetura em camadas ou de microsserviços. Para determinar a arquitetura mais adequada, analisamos a estrutura interna do ESP32 (imagem 1) e identificamos a metodologia de software que melhor se alinha às suas capacidades. Esse processo é análogo à escolha de uma arquitetura baseada no framework utilizado em projetos de software tradicionais, mas adaptado às particularidades de um sistema embarcado, garantindo eficiência e integração com tecnologias modernas, como assistentes virtuais.

Fonte: Gabriel Bertolazi.
Metodologia
Durante a pesquisa, identificamos que, tradicionalmente, são utilizadas duas arquiteturas em projetos embarcados para o ESP32: a arquitetura simétrica e a arquitetura assimétrica.
A arquitetura simétrica é mais comum em projetos mais simples, que utilizam um número reduzido de funções. Essa abordagem opera sem uma gestão eficiente do núcleo de processamento, mas com um modelo de compartilhamento de tarefas entre o núcleo, onde as funções são distribuídas de maneira equilibrada.
Por outro lado, a arquitetura assimétrica é mais robusta e adequada para softwares mais complexos. Nesse modelo, o núcleo é dividido em frações onde elas podem ter diferentes capacidades de operação para cada função dedicada, ou seja um modelo mais versátil.
Em uma comparação básica, podemos dizer que a arquitetura simétrica se assemelha a um monolito, enquanto a arquitetura assimétrica é mais semelhante a uma arquitetura de microserviços.
Objetivo
-
Definir uma Arquitetura Robusta e Modular
- Propor uma estrutura clara e eficiente para o sistema embarcado, que permita a integração harmoniosa de todos os componentes, incluindo sensores, atuadores e interfaces de comunicação.
- Garantir que a arquitetura seja modular, facilitando futuras atualizações e expansões do sistema.
-
Descrever o Fluxo de Dados e Comunicação
- Mapear o fluxo de informações entre os componentes do sistema, detalhando a comunicação entre sensores, atuadores e a API da Alexa.
- Assegurar que os protocolos de comunicação utilizados sejam confiáveis, seguros e compatíveis com os requisitos do projeto.
-
Garantir Desempenho e Escalabilidade
- Estabelecer diretrizes para que o sistema seja otimizado em termos de desempenho, minimizando latências e maximizando a eficiência energética.
- Planejar para que o sistema seja escalável, permitindo a adição de novos dispositivos ou funcionalidades sem comprometer a operação atual.
-
Definir Interações com a API da Alexa
- Especificar os métodos e padrões de integração com a API da Alexa, garantindo que o sistema embarcado seja capaz de responder adequadamente a comandos de voz e fornecer feedback ao usuário.
- Assegurar que a interação com a Alexa seja intuitiva, confiável e alinhada com as expectativas dos usuários.
-
Servir como Referência para o Desenvolvimento
- Fornecer um guia abrangente e detalhado para toda a equipe de desenvolvimento, promovendo um entendimento comum da visão e dos objetivos do sistema.
- Facilitar a comunicação entre os membros da equipe, alinhando esforços e reduzindo ambiguidades durante o ciclo de desenvolvimento.
-
Assegurar a Conformidade com Requisitos do Sistema
- Garantir que a arquitetura proposta atenda plenamente aos requisitos funcionais e não funcionais do projeto.
- Considerar aspectos como segurança, confiabilidade e facilidade de manutenção ao longo de todo o processo.
-
Promover a Integração Harmoniosa dos Componentes
- Planejar para que todos os subsistemas do projeto trabalhem de forma integrada, garantindo uma operação coesa e eficiente.
- Identificar possíveis pontos de falha e propor soluções para mitigar riscos durante a implementação.
Explicação da Arquitetura
Arquitetura do Sistema
A arquitetura do sistema embarcado foi projetada para garantir modularidade, escalabilidade e eficiência. Ela é composta por três camadas principais: Camada de Sensores e Atuadores, Camada de Processamento e Camada de Comunicação e Integração com a Alexa. A seguir, detalhamos cada uma dessas camadas e suas responsabilidades:
1. Camada de Sensores e Atuadores
Esta camada representa a interface física do sistema com o ambiente. É responsável por capturar dados do mundo real (por meio dos sensores) e realizar ações físicas (por meio dos atuadores).
- Sensores:
- Capturam informações do ambiente, como temperatura, umidade, luz, movimento, entre outros dados relevantes.
-
Exemplos: sensores ultrassônicos, sensores de temperatura (DHT11/DHT22), sensores de luminosidade (LDR).
-
Atuadores:
- Executam ações com base nas decisões tomadas pelo sistema, como ligar/desligar dispositivos, movimentar motores ou emitir sinais sonoros.
- Exemplos: LEDs, motores DC/servos, relés e dispositivos de sinalização.
Todos os sensores e atuadores estão conectados ao microcontrolador/microprocessador, que gerencia a aquisição de dados e o envio de comandos.
2. Camada de Processamento
A camada de processamento é o núcleo lógico do sistema, onde os dados coletados pelos sensores são analisados e decisões são tomadas.
- Microcontrolador/Microprocessador:
- Responsável por processar os dados recebidos dos sensores e executar as lógicas de controle para acionar os atuadores.
-
Exemplos de hardware: ESP32, Raspberry Pi, Arduino ou outro dispositivo compatível.
-
Principais Funções:
- Aquisição de Dados: Leitura constante dos valores capturados pelos sensores.
- Processamento Local: Execução de algoritmos de controle e análise de dados para tomada de decisão em tempo real.
-
Gerenciamento de Comunicação: Controle da troca de informações com a Alexa e outros dispositivos conectados.
-
Sistemas Operacionais (se aplicável):
Caso o hardware utilizado seja um microprocessador (como o Raspberry Pi), pode ser implementado um sistema operacional embarcado (como Raspbian ou FreeRTOS) para gerenciar as tarefas.
3. Camada de Comunicação e Integração com a Alexa
Esta camada é responsável por permitir a interação do sistema com a API da Alexa e outros dispositivos conectados.
- Integração com a Alexa:
- A comunicação com a Alexa utiliza protocolos baseados em internet, como HTTP ou MQTT, para enviar e receber comandos.
-
A API da Alexa permite que o sistema receba comandos de voz do usuário e execute as ações correspondentes (por exemplo, ligar um dispositivo ou ajustar uma configuração).
-
Protocolo de Comunicação:
- Wi-Fi: Para garantir conectividade com a internet e comunicação com a Alexa.
-
MQTT: Um protocolo leve usado para troca de mensagens entre dispositivos IoT.
-
Serviços na Nuvem:
- Caso necessário, o sistema pode utilizar serviços em nuvem para armazenamento de dados, análise avançada ou integração com outros sistemas.
Fluxo de Dados na Arquitetura
- Os sensores capturam dados do ambiente e enviam essas informações para o microcontrolador.
- O microcontrolador processa os dados e toma decisões com base em regras predefinidas ou algoritmos embarcados.
- Se necessário, o microcontrolador envia comandos para os atuadores para realizar ações no ambiente.
- Simultaneamente, os dados processados podem ser enviados para a API da Alexa, permitindo que o usuário interaja com o sistema por meio de comandos de voz.
- A resposta da Alexa é recebida e processada pelo sistema, que executa as ações solicitadas pelo usuário.
Considerações de Desempenho e Escalabilidade
- Desempenho:
- A arquitetura foi projetada para minimizar latências, garantindo respostas rápidas a comandos do usuário e eventos do ambiente.
-
Algoritmos otimizados e gerenciamento eficiente dos recursos do hardware são fundamentais para o funcionamento do sistema.
-
Escalabilidade:
- A modularidade da arquitetura permite a adição de novos sensores, atuadores ou funcionalidades sem impacto significativo no sistema existente.
- A integração com a nuvem e a API da Alexa possibilita expansões futuras, como conectividade com outros serviços ou dispositivos IoT.
Essa explicação cobre os principais aspectos da arquitetura do sistema embarcado, detalhando suas camadas, componentes e fluxo de dados. Ela serve como um guia para o desenvolvimento e implementação do projeto.

Fonte: Gabriel Bertolazi.
Conclusão
Baseados nas pesquisas e estudos realizados, definimos a arquitetura de software como uma arquitetura assimétrica. Essa abordagem nos permite dividir o núcleo em partes fracionadas, onde podemos atribuir diferentes níveis de poder de processamento a cada uma delas. Essa divisão é especialmente necessária quando lidamos com funções que demandam pouco processamento, cuja monitoração não ocorre continuamente, em contraste com funções que exigem mais processamento, pois os dados são monitorados com uma frequência significativamente maior.
Tabela de Versionamento
Versão | Versão | Descrição | Responsável |
---|---|---|---|
1.0 | 27/11/2024 | Criação do artefato de arquitetura de software | Gabriel B. Bertolazi |