Skip to content
Célio Benjamim edited this page Jul 24, 2025 · 7 revisions

Relatório de Projeto: SenseClima

Resumo

Este relatório apresenta o desenvolvimento do SenseClima, um sistema embarcado criado para monitorar o ambiente. O foco foi na coleta periódica de temperatura e umidade usando o sensor DHT22 e no envio dessas informações para um servidor remoto via MQTT. O projeto usa o microcontrolador iMCP HTNB32L, que tem conectividade NB-IoT embutida. Como o dispositivo é alimentado por bateria, demos bastante atenção a estratégias de baixo consumo para aumentar sua duração. A forma como o hardware e o software foram construídos é modular, o que facilita tanto a manutenção quanto futuras expansões. Aqui, detalhamos a arquitetura do sistema e os módulos de software.

1. Introdução

Com a necessidade cada vez maior de soluções de monitoramento de condições ambientes que sejam autônomas e acessíveis, o desenvolvimento de sistemas embarcados eficientes e conectados se tornou essencial. O projeto SenseClima nasceu justamente para atender a essa demanda. Nossa proposta é um dispositivo que coleta e transmite dados climáticos de forma contínua e econômica em termos de energia. Nosso principal objetivo foi criar um sistema robusto, ideal para cenários de Internet das Coisas (IoT), onde a bateria de longa duração e a comunicação confiável são fundamentais.

Neste documento, vamos detalhar a fundo o sistema SenseClima. Abordaremos os componentes de hardware que utilizamos e como eles se integram, faremos uma análise detalhada dos módulos de software que foram desenvolvidos.

2. Arquitetura do Sistema

2.1. Componentes de Hardware e Integração

O SenseClima foi construído sobre uma base de hardware escolhida com cuidado, pensada para ter o melhor desempenho e economizar energia.

  • O Cérebro do Sistema (Microcontrolador Principal): Nosso componente central, que faz todo o processamento e a comunicação do SenseClima, é o iMCP HTNB32L. Ele é especial porque já vem com um modem NB-IoT integrado. Isso simplifica bastante o hardware e ajuda a gastar menos energia na comunicação celular. Escolhemos esse microcontrolador justamente para projetos de IoT que precisam de uma bateria que dure muito.

  • O Sensor Ambiental: Para coletar os dados do ambiente, usamos o sensor DHT22, que mede temperatura e umidade. A conexão com ele é bem simples, feita com apenas um pino GPIO, seguindo um protocolo de comunicação de um fio.

  • Como Ele se Conecta (Conectividade de Rede): Os dados que coletamos são enviados para a "nuvem" usando a rede NB-IoT. O modem NB-IoT já está dentro do HTNB32L, o que é ótimo para uma comunicação de longo alcance e baixo consumo. As informações são direcionadas para um servidor MQTT que fica no IP 131.255.82.115, na porta 1883.

  • A Energia do Sistema (Sistema de Alimentação): Para que o SenseClima funcione de forma autônoma, ele é alimentado por uma bateria recarregável (como uma Li-Ion de 3.7 V). Todos esses componentes são montados em uma placa de circuito impresso (PCB) personalizada. Essa placa tem um conector para a bateria e, se possível, um circuito para recarregá-la. É muito importante que a serigrafia (os desenhos na placa) dos pinos e sinais seja clara para facilitar a montagem e os testes.

Diagrama de Bloco da Arquitetura de Hardware do SenseClima [Image 1]

2.2. Arquitetura de Software

O firmware do SenseClima foi desenhado com uma arquitetura modular, escrito em C e rodando sobre o FreeRTOS. Essa forma de organizar o código facilita muito dividir as responsabilidades entre as partes e usar os recursos de forma mais inteligente, o que torna o sistema mais robusto e fácil de manter.

Para entender a organização dos arquivos e componentes de software, podemos visualizar a estrutura de diretórios do projeto:

