Integração de Software/Eletrônica
Histórico de Versões
Data | Responsável(eis) | Descrição | Versão |
---|---|---|---|
16/06/2024 | Rafael | Criação do documento | 0.1 |
22/06/2024 | Laura | Adição de conteúdo | 0.2 |
27/06/2024 | Rafael | Adiciona tecnologias utilizadas para a integração | 1.0 |
27/06/2024 | Rafael | Explica o funcionamento do json | 1.1 |
02/07/2024 | Lucas | Mudança no esqueleto do documento | 1.2 |
03/07/2024 | Lucas | Adição de diagrama de classes | 1.3 |
A integração com o software foi realizada por meio do firmware desenvolvido para coleta e processamento de dados dos sensores de CO2 e temperatura no código principal embarcado na ESP32. Para isso, Foi escolhido o Framework ArduinoIDE para implementar o software embarcado, por fornecer um ambiente compatível com o desenvolvimento em ESP32 e permitir o uso de C++.
O fim dessa integração ocorreu por meio do envio dos dados coletados via protocolo MQTT, definido na arquitetura desenvolvida, onde foram interpretados e armazenados adequadamente. Essa decisão foi tomada devido à sua eficiência em termos de largura de banda e consumo de energia, especialmente em redes de baixa qualidade ou instáveis.
Arquitetura da integração
Diagrama de classes
Figura 1: Diagrama de classes
Fonte: Autor
A classe Relay_system aciona ou desliga os relés do motor. A classe TemperatureSensor obtém os dados de temperatura no silo, a partir dos sensores de temperatura, e os salva. A classe CO2Sensor faz o mesmo, porém com o sensor de CO2. A classe Publisher recebe esses dados salvos e os envia, via MQTT, ao sistema de Software.
Envio de mensagens
As mensagens enviadas em JSON têm o seguinte formato:
{
"type": "temperature1",
"data": 32,
"timestamp": 2138934858.23231,
"silo": "silo-3"
}
O significado dos campos da mensagem é o seguinte:
- type: Nomeia qual o dado que está sendo enviado. Pode ter os valores "temperature1", "temperature2" ,"resistence" ou "co2".
- data: O valor retornado pelo sensor, ou seja, a concentração de CO2 ou a temperatura (a depender do sensor). Também pode ser o valor da resistência, se for o caso.
- timestamp: A hora em que o valor foi recuperado.
- silo: Identifica em qual silo se encontra a haste.
Tecnologias Utilizadas
PubSubClient
A lib PubSubClient
é utilizada na ESP32 para enviar mensagens via MQTT a um broker. No caso, o broker é o subsistema de software.
ArduinoJson
A lib ArduinoJson
foi escolhida por ser uma maneira fácil de converter os dados dos sensores para o formato JSON, que é o utilizado nas mensagens.
OneWire e DallasTemperature
A lib DallasTemperature
é utilizada para comunicação com o sensor de temperatura DS18B20
, e a lib OneWire
é uma dependência.
PID_V1_bc
A lib PID_v1_bc
é necessária para o controle da resistência utilizando o algoritmo PID.
MQTT
MQTT é um padrão OASIS para conectividade IoT. É um protocolo de mensagens de publish/subscribe extremamente simples e leve, projetado para dispositivos restritos e redes de baixa largura de banda, alta latência ou não confiáveis. Os princípios de design visam minimizar a largura de banda da rede e os requisitos de recursos do dispositivo, ao mesmo tempo que tentam garantir a confiabilidade e um grau de garantia de entrega. Esses princípios também tornam o protocolo ideal para o mundo da “Internet das Coisas” de dispositivos conectados e para aplicações móveis onde a largura de banda e a energia da bateria são valiosas (MQTT, 2022).
ArduinoIDE
O Arduino IDE (Integrated Development Environment) é uma plataforma de código aberto desenvolvida para facilitar a programação e upload de códigos para as placas Arduino e possui compatibilidade com as placas ESP32. A versão mais recente, Arduino IDE 2, oferece uma interface de usuário moderna e várias novas funcionalidades, como autocompletar código, um depurador embutido e a capacidade de sincronizar esboços com o Arduino Cloud (Arduino, 2024).
Essa IDE permite que os usuários escrevam, verifiquem e carreguem programas nas placas Arduino. Além disso, inclui ferramentas para gerenciar bibliotecas e pacotes de placas, simplificando o processo de configuração e desenvolvimento. Com esses recursos, a IDE visa aprimorar a eficiência e a experiência do usuário em projetos de hardware e software (Arduino, 2024).
Implementação da Integração
A integração de software com eletrônica foi realizada de maneira presecial com o código disponível no repositorio de embarcados.
Os alunos de Software e Eletrônica se reuniram presencialmente nos dias de aula de PI2 para testar se os dados coletados a partir dos sensores eram enviados corretamente via protocolo MQTT. Com o envio correto dos dados, eles podem ser visualizados no MINIO e, consequentemente, podem ser apresentados nas dashboards de monitoramento do Metabase. Isso garantiu que o firmware para coleta e tratamento de dados funcionasse de forma harmoniosa.
Problemas na implementação
- O firewall da UnB, para conectar com o broker do MQTT, impede de acesar o sevidor do projeto, por isso, é necessário acessar por uma rede externa.