Construa Monitor de Temperatura Doméstico com Raspberry Pi, MCP9808, InfluxDB e Grafana
Após adquirir um Raspberry Pi e revisar o Guia do Usuário do Raspberry Pi de Eben Upton — especialmente as seções GPIO — embarquei no meu primeiro projeto: um sistema de monitoramento de temperatura doméstico. Este post detalha a iteração inicial usando Raspberry Pi, breakout Adafruit MCP9808, um velho Mac Mini, InfluxDB, Grafana, Python e o supervisor de processos runit.
Hardware do Sensor
Para o sensor de temperatura selecionei o breakout board MCP9808 da Adafruit. Minha escolha foi motivada por:
- Interface I²C nativa — os pinos GPIO 3 (SDA) e 5 (SCL) do Pi suportam o barramento necessário.
- Ampla faixa de tensão (2,7 V–5,5 V) — compatível com trilhos de 3,3 V e 5 V do Pi.
- Custo-benefício — abaixo de $5 USD, ideal para primeiro projeto de iniciante.
Montagem do Circuito
A placa MCP9808 chega praticamente montada; a única solda necessária é fixar o header de 8 pinos. Usei um breakout GPIO e protoboard para conectar o Pi ao sensor, simplificando a fiação e facilitando ajustes futuros. As conexões essenciais são:
- Alimentação (VDD)
- Terra (GND)
- Dados (SDA)
- Clock (SCL)
Os pinos restantes — usados para seleção de endereço e alerta — ficaram desconectados nesta configuração de dispositivo único.
Armazenamento de Dados
Capturar dados ao longo do tempo permite análise de tendências e correlação com eventos externos. Escolhi o InfluxDB por seu foco em séries temporais e linguagem de consulta intuitiva. O banco roda em um Mac Mini início 2009 (OS X 10.10) via Homebrew:
brew install influxdb
Configure o Banco InfluxDB
Após instalação, criei um banco e um usuário dedicado via console web (porta padrão 8083). Também configurei banco chamado mcp9808_test para armazenar leituras do sensor.
Configuração do Raspberry Pi
Habilite I²C
O Pi não carrega módulos I²C por padrão. Adicione estas linhas a /etc/modules e reinicie:
i2c-bcm2708
i2c-dev
Verifique se o sensor é detectado com:
sudo i2cdetect 1
Software do Sensor
Usei o wrapper Python MCP9808 da Adafruit, que também traz a camada de abstração I²C.
Instale Dependências de Build
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus
Instale o Wrapper Adafruit MCP9808
cd ~/Downloads
git clone https://github.com/adafruit/Adafruit_Python_MCP9808
cd Adafruit_Python_MCP9808
sudo python setup.py install
Ler, Reportar, Repetir
Abaixo está o script poll.py que lê temperatura a cada minuto e grava o valor no InfluxDB:
#!/usr/bin/python
import time
import Adafruit_MCP9808.MCP9808 as MCP9808
from influxdb import InfluxDBClient
# Prepara payload para InfluxDB
def temperature_data(degrees_c):
return [{
'points': [[c_to_f(degrees_c)]],
'name': 'Temperature Readings',
'columns': ['degrees_f']
}]
# Converte Celsius para Fahrenheit
def c_to_f(c):
return c * 9.0 / 5.0 + 32.0
# Inicializa sensor
sensor = MCP9808.MCP9808()
sensor.begin()
# Intervalo de captura em segundos
capture_interval = 60.0
# Conecta ao InfluxDB (substitua placeholders por valores reais)
influxClient = InfluxDBClient('', 8086, 'mcp9808', '', 'mcp9808_test')
# Loop contínuo
while True:
temp_c = sensor.readTempC()
print('Temperature {0:0.3} F'.format(c_to_f(temp_c)))
influxClient.write_points(temperature_data(temp_c))
time.sleep(capture_interval)
Execute o script como root para acessar pinos GPIO:
sudo python /path/to/poll.py
Supervisão de Processo com runit
Para garantir que poll.py permaneça vivo após reinicializações e ciclos de energia, configurei o runit como supervisor de processo. Passos detalhados estão na documentação original do projeto.
Resumo
Com sensor, banco de dados e stack de monitoramento no lugar, você agora tem um logger de temperatura doméstico confiável e de baixo custo. Use o Grafana para visualizar dados, configurar alertas e obter insights acionáveis sobre seu ambiente.
Processo de manufatura
- Construa um Registrador de Temperatura com Raspberry Pi e Sensor I2C de $5
- Perfilamento de Temperatura Preciso no Raspberry Pi com Python, SQLite e LabVIEW
- Conecte Múltiplos Sensores DS18B20 1-Wire ao Raspberry Pi para Monitoramento Preciso de Temperatura
- Monitor de Temperatura e Umidade em Rede com Raspberry Pi – Guia DIY de Configuração
- Como Ler Temperatura com DS18B20 no Raspberry Pi 2
- Monitoramento Profissional de Temperatura com Raspberry Pi e DS18B20
- Medição de Temperatura no Raspberry Pi com Sensores Maxim 1‑Wire e Bridge I2C DS2482
- Sensor de Temperatura Infravermelho TMP006 com Raspberry Pi: Biblioteca Python e Guia de Configuração
- Construa um Sensor de Temperatura Remoto com Raspberry Pi e Python – Guia Passo a Passo
- Construa Estação Meteorológica Raspberry Pi que Envia Dados Diários por Email