├── Firmware/
│   ├── Applications/
│   │   └── SenseClima/          # Contém todo o código-fonte da nossa aplicação SenseClima
│   │       ├── Inc/             # Aqui ficam os arquivos de cabeçalho (.h), que definem as interfaces e estruturas de dados:
│   │       │   ├── HT_BSP_Custom.h        # Define funções para inicialização personalizada da placa.
│   │       │   ├── HT_DHT22.h             # Contém as definições e protótipos para interagir com o sensor DHT22.
│   │       │   ├── HT_GPIO_Api.h          # Oferece a API para operações gerais de Entrada/Saída (GPIO), como ler e escrever em pinos.
│   │       │   ├── HT_MQTT_Api.h          # Define a API para todas as funcionalidades MQTT (conectar, publicar, assinar).
│   │       │   ├── HT_Peripheral_Config.h # Centraliza as definições de configuração para diversos periféricos (UART, I2C, SPI, pinos).
│   │       │   ├── HT_SenseClima.h        # Define a estrutura da lógica principal da aplicação, incluindo estados e protótipos de funções.
│   │       │   └── main.h                 # Contém definições globais importantes, IDs de mensagens e configurações iniciais da tarefa principal.
│   │       ├── Src/             # Aqui ficam os arquivos-fonte (.c), que contêm a implementação das funcionalidades:
│   │       │   ├── HT_BSP_Custom.c        # Implementa as rotinas de inicialização e configuração específica da placa.
│   │       │   ├── HT_DHT22.c             # Contém a lógica detalhada para a leitura e controle do sensor DHT22.
│   │       │   ├── HT_GPIO_Api.c          # Implementa as funções para controle de GPIO (leitura e escrita de pinos).
│   │       │   ├── HT_MQTT_Api.c          # Contém a implementação completa das funcionalidades de conexão, publicação e assinatura MQTT.
│   │       │   ├── HT_SenseClima.c        # Implementa a lógica principal da aplicação, incluindo a máquina de estados (FSM), as threads de leitura do sensor e o gerenciamento de sono.
│   │       │   └── main.c                 # O ponto de entrada da aplicação, responsável pela inicialização do FreeRTOS e configuração da conectividade celular.
│   │       └── Makefile         # Um arquivo de script que gerencia o processo de compilação do projeto SenseClima.
│   │
│   └── SDK/                     # O Kit de Desenvolvimento de Software (SDK) do fabricante.
│       ├── PLAT/                # Componentes específicos da plataforma de hardware.
│       │   ├── os/              # Implementação do Sistema Operacional (FreeRTOS).
│       │   ├── driver/          # Drivers de baixo nível para o chip e a placa (ex: GPIO, UART).
│       │   ├── middleware/      # Camadas de software intermediárias.
│       │   │   ├── developed/   # Middleware desenvolvido pela HT Micron (ex: comunicação e IoT).
│       │   │   └── thirdparty/  # Bibliotecas de terceiros (ex: mbedTLS para segurança, lwIP para rede, MQTT para protocolo).
│       │   └── HT_API/          # APIs de abstração de hardware específicas da HT Micron.
│       └── ... (outros diretórios do SDK contendo bibliotecas pré-compiladas, ferramentas, etc.)

Essa estrutura hierárquica reflete a modularidade do firmware, onde a aplicação SenseClima interage com as camadas do SDK, que por sua vez acessam os drivers e o hardware subjacente.

3. Implementação dos Módulos

Cada módulo de software é como uma peça de um quebra-cabeça que, juntas, fazem o SenseClima funcionar. Cada um tem sua função específica para o sistema embarcado.

3.1. Módulo do Sensor DHT22 (HT_DHT22.h / HT_DHT22.c)

Este módulo é a ponte entre o software e o sensor DHT22. Ele cuida de configurar o pino GPIO para a comunicação e de todo o processo de ler os dados. A função DHT22_Read gerencia a comunicação com o sensor, mede os pulsos elétricos para entender os dados de temperatura e umidade e ainda verifica se os dados vieram corretos usando um checksum. Se a leitura for inválida, o sistema pode enviar "NaN" via MQTT para avisar que não há dados válidos.

Diagrama de Conexão Física do Sensor DHT22 [Image 3]

3.2. Módulo API GPIO (HT_GPIO_Api.h / HT_GPIO_Api.c)

Este módulo fornece um conjunto de funções básicas para interagir diretamente com os pinos de Entrada/Saída (GPIO) do microcontrolador. As principais funções permitem controlar o estado dos pinos (ligar/desligar) e ler seus níveis atuais.

3.3. Módulo API MQTT (HT_MQTT_Api.h / HT_MQTT_Api.c)

