-
Notifications
You must be signed in to change notification settings - Fork 0
Home
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.
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.
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 porta1883. -
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.
[Image 1]
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.
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.
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.
[Image 3]
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.
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.
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.
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.
[Image 5]
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.
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.
[Image 6]