Skip to content

Projeto de Subsistema de Software

O projeto de subsistema de software consiste no desenvolvimento de componentes específicos que integram um sistema maior, garantindo funcionalidades críticas e alinhamento com os objetivos gerais. Este documento descreve a abordagem adotada para projetar, implementar e documentar um subsistema voltado para a coleta, processamento e armazenamento de dados em tempo real, utilizando tecnologias como ESP-32, MQTT e PostgreSQL.

Arquitetura de Software

A arquitetura de software é a estrutura fundamental que define a organização de um sistema, incluindo os componentes principais, suas interações e os princípios que orientam seu design e evolução. Ela atua como uma base estratégica para guiar o desenvolvimento, a manutenção e a expansão do software, garantindo que ele atenda aos requisitos técnicos e de negócio.

Na prática, a arquitetura de software oferece uma visão holística do sistema, permitindo uma compreensão clara dos elementos que o compõem e de como eles colaboram para alcançar os objetivos do projeto. Entre os aspectos considerados estão a modularidade, a escalabilidade, a segurança, a eficiência e a capacidade de adaptação a futuras mudanças ou expansões.

Para este projeto, a arquitetura de software será desenvolvida de maneira incremental e colaborativa. Inicialmente, focaremos em estabelecer os principais componentes e suas interfaces, permitindo que a equipe visualize o sistema como um todo. Ao longo do tempo, detalharemos aspectos específicos e implementaremos ajustes conforme novas necessidades e desafios técnicos surgirem. Essa abordagem permitirá flexibilidade e uma maior adaptabilidade a mudanças ao longo do desenvolvimento do projeto.

O modelo de arquitetura inicial que usaremos está descrita com mais detalhes na arquitetura

Interface

Guia de estilo

O guia de estilo estabelece os padrões visuais e de usabilidade para a interface, garantindo consistência em cores, tipografia e elementos gráficos. Ele serve como referência para todos os componentes do design, proporcionando uma experiência unificada e intuitiva ao usuário. Mais detalhes sobre o guia de estilo podem ser encontrados no documento de Identidade visual.

Protótipo de alta fidelidade

O protótipo de alta fidelidade apresenta uma simulação visual e funcional da interface final, permitindo validar o design e coletar feedback antes do desenvolvimento. Ele inclui interatividade, layouts e todos os elementos essenciais da interface. Para conhecer o protótipo em detalhes, consulte a seção de prototipação no documento de Identidade visual.

Comunicação com a ESP-32

A ESP-32 será o núcleo de controle de todos os sensores e dispositivos que trabalharão na coleta de dados. Esses dados coletados serão enviados para a central de monitoramento/banco de dados via MQTT em tempo real.

Protocolo MQTT

O MQTT (Message Queuing Telemetry Transport) é um protocolo de comunicação leve e eficiente, projetado especificamente para dispositivos com recursos limitados. Ele utiliza o modelo de publicação/assinatura (publish/subscribe), onde dispositivos (clientes) enviam dados ao servidor (broker) em tópicos específicos.

Configuração do Broker MQTT

O broker será o responsável por agir como um servidor, gerenciando as mensagens publicadas e entregues entre os dispositivos. O broker que planejamentos utilizar é o Mosquitto

  • Mosquitto: Um broker MQTT de código aberto, ideal para uso local ou para pequenas redes.

Tópicos e Publicação

No protocolo MQTT, as mensagens são organizadas em tópicos, que funcionam como "canais" para as informações. A ESP-32, conectada aos sensores do dispositivo cadastrado, publica dados em tópicos específicos, permitindo que outros dispositivos ou sistemas acessem facilmente essas informações. Abaixo segue a ideia de organização dos tópicos e mensagens:

  • estacao: Publica todos os dados coletados pelo sistema

Esse tópico irá receber mensagens em um formato específico. Em nosso projeto, optaremos pelo JSON, segue abaixo o modelo inicial da mensagem que será publicada com as informações:

{
  "temperatura": {
    "descricao": "Temperatura da água coletada",
    "unidade": "°C",
    "valor": 22.5
  },
  "umidade": {
    "descricao": "Umidade do ar",
    "unidade": "%",
    "valor": 75
  },
  "pressao": {
    "descricao": "Pressão da água coletada",
    "unidade": "hPa",
    "valor": 1013
  },
  "velocidade_vento": {
    "descricao": "Velocidade do vento",
    "unidade": "m/s",
    "valor": 3.2
  },
  "nivel_agua": {
    "descricao": "Nível da água no reservatório",
    "unidade": "litros",
    "valor": 150
  },
  "status_reservatorio": {
    "descricao": "Status do reservatório (aberto/fechado)",
    "valores_possiveis": ["aberto", "fechado"],
    "valor": "aberto"
  },
  "status_chuva": {
    "descricao": "Status da chuva",
    "valores_possiveis": ["chovendo", "parou"],
    "valor": "chovendo"
  }
}

Consumo dos dados

Seguindo essa lógica, os dados já estarão prontos para serem consumidos pelos clientes assinantes.

Como os dados serão armazenados no DB (PostgreSQL)

Os dados coletados pela ESP-32 e enviados via MQTT serão processados e armazenados em um banco de dados PostgreSQL. A estrutura de armazenamento foi projetada para suportar consultas eficientes, garantindo a integridade e acessibilidade das informações. Abaixo, descrevemos a lógica de armazenamento:

  • Estrutura do banco de dados:
    O banco de dados terá tabelas dedicadas para armazenar as leituras de sensores, relacionando-as com o dispositivo de origem, data e hora da coleta, além de outras informações contextuais.

  • Tabelas principais:

  • leituras:
    Armazena as leituras de sensores.

    • Colunas:
    • id (SERIAL PRIMARY KEY): Identificador único da leitura.
    • data_hora (TIMESTAMP): Data e hora da coleta.
    • temperatura (NUMERIC): Valor da temperatura em graus Celsius.
    • umidade (NUMERIC): Valor da umidade em porcentagem.
    • precipitacao (NUMERIC): Precipitação acumulada em milímetros (mm).
  • dispositivos:
    Armazena informações sobre os dispositivos (ESP-32 ou outros).

    • Colunas:
    • id (SERIAL PRIMARY KEY): Identificador único do dispositivo.
    • nome (VARCHAR): Nome do dispositivo.
    • descricao (TEXT): Descrição do dispositivo (opcional).
    • localizacao (GEOGRAPHY): Coordenadas de localização do dispositivo.
  • Fluxo de armazenamento:

  • A mensagem JSON recebida via MQTT será processada por um cliente (ou microserviço).

  • O cliente extrairá as informações relevantes e realizará a inserção nas tabelas acima.
  • Um timestamp será adicionado automaticamente para cada registro, garantindo rastreabilidade.

  • Exemplo de query de inserção:

    INSERT INTO leituras (
      data_hora, temperatura, umidade, precipitacao
    ) VALUES (
      '2024-11-22 10:00:00', 22.5, 75, 12.3
    );
    

Software embarcado

Software embarcado é um tipo de software desenvolvido para rodar em dispositivos dedicados, com funções específicas e recursos limitados, como memória e processamento. Ele é projetado para controlar e monitorar hardware, garantindo que sistemas como sensores, atuadores e dispositivos de comunicação funcionem corretamente.

No nosso projeto, o software embarcado será responsável por controlar e integrar os diferentes componentes do sistema. Ele também gerenciará os sensores, além de enviar os dados para o restante do sistema utilizando o protocolo MQTT, descrito melhor na comunicação com ESP-32. Para o desenvolvimento, utilizaremos uma ESP-32 como microcontrolador principal, devido à sua capacidade de conexão Wi-Fi e Bluetooth.

O código será desenvolvido em linguagem C, utilizando o framework ESP-IDF (Espressif IoT Development Framework), que fornece APIs e bibliotecas otimizadas para gerenciamento de hardware e comunicação. O ESP-IDF permitirá que implementemos funcionalidades como leitura de sensores, gerenciamento de energia, envio de mensagens MQTT, e possíveis atualizações de firmware (OTA) de forma eficiente.

Referências

Tabela de versionamento

Versão Data Descrição Responsável
0.1 29/04/2024 Criação do documento x
0.2 08/11/2024 Adição da introdução sobre arquitetura de software Eurico Neto
0.4 09/11/2024 Adição da introdução sobre software embarcado Marcos Deus
0.5 09/11/2024 Adição da comunicação com a ESP Marcos Deus
0.6 20/11/2024 Adição da interface e completando os outros tópicos Marcos Deus
0.7 22/11/2024 Adição da seção "Como os dados serão armazenados no DB" Eurico Neto
0.8 22/11/2024 Adição introdução Eurico Neto
0.9 25/11/2025 Revisão final dos Artefatos Arthur José, Marcos Deus, Adne Moretti, Gabriel Moretti