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:
- 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.
- 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:
- Raspberry Pi 3B+ – Mini computador que servirá como unidade de processamento para coletar e exibir os dados do sensor.
- Sensor DHT11 (módulo de três pinos: GND, VCC e DATA) – Responsável por medir a temperatura e a umidade do ambiente. Neste projeto, utilizaremos a versão em módulo, que já inclui um resistor de pull-up embutido, facilitando a conexão.
- Fonte de alimentação compatível com o Raspberry Pi – Recomenda-se uma fonte de 5V e pelo menos 2,5A para garantir um funcionamento estável.
- Cartão microSD (com sistema operacional instalado) – O Raspberry Pi precisa de um cartão microSD com um sistema operacional, como Raspberry Pi OS, para rodar os scripts de monitoramento.
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:
- Baixe o Raspberry Pi Imager
- Acesse o site oficial: https://www.raspberrypi.com/software/
- Baixe e instale o Raspberry Pi Imager no seu computador.
- 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)
- Raspberry PI OS Lite (64-bit)
- Storage: Escolha o cartão microSD.
- Clique em “Next”, “Gravar” e aguarde a conclusão do processo.

- 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:
- Instalar o plugin CSV Data Source
- No Grafana, vá até Configuration > Plugins.
- Busque por CSV Data Source (marcusolsson-csv-datasource) e instale.
- 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:
- 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:
- Criar um Dashboard
- Vá até Dashboards > New Dashboard e clique em Add New Panel.
- 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
- 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!