Este módulo é essencial para que o SenseClima se comunique com outros dispositivos e sistemas na Internet das Coisas (IoT). Ele cuida de toda a complexidade do protocolo MQTT, permitindo:

  • Conexão ao Broker: Estabelecer e gerenciar a conexão com o servidor MQTT. Isso inclui configurações como o endereço do servidor, a porta (com suporte a conexões seguras via TLS, se ativado), e dados de autenticação (ID do Cliente, Usuário, Senha).
  • Publicação de Mensagens: Enviar dados, como as leituras do sensor, para tópicos específicos no MQTT. A qualidade do serviço (QoS) pode ser ajustada para garantir a entrega da mensagem conforme a necessidade.
  • Inscrição em Tópicos: Permitir que o dispositivo receba mensagens de tópicos específicos. Uma função especial (callback) é ativada automaticamente quando uma nova mensagem chega, possibilitando o controle remoto ou o recebimento de informações de configuração.

3.4. Módulo BSP Personalizado (HT_BSP_Custom.h / HT_BSP_Custom.c)

O Módulo BSP (Board Support Package) Personalizado lida com as configurações de baixo nível e personalizações específicas para a placa HTNB32L-XXX. Suas responsabilidades incluem:

  • Configurar e gerenciar o clock da comunicação serial (UART), que é vital para depuração e outras interações.
  • Inicializar a Unidade de Proteção de Memória (MPU), o que melhora a segurança e a estabilidade do sistema.
  • Definir pinos específicos que podem "acordar" o dispositivo de modos de baixo consumo, permitindo que ele retome a operação.
  • Carregar configurações importantes que foram salvas na memória flash, garantindo que o dispositivo inicie sempre com os parâmetros corretos.

3.5. Módulo de Lógica da Aplicação SenseClima (HT_SenseClima.h / HT_SenseClima.c)

Este módulo é o coração do firmware, orquestrando todas as operações do dispositivo e implementando a lógica principal da aplicação. Ele é responsável por:

  • Gerenciar a Conectividade MQTT: Possui uma lógica interna para garantir que a conexão MQTT esteja sempre ativa, com tentativas automáticas de reconexão se houver alguma interrupção.
  • Aquisição e Publicação de Dados: Inicia uma tarefa dedicada (uma "thread" FreeRTOS, chamada HT_DhtThread) que periodicamente lê os dados do sensor DHT22. Esses dados são então publicados em tópicos MQTT padrão para temperatura e umidade. Se uma leitura for inválida, o sistema envia "NaN" via MQTT para sinalizar a ausência de dados válidos.
  • Controle Remoto de Intervalos: O dispositivo pode receber comandos via MQTT para ajustar a frequência das leituras e envios de dados. A função interval_manager é responsável por processar esses comandos.
  • Otimização de Energia: Para maximizar a duração da bateria, o SenseClima utiliza um modo de sono profundo (sleepWithMode). Após cada ciclo de coleta e envio de dados, o dispositivo entra nesse estado de baixo consumo e é "acordado" por um temporizador interno (RTC) no momento certo para o próximo ciclo. A conversão de tempos para milissegundos é feita de forma precisa.

Fluxo Operacional Detalhado do Firmware SenseClima [Image 5]

3.6. Módulo do Ponto de Entrada da Aplicação Principal (main.h / main.c)

Este módulo é o ponto de partida e a parte que coordena as tarefas de alto nível de todo o firmware do SenseClima. Suas responsabilidades incluem:

  • Inicializar os componentes essenciais do BSP (Board Support Package) e iniciar o sistema operacional FreeRTOS.
  • Configurar a porta serial (UART) para que as mensagens de depuração possam ser visualizadas.
  • Definir os parâmetros para a conexão com a rede celular NB-IoT, como o modo de rede e as configurações da APN (iot.datatem.com.br).
  • Registrar funções de "callback" para eventos importantes (URCs) que vêm do subsistema de rádio, como a prontidão do chip SIM, a qualidade do sinal da rede e o status de registro.
  • Criar e iniciar a tarefa principal da aplicação (HT_SenseClimaTask), que é o ponto de controle para a execução da lógica de negócios e o gerenciamento das outras tarefas da aplicação.

3.7. Módulo de Configuração de Periféricos (HT_Peripheral_Config.h)

Este arquivo de cabeçalho é central para as configurações detalhadas de hardware dos periféricos do microcontrolador. Ele é fundamental para que o firmware possa se adaptar e funcionar em diferentes variações da placa. As especificações incluem:

  • Os modos de operação (como polling, DMA ou interrupção) para as portas de comunicação serial (UART).
  • As configurações para interfaces como I2C e SPI.
  • Os mapeamentos de pinos (Pad IDs) e suas funções alternativas para GPIOs, o que oferece uma descrição completa de como os pinos da placa estão organizados.

Esquema de Pinagem da Placa HTNB32L-XXX [Image 6]

Clone this wiki locally