BLOG - Sistemas Embarcados
Este blog tem como autores os participantes do projeto Smart Campus e alunos das disciplinas: Sistemas Embarcados(Engenharia de Controle e Automação) e Plataformas de prototipação para Internet das Coisas
(Especialização Lato Sensu em Internet das Coisas). O objetivo é a divulgação de trabalhos em desenvolvimento no campus que envolvam a utilização de conceitos de sistemas embarcados, internet das coisas, telemetria e outras tecnologias para a resolução de problemas da indústria, meio ambiente, cidades inteligentes, fazendas inteligentes, ....
Coordenação: Prof. Marcos Chaves
Busca:
(SMQA) Sistema de Monitoramento de Qualidade da Água: Tecnologias e Técnicas para Implementação Eficiente
A qualidade da água é um recurso fundamental para a vida em nosso planeta, afetando diretamente a saúde humana e o equilíbrio dos ecossistemas aquáticos. Para garantir a preservação e o monitoramento contínuo desse recurso vital, torna-se essencial a utilização de sistemas eficientes de monitoramento da qualidade da água. Neste contexto, a integração de tecnologias e técnicas modernas, como microcontroladores, sensores, comunicação Wi-Fi, armazenamento de dados em um banco de dados e criação de um dashboard para visualização dos dados coletados, desempenha um papel crucial.
Tecnologias como MQTT e Node-RED desempenham um papel importante nesse processo. O MQTT é um protocolo de mensagens eficiente que facilita a troca de informações entre os dispositivos. Já o Node-RED é uma ferramenta de programação visual que simplifica a integração dos dispositivos e a criação de fluxos de automação personalizados. Com a utilização dessas tecnologias, fica muito mais fácil o monitoramento de forma online e ao vivo no que diz respeito a qualidade da água tomando por base o seu pH e o teor de cloro que existe naquela água.
Materiais e Métodos:
Node-RED: Utilizado como ferramenta de programação visual para criar os fluxos de automação.
AWS EC2: Serviço de computação em nuvem usado para hospedar o servidor Node-RED.
2 potenciômetros: Simulam os sensores (pH e teor de cloro).
ESP32: Microcontrolador que conecta os potenciômetros ao servidor Node-RED via Wi-Fi.
Procedimento:
1. Configuração do AWS EC2: Criar uma instância EC2, instalar o Node-RED e configurar um servidor MySQL.
2. Configuração dos potenciômetros: Conectar às portas adequados do ESP32 e ler os valores dos potenciômetros.
3. Comunicação via MQTT: Utilizar a biblioteca MQTT no ESP32 para enviar os dados dos potenciômetros para o servidor Node-RED.
4. Desenvolvimento dos fluxos no Node-RED: Criar fluxos para receber os dados MQTT do ESP32, processá-los e armazenar no banco de dados MySQL.
5. Armazenamento de dados no MySQL: Configurar o Node-RED para se conectar ao banco de dados MySQL e salvar os dados recebidos dos potenciômetros.
6. Testes e ajustes: Verificar o funcionamento correto dos fluxos, incluindo a correta inserção dos dados no banco de dados MySQL.
Utiliza-se também o uso do banco de dados MySQL. O Node-RED é configurado para se conectar ao MySQL e salvar os dados recebidos dos potenciômetros, permitindo o armazenamento e posterior consulta das informações coletadas. Isso possibilita o registro e histórico dos valores dos potenciômetros ao longo do tempo, além de deixar o histórico de data e hora.
Código:
Explicação:
As primeiras duas linhas do código incluem as bibliotecas necessárias para a conexão Wi-Fi (WiFi.h) e para a comunicação MQTT (PubSubClient.h).
As próximas linhas são referentes à definição das variáveis:
ssid: O nome da rede Wi-Fi à qual o ESP32 deve se conectar.
password: A senha da rede Wi-Fi.
mqttServer: O endereço do servidor MQTT que o ESP32 irá se conectar.
mqttPort: A porta do servidor MQTT.
mqttUser e mqttPassword: As credenciais de autenticação para se conectar ao servidor MQTT.
mqttTopicph, mqttTopicteordecloro: Os tópicos MQTT para os potenciômetros simulados.
Essas variáveis serão utilizadas posteriormente no código para estabelecer a conexão Wi-Fi, conectar ao servidor MQTT e para se inscrever nos tópicos MQTT relevantes.
A linha de baixo declara um objeto WiFiClient chamado espClient, que será usado para estabelecer a conexão Wi-Fi.
Em seguida, declara-se um objeto PubSubClient chamado client, que será usado para realizar a comunicação MQTT.
A função setup () é uma função especial do Arduino que é executada apenas uma vez no início do programa. Aqui, estamos iniciando a configuração inicial.
A função Serial.begin(115200) inicializa a comunicação serial com uma taxa de transmissão de 115200 bits por segundo. Isso permite que você se comunique com o ESP32 através do monitor serial para depuração e exibição de mensagens.
WiFi.begin(ssid, password) inicia a conexão Wi-Fi, utilizando o nome da rede (ssid) e a senha (password) definidos anteriormente.
Em seguida, há um loop que aguarda até que o ESP32 esteja conectado à rede Wi-Fi. Durante esse tempo, ele exibe pontos no monitor serial para indicar o progresso da conexão.
Após a conexão ser estabelecida, o endereço IP local do ESP32 é exibido no monitor serial.
A partir desse ponto, podemos prosseguir com o restante do código na função setup ().
Explicação:
A função loop() é o ponto de entrada do loop principal do programa. Nesse caso, começamos chamando client.loop(), que é uma função do PubSubClient responsável por manter a conexão MQTT ativa e processar qualquer mensagem recebida.7
Em seguida, lemos os valores dos sensores analógicos sensorPinph e sensorPinteordecloro, usando analogRead(). Essa função retorna um valor inteiro entre 0 e 4095, representando a leitura analógica do pino.8
Os valores lidos dos sensores são mapeados para faixas de valores específicas. Por exemplo, map (sensorValueph/4095)*14 mapeia o valor lido do sensor da sala (que varia de 0 a 4095) para um valor entre 0 e 14.
As variáveis ph e teordecloro armazenam os valores mapeados dos sensores.10
As variáveis phPayload e teordecloroPayload são criadas para armazenar os valores dos sensores como strings.11
Usando Serial.print() e serial.println(), exibimos no monitor serial os valores dos sensores para fins de depuração.12
Por fim, usamos a função client.publish() para enviar os valores dos sensores para os respectivos tópicos MQTT mqttTopicph e mqttTopicteordecloro. Os valores são convertidos para strings usando c_str () antes de serem publicados.13
O comando delay (1000) adiciona um atraso de 1 segundo antes de iniciar.
Este é o flow ultilizado para as logicas de cada cômodo da casa:
Nó "ui_gauge": Este nó exibe um medidor de ph em uma interface gráfica.
Nó "debug": Este nó é usado para depuração. Ele exibe mensagens no console do Node-RED.
Nó "ui_chart": Este nó exibe um gráfico de linha na interface gráfica para visualizar os dados ao longo do tempo.
Nó "ui_led": Este nó exibe um LED na interface gráfica para indicar o estado de um dispositivo.
Nó "function": Este nó executa uma função JavaScript personalizada. Pode ser usado para manipular e transformar mensagens.
Nó "ui_text": Este nó exibe um texto na interface gráfica.
Nó "comment": Este nó é usado para adicionar um comentário no fluxo para fins de documentação.
Nó "mqtt in": Este nó recebe mensagens de um tópico MQTT específico.
Nó "ui_group": Este nó agrupa outros nós relacionados visualmente em uma interface gráfica.
Nó "mqtt-broker": Este nó é configurado como o broker MQTT para se conectar a um servidor MQTT
Essa é a parte que lida com a leitura de dados de sensores e armazená-los em um banco de dados MySQL:
Os nós "mqtt in" estão configurados para receber os dados dos sensores nos tópicos "esp32/ph" e "esp32/teordecloro".
Os nós "function" ("ph" e "teordecloro") são responsáveis por extrair os valores dos sensores dos dados recebidos e adicioná-los à mensagem.
O nó "join" combina as mensagens recebidas dos três sensores em um único objeto.
O nó "delay" introduz um atraso de 5 segundos para permitir que os dados sejam coletados antes de serem inseridos no banco de dados.
O nó "function" ("INSERT") cria uma instrução SQL de inserção com os valores dos sensores e a data/hora atual.
O nó "mysql" executa a instrução SQL de inserção e armazena os dados no banco de dados MySQL.
O nó "inject" é usado para disparar uma consulta de exclusão dos dados da tabela "tempLog".
O nó "mysql" executa a instrução SQL de exclusão no banco de dados.
O nó "inject" é usado para disparar uma consulta de seleção dos últimos 10 dados da tabela "tempLog".
O nó "function" ("SELECT") cria a instrução SQL de seleção.
O nó "mysql" executa a instrução SQL de seleção e retorna os dados da tabela.
O nó "change" é usado para formatar os dados retornados em um formato adequado para exibição no gráfico.
O nó "ui_chart" exibe os dados formatados em um gráfico na interface do usuário.
[ID:164] Autor: - Criado em: 2023-06-25 19:57:09 - [ Compartilhar ]