Projeto de sensor analógico/digital em microcontrolador utilizando comunicação mqtt.
Implementando de um protótipo de sistema de sensoriamento genérico de uma plataforma baseada na NodeMCU para confecção das unidades de sensoriamento modular comandado por um Single Board Computer (SBC), capaz de controlar o acionamento de um conjunto variável de sensores, assim como monitorar o seu funcionamento, de forma automatizada por meio de uma comunicação MQTT
A solução desenvolvida foi arquitetada da seguinte maneira:
stateDiagram-v2
[*] --> RealTimeUpdate
[*] --> Publishing
State RealTimeUpdate {
TempoReal: Leituras em tempo real
note left of TempoReal
Exibição em tempo real das
leituras dos sensores
end note
[*] --> TempoReal
TempoReal --> Histórico: Botão 1
Histórico: Histórico
note right of Histórico
Histórico das ultimas leituras do sensor
exibido no display no momento do
pressionar do botão 1
end note
Histórico --> TempoReal: Botão 2
}
State Publishing {
[*] --> Publicações
Publicações: Publicações
note right of Publicações
- Requisições dos valores dos sensores
- Publicação dos históricos de leituras
e velocidade de atualização
end note
}
As mensagens enviadas pela SBC aos topicos de historico:
- analogic/history
- 5/history
- 16/history
são formatadas como strings em formato JSON((JavaScript Object Notation)). Como por exemplo:
{"number_of_items": 10,"max_lenght": 10,"values": [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]}
Segue, em typescript, a descrição de cada atributo da resposta
/**
* Interface (em typescript) dos dados enviados nos
* topicos dos historicos de leituras dos sensores digitais
* e analogico
*/
export interface history {
/**
* Quntidade de leituras atualmente no historico.
*/
number_of_items: number
/**
* Quantidade maxima de leituras no historico
*/
max_lenght: number // 10 leituras atualmente
/**
* Lista dos ultimos valores lidos do sensor.
* O primeiro valor da lista representa a leitura mais recente
*/
values: number[]
}
Por padrão, number_of_items sempre tem no minimo tamanho 1, pois na SBC cada lista é inicializada com 1 leitura de valor zero. ou seja:
values: number[] = [ 0 ];
Abaixo segue o que foi utilizado na criação deste projeto:
- GCC (GNU Compiler Collection) - O GNU Compiler Collection é um conjunto de compiladores de linguagens de programação produzido pelo projecto GNU.
- ESP8266 SDK para Arduino - Este projeto traz suporte ao chip ESP8266 para o ambiente Arduino.
- Arduino IDE v1.8 - O Arduino Software (IDE) de código aberto facilita a escrita de código e o upload para a placa. Este software pode ser usado com qualquer placa Arduino.
Para conseguir rodar o projeto, siga os passos abaixo.
Antes de seguirmos, é preciso que você tenha o ambiente configurado para criar e testar aplicações em C, bem como o ambiente para desenvolvimento React Native configurado (para compilar o IHM_Remoto).
- Configure o ambiente react native seguindo a documentação oficial
- Configure o ambiente react native for windows (para fazer build da aplicação desktop para windows) seguindo a documentação oficial
- Certifique-se de ter o gerenciador de dependencias Yarn instalado na versão 1. instruções de instalação
No ambiente da SBC (considerando a Raspberry Pi rodando um sistema baseado no Debian) caso não tenha o tooling to GCC, execute:
$ sudo apt install build-essential
Instale também na SBC o Paho MQTT e WiringPI
- Instale a IDE do Arduino na versão 1.8 de acordo com a documentação oficial
- Abra as preferências da IDE e adicione o código abaixo, assim como na imagem e pressione o botão de OK
https://arduino.esp8266.com/stable/package_esp8266com_index.json
- Em seguida, abra o gerenciador de placas da IDE e instale o Generic ESP8266 Module na versão 3.0.2, como na imagem:
- Em seguida, abra o gerenciador de bibliotecas e instale a biblioteca PubSubClient by Nick O'Leary, como na imagem:
A estrutura de arquivos está da seguinte maneira:
ESP8266_ES
├── NodeMCU/
│ ├── NodeMCU.cpp
├── Raspberry/
│ ├── display.h
│ ├── makefile
│ ├── display.o
│ └── main.c
├── .gitignore
└── README.md
Serão explicados os arquivos e diretórios na seção de Edição.
- Abra a ide do Arduino
- Abra o menu: Ferramentas > Placa e selecione a placa NodeMCU 1.0
- Conecte a NodeMCU ao computador via usb
- Copie o diretorio NodeMCU para dentro do diretorio de projetos do arduino, abra a IDE e abra o arquivo NodeMCU.ino. Copile e carrege o codigo na ESP8266
- Selecione a porta no menu: Ferramentas > Porta
- Carregue o codigo na placa (Ctrl + u)
- Na SBC, faça clone do projeto utilizando o comando e navegue para o diretório raiz do projeto:
$ git clone https://github.com/DanielSRS/mcute
$ cd mcute
- Navegue até o diretório que contém o código a ser executado na SBC e faça build:
cd IHM_Local
make mock
make all
- Execute a aplicação
make run
- Na maquina onde há a configuração do ambiente de desenvolvimento React Native:
git clone https://github.com/DanielSRS/mcute
cd mcute
- Navegue até o diretório que contém o código a das aplicações Android, IOS, Web e Windows e faça build:
cd IHM_Remote
yarn
- Execute a aplicação web
yarn web
- Ou a aplicação android
yarn android
- Ou a aplicação IOS
yarn ios
- Ou a aplicação windows
yarn windows
Nesta seção haverão instruções caso você queira editar o projeto, explicando para que os diretórios são utilizados e também os arquivos de configuração.
-
NodeMCU - Após execução do projeto, o analizador léxico irá gerar arquivos de saída neste diretório contendo as informações processadas em cada arquivo de entrada.
- NodeMCU.cpp - Codigo da aplicação executada na NodeMCU responsável por interpretar os comandos enviados pela SBC, realizar a leitura dos sensores e enviar atraves da UART as informações solicitadas
-
IHM_Local - Diretório contendo todos os arquivos da aplicação executada na SBC (Raspberry Pi),
-
main.c - Codigo da aplicação executada na SBC e responsável pelo controle da NodeMCU enviando comandos, lendo e exibindo as informações coletadas.
-
makefile - Arquivo de configuração makefile com as instruções de build do projeto.
-
display.h - Arquivo de cabeçalho da biblioteca de comunicação com o display 16x2.
-
display.o - Biblioteca para comunicação com o display 16x2.
-
-
.gitignore - Arquivo de configurção do git contendo informções de arquivos que não devem ser versionados junto com o codigo fonte;
-
README.md - Este arquivo. Aqui é feito a documentação basica do projeto com instruções de instalação, configuração e execução.
-
Ainda no diretório raiz, navegue para o diretorio Raspberry:
cd IHM_Local
-
Faça o build da aplicação
make mock make all
-
Faça o build e rode a aplicação
make run
-
Execute manualmente a aplicação informando o sensor analógico e dois digitais conectados
$ sudo ./Rasp -analogic -d."D0".16 -d."D1".5
ESP8266 Arduino Core Documentation
Documentação de Referência da Linguagem Arduino
Alexandre Silva Caribé |
Alisson Bonfim Silva |
Daniel Santa Rosa Santos |
Joanderson Santos |
---|
- Quaisquer dúvidas, sugestões ou problemas que encontrar, fique livre para abrir uma issue.
- Se quiser contribuir ajustando o codigo, implementando novas funcionalidas ou corrigindo bugs, faça um fork do projeto, faça as alterações nescessárias como descrito na seção de Edição e abra um pull request