Monitoramento de Temperatura e Umidade com Raspberry Pi e Grafana

Linux Utilidades

Monitoramento de Temperatura e Umidade com Raspberry Pi 3B+ e DHT11

1. Introdução

O monitoramento de temperatura e umidade é uma tarefa essencial em diversas áreas, desde a automação residencial até a gestão de data centers. Ter um sistema confiável para medir essas variáveis pode trazer benefícios como a otimização do consumo de energia, a prevenção de superaquecimento de equipamentos e o controle ambiental para plantas e animais.

Neste projeto, utilizaremos um Raspberry Pi 3B+ e um sensor DHT11 para capturar os dados de temperatura e umidade do ambiente. O Raspberry Pi atuará como o processador central, coletando as informações do sensor e permitindo a visualização dos dados em tempo real por meio de uma interface web. Para interface Web Usaremos o Grafana.

Aplicações Práticas

Este projeto pode ser aplicado em diversas situações, incluindo:

  • Automação Residencial: Monitoramento do clima dentro de casa para controle automático de ar-condicionado e aquecedores.
  • Agricultura: Controle da umidade e temperatura em estufas para otimizar o crescimento de plantas.
  • Data Centers: Monitoramento ambiental para garantir a segurança dos servidores e equipamentos.
  • Monitoramento Industrial: Controle de temperatura e umidade em processos de produção sensíveis a variações climáticas.

Descrição do Raspberry Pi 3B+

O Raspberry Pi 3B+ é um mini computador de baixo custo e alta versatilidade, ideal para projetos de IoT e automação. Ele possui um processador Quad-Core, conexão Wi-Fi integrada e diversos pinos GPIO, permitindo a conexão direta com sensores e outros dispositivos eletrônicos.

Descrição do Sensor DHT11

O DHT11 é um sensor digital de temperatura e umidade, amplamente utilizado devido ao seu baixo custo e facilidade de uso. Ele mede a temperatura ambiente com uma precisão de ±2ºC e a umidade relativa do ar com uma margem de erro de ±5%.

Existem dois modelos principais do DHT11:

  1. DHT11 em módulo: Possui um pequeno circuito de controle e um resistor pull-up integrado, facilitando sua conexão direta ao Raspberry Pi. Usaremos este modelo neste projeto.
  2. DHT11 standalone (sem módulo): Versão mais básica, requer um resistor pull-up externo para funcionar corretamente.

O sensor DHT11 comunica-se com o Raspberry Pi por meio de um protocolo digital simples, utilizando apenas um pino de dados. Embora sua precisão não seja tão alta quanto a de sensores mais avançados como o DHT22, ele é uma excelente opção para projetos didáticos e aplicações não críticas.

No próximo passo, veremos quais materiais são necessários para montar este projeto e como preparar o ambiente para a coleta de dados.

2. Materiais Necessários

Para realizar este projeto de monitoramento de temperatura e umidade, você precisará dos seguintes componentes:

Opcionalmente, pode ser interessante ter um case com ventilação para o Raspberry Pi e cabos jumper para facilitar a conexão com o sensor.

3. Preparação do Ambiente

Antes de iniciarmos a coleta de dados do sensor DHT11, é necessário preparar o ambiente no Raspberry Pi. Isso envolve a instalação do sistema operacional, a configuração da rede e a atualização do sistema.

3.1. Instalando o Raspberry Pi OS

O primeiro passo é instalar o Raspberry Pi OS no cartão microSD. Para isso:

  1. Baixe o Raspberry Pi Imager

  2. Grave o sistema operacional no microSD

    • Insira o cartão microSD no seu computador.
    • Abra o Raspberry Pi Imager e selecione:

      • Raspberry PI Device: RASPBERRY PI 3
      • Operating System: Escolha Raspberry PI OS (other)

        1. Raspberry PI OS Lite (64-bit)

      • Storage: Escolha o cartão microSD.
      • Clique em “Next”, “Gravar” e aguarde a conclusão do processo.

  1. Primeira inicialização

    • Insira o cartão microSD no Raspberry Pi e ligue o dispositivo.
    • Se estiver utilizando um monitor e teclado, siga as instruções na tela para finalizar a configuração.

3.2. Conectando o Raspberry Pi à Rede

O Raspberry Pi pode ser conectado via Wi-Fi ou cabo Ethernet.

Wi-Fi: No Raspberry Pi OS Lite, use o comando:

#sudo raspi-config

  •  Vá até System Options → Wireless LAN, escolha o país e insira o SSID e a senha do Wi-Fi.
  • Ethernet: Se estiver usando um cabo de rede, a conexão será estabelecida automaticamente.

Para testar a conectividade, execute:

#ping google.com

Se receber respostas, a conexão está funcionando corretamente.

3.3. Atualizando o Sistema

Após a conexão com a internet, é essencial atualizar os pacotes do sistema para garantir a melhor compatibilidade. Execute os seguintes comandos:

#sudo apt update && sudo apt upgrade -y

Isso garantirá que o sistema esteja atualizado e pronto para instalar as dependências necessárias para o sensor DHT11.

4. Conexão do DHT11 ao Raspberry Pi

Agora que o Raspberry Pi está configurado, vamos conectar o sensor DHT11 e entender o funcionamento dos pinos GPIO utilizados.

4.1. Esquema de Ligação

O sensor DHT11 usado neste projeto é um módulo de três pinos, que já possui um resistor pull-up embutido, facilitando a conexão com o Raspberry Pi.

A ligação utilizada no ambiente de teste foi a seguinte:

Pino do DHT11 Pino do Raspberry Pi Função
VCC PIN01 (3.3V) Alimentação do sensor
GND PIN09 (GND) Terra (ground)
DATA PIN07 (GPIO04) Comunicação de dados

⚠️ Observação: Alguns módulos DHT11 funcionam com 5V, mas o Raspberry Pi trabalha com lógica de 3.3V. Como estamos usando um módulo com resistor pull-up embutido, podemos conectar diretamente ao GPIO. Caso esteja utilizando um sensor DHT11 de quatro pinos (sem módulo), será necessário adicionar um resistor pull-up de 10kΩ entre os pinos VCC e DATA para garantir uma comunicação estável.

4.2. Explicação dos Pinos GPIO

O Raspberry Pi possui diversos pinos GPIO (General Purpose Input/Output), que permitem a comunicação com sensores e dispositivos externos.

No nosso caso, estamos utilizando:

  • GPIO04 (PIN07) → É um pino digital que será usado para receber os dados do DHT11.
  • 3.3V (PIN01) → Fornece energia ao sensor.
  • GND (PIN09) → Fecha o circuito elétrico.

4.3. Ilustração da Conexão

Você pode adicionar uma imagem ilustrando a conexão, como um diagrama do Raspberry Pi com o sensor DHT11 ligado aos pinos corretos. Isso ajudará os leitores a entenderem melhor o processo.


Agora que o sensor está conectado, podemos seguir para a instalação das bibliotecas necessárias e criação do código Python para capturar os dados de temperatura e umidade.

5. Instalação das Dependências

Agora que o sensor DHT11 está fisicamente conectado ao Raspberry Pi, precisamos instalar as bibliotecas necessárias para comunicação com o sensor e testar a leitura dos dados.

5.1. Instalação das Bibliotecas

Antes de prosseguir, atualize o sistema operacional e instale as dependências necessárias. Execute os seguintes comandos no terminal do Raspberry Pi:

#sudo apt-get update
#sudo apt-get upgrade
#sudo apt-get install libgpiod2
#sudo apt-get install python3-venv

Agora, crie um ambiente virtual Python e instale as bibliotecas específicas:

#python3 -m venv myenv
#source myenv/bin/activate
#pip3 install gpiod
#pip3 install adafruit-circuitpython-dht
#deactivate

5.2. Testando a Comunicação com o Sensor

Após instalar as dependências, vamos criar um script Python para testar a leitura dos dados do sensor DHT11.

Crie um novo arquivo chamado sensor.py:

#vi sensor.py

E adicione o seguinte código:

#!/usr/bin/env python3
import sys
import os
# Ativar o Virtual Environment
VENV_PATH = “/home/thiago/myenv”
sys.path.insert(0, VENV_PATH + “/lib/python3.11/site-packages”)
os.environ[“PYTHONPATH”] = VENV_PATH + “/lib/python3.11/site-packages”
import time
import board
import adafruit_dht
# Configuração do sensor
dhtDevice = adafruit_dht.DHT11(board.D4)
# Cabeçalho HTTP necessário para CGI
print(“Content-type: text/plainn”)
try:
    # Leitura do sensor
    temperature_c = dhtDevice.temperature
    humidity = dhtDevice.humidity
    if temperature_c is not None and humidity is not None:
        print(f”Temperatura: {temperature_c:.1f}°CnUmidade: {humidity}%”)
    else:
        print(“Erro ao ler os dados do sensor”)
except Exception as e:
    print(f”Erro: {e}”)

Salve o arquivo e execute o script para verificar se o sensor está respondendo corretamente:

#python3 sensor.py

Se tudo estiver funcionando corretamente, a saída será semelhante a esta:

Content-type: text/plain
Temperatura: 24.1°C
Umidade: 38%

Caso ocorra algum erro, verifique se o sensor está corretamente conectado e se as bibliotecas foram instaladas corretamente.


Agora que conseguimos ler os dados do sensor, podemos avançar para a exibição das medições em uma interface web simples! 🚀

6. Exibindo os Dados na Web com Grafana

Agora que conseguimos capturar os dados de temperatura e umidade, vamos exibi-los de forma gráfica usando o Grafana. Ele permitirá visualizar as medições em tempo real e acompanhar o histórico dos dados.

6.1. Instalando o Grafana

Para instalar o Grafana no Raspberry Pi, execute os seguintes comandos:

#sudo apt-get install -y apt-transport-https software-properties-common wget
#sudo mkdir -p /etc/apt/keyrings/
#wget -q -O – https://apt.grafana.com/gpg.key | gpg –dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
#echo “deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main” | sudo tee -a /etc/apt/sources.list.d/grafana.list
#echo “deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com beta main” | sudo tee -a /etc/apt/sources.list.d/grafana.list

Atualize a lista de pacotes e instale o Grafana:

#sudo apt update
#sudo apt install grafana

Ative e inicie o serviço:

#sudo systemctl enable grafana-server
#sudo systemctl start grafana-server

Agora, acesse o Grafana no navegador, utilizando o IP do Raspberry Pi na porta padrão 3000:

http://<IP_DO_RASPBERRY>:3000

O usuário e senha padrão são:

Usuário: admin
Senha: admin

Será solicitado que altere a senha no primeiro login.


6.2. Configuração do Data Source CSV

Para utilizar um arquivo CSV como fonte de dados no Grafana, siga os passos:

  1. Instalar o plugin CSV Data Source

    • No Grafana, vá até Configuration > Plugins.
    • Busque por CSV Data Source (marcusolsson-csv-datasource) e instale.

  2. Liberar o modo Local Mode para CSV

Edite o arquivo de configuração:

sudo nano /etc/grafana/grafana.ini

Encontre a seção [plugin.marcusolsson-csv-datasource] e adicione:

allow_local_mode = true

Salve o arquivo e reinicie o serviço do Grafana:

sudo systemctl restart grafana-server


6.3. Criando o Arquivo CSV para Coleta de Dados

Crie um diretório para armazenar os dados do sensor:

sudo mkdir -p /etc/grafana/csv/

Crie o arquivo CSV e defina as permissões:

sudo -i

echo ‘data;temperatura;umidade’ > /etc/grafana/csv/temperatura.csv

sudo chown -R root:grafana /etc/grafana/csv/

chmod 664 /etc/grafana/csv/temperatura.csv

exit

Agora, no Grafana:

  1. Adicione um Data Source CSV

    • Vá até Configuration > Data Sources.
    • Clique em Add Data Source e selecione CSV.
    • Configure os seguintes parâmetros:

      • Name: CSV_TEMPERATURA
      • Path: /etc/grafana/csv/temperatura.csv

    • Salve e teste a conexão.


6.4. Atualização Automática dos Valores Coletados

Para coletar e armazenar automaticamente os dados do sensor, crie um script shell:

vi /home/myuser/sensor.sh

Adicione o seguinte código:

#!/bin/bash

DATA=$(date +%Y-%m-%d %H:%M:%S)

TEMPERATURA=$(python3 sensor.py |

egrep “Temperatura|Umidade” |

tr ‘n’ ‘;’ |

sed ‘s/Temperatura: //g’ |

sed ‘s/Umidade: //g’ |

sed ‘s/°C//g’ |

sed ‘s/%//g’)

if [ “x$TEMPERATURA” != “x” ]; then

  echo “$DATA;$TEMPERATURA” >> /etc/grafana/csv/temperatura.csv

fi

Dê permissão de execução ao script:

chmod +x /home/myuser/sensor.sh

Agora, configure uma tarefa no Crontab para executar esse script a cada minuto:

sudo crontab -e

Adicione a linha:

* * * * * /home/myuser/sensor.sh

Isso garantirá que o sensor seja lido a cada minuto e os valores sejam adicionados ao CSV.


6.5. Limpeza de Dados Antigos

Como a coleta ocorre a cada minuto, o arquivo pode crescer muito. Para manter apenas um dado por hora para medições com mais de 90 dias, crie um script para filtragem:

vi /home/myuser/limpa_dados.sh

Adicione o seguinte código:

#!/bin/bash

# Definição dos arquivos temporários

CSV=”/etc/grafana/csv/temperatura.csv”

LOGTMP=”/tmp/MAIOR90.tmp”

TMP_CSV=”/tmp/temperatura.tmp”

# Remove o arquivo temporário caso já exista

rm -rf “$LOGTMP”

# Define a data limite (90 dias atrás)

DATA_LIMITE=”$(date -d ’90 days ago’ ‘+%Y-%m-%d %H:%M:%S’)”

# Filtra os logs mais antigos que 90 dias, mantendo apenas um registro por hora

awk -v data_limite=”$DATA_LIMITE” ‘$0 < data_limite’ “$CSV” | cut -d’:’ -f1 | sort -n | uniq | while read MAIOR90; do

    grep “$MAIOR90” “$CSV” | tail -n +2 >> “$LOGTMP”

done

# Se o arquivo temporário não estiver vazio, filtra os registros e sobrescreve o CSV original

if [ -s “$LOGTMP” ]; then

    grep -v -F -f “$LOGTMP” “$CSV” > “$TMP_CSV” && mv “$TMP_CSV” “$CSV”

fi

Dê permissão de execução:

chmod +x /home/myuser/limpa_dados.sh

Adicione uma tarefa no Crontab para executar o script uma vez por dia:

sudo crontab -e

Adicione a linha:

0 3 * * * /home/myuser/limpa_dados.sh

Isso garantirá que a limpeza seja feita diariamente às 3h da manhã.


6.6. Criação do Painel no Grafana

Agora, configure o painel no Grafana:

  1. Criar um Dashboard

    • Vá até Dashboards > New Dashboard e clique em Add New Panel.

  2. Configurar os campos

    • Data Source: CSV_TEMPERATURA
    • Delimiter: Semicolon
    • Decimal Separator: Point
    • Header: Checked
    • Ignore Unknown Fields: Checked
    • Time Zone: America/Sao_Paulo
    • Field data: Type: Time
    • Field temperatura: Type: Number
    • Field umidade: Type: Number

  3. Salvar e visualizar os gráficos! 🎉


Agora você tem um sistema completo que captura, armazena e exibe dados de temperatura e umidade do sensor DHT11 no Raspberry Pi, utilizando o Grafana! 🚀🔥

9. Conclusão e Próximos Passos

Neste projeto, configuramos um sistema de monitoramento de temperatura e umidade usando um Raspberry Pi, um sensor DHT11 e o Grafana para visualização dos dados coletados. Os dados são armazenados em um arquivo CSV e atualizados a cada minuto via cron.

Possíveis Melhorias

  • Criar alertas para temperaturas extremas.
  • Implementar envio de notificações via Telegram ou e-mail.
  • Expandir para outros sensores, como pressão atmosférica.

Links Úteis

  • Documentação do Grafana
  • Repositório do Plugin CSV
  • Adafruit DHT Python Library

Com essas melhorias, o projeto pode se tornar um sistema completo de monitoramento ambiental!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.