Monitor de temperatura casero con Raspberry Pi, MCP9808, InfluxDB y Grafana
Tras adquirir una Raspberry Pi y revisar la guía de usuario de Eben Upton —especialmente las secciones GPIO— emprendí mi primer proyecto: un sistema de monitorización de temperatura doméstica. Este post detalla la iteración inicial usando Raspberry Pi, breakout Adafruit MCP9808, un viejo Mac Mini, InfluxDB, Grafana, Python y el supervisor de procesos runit.
Hardware del sensor
Para el sensor de temperatura seleccioné el breakout MCP9808 de Adafruit. Mi elección se basó en:
- Interfaz I²C nativa – los pines GPIO 3 (SDA) y 5 (SCL) de la Pi soportan el bus requerido.
- Amplio rango de voltaje (2,7 V–5,5 V) – compatible con rails de 3,3 V y 5 V de la Pi.
- Económico – bajo 5 USD, ideal para primer proyecto de principiante.
Montaje del circuito
La placa MCP9808 llega casi ensamblada; lo único que requiere soldadura es el header de 8 pines. Usé un breakout GPIO y protoboard para conectar la Pi al sensor, simplificando cableado y facilitando ajustes futuros. Conexiones esenciales:
- Alimentación (VDD)
- Tierra (GND)
- Datos (SDA)
- Reloj (SCL)
Almacenamiento de datos
Capturar datos en el tiempo permite análisis de tendencias y correlación con eventos externos. Elegí InfluxDB por su enfoque en series temporales y lenguaje de consulta intuitivo. La base de datos corre en un Mac Mini de principios de 2009 (OS X 10.10) bajo Homebrew:
brew install influxdb
Configurar base de datos InfluxDB
Tras la instalación, creé una base de datos y usuario dedicado via consola web (puerto por defecto 8083). También configuré una base de datos llamada mcp9808_test para almacenar lecturas del sensor.
Configuración de Raspberry Pi
Habilitar I²C
La Pi no carga módulos I²C por defecto. Añade estas líneas a /etc/modules y reinicia:
i2c-bcm2708
i2c-dev
Verifica que el sensor se detecta con:
sudo i2cdetect 1
Software del sensor
Usé el wrapper Python MCP9808 de Adafruit, que también trae la capa de abstracción I²C.
Instalar dependencias de compilación
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus
Instalar wrapper Adafruit MCP9808
cd ~/Downloads
git clone https://github.com/adafruit/Adafruit_Python_MCP9808
cd Adafruit_Python_MCP9808
sudo python setup.py install
Leer, reportar, repetir
Abajo está el script poll.py que lee temperatura cada minuto y escribe el valor en InfluxDB:
#!/usr/bin/python
import time
import Adafruit_MCP9808.MCP9808 as MCP9808
from influxdb import InfluxDBClient
# Preparar payload para InfluxDB
def temperature_data(degrees_c):
return [{
'points': [[c_to_f(degrees_c)]],
'name': 'Temperature Readings',
'columns': ['degrees_f']
}]
# Convertir Celsius a Fahrenheit
def c_to_f(c):
return c * 9.0 / 5.0 + 32.0
# Inicializar sensor
sensor = MCP9808.MCP9808()
sensor.begin()
# Intervalo de captura en segundos
capture_interval = 60.0
# Conectar a InfluxDB (reemplaza placeholders con valores reales)
influxClient = InfluxDBClient('', 8086, 'mcp9808', '', 'mcp9808_test')
# Bucle continuo
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)
Ejecuta el script como root para acceder a pines GPIO:
sudo python /path/to/poll.py
Supervisión de procesos con runit
Para asegurar que poll.py permanezca vivo tras reinicios y ciclos de energía, configuré runit como supervisor de procesos. Pasos detallados en la documentación original del proyecto.
Resumen
Con el sensor, base de datos y pila de monitorización en marcha, tienes un registrador de temperatura doméstico fiable y de bajo coste. Usa Grafana para visualizar datos, configurar alertas y obtener insights accionables sobre tu entorno.
Proceso de manufactura
- Construya un registrador de temperatura con Raspberry Pi y sensor I2C de 5 $
- Perfilado preciso de temperatura en Raspberry Pi con Python, SQLite y LabVIEW
- Conectar múltiples sensores DS18B20 1‑Wire a Raspberry Pi para monitorización precisa de temperatura
- Monitor de temperatura y humedad en red con Raspberry Pi – Guía DIY completa
- Cómo leer temperatura con un DS18B20 en Raspberry Pi 2
- Monitorización profesional de temperatura con Raspberry Pi y DS18B20
- Medición de temperatura en Raspberry Pi con sensores 1-Wire Maxim y puente I2C DS2482
- Sensor infrarrojo TMP006 con Raspberry Pi: librería Python y guía de configuración
- Construya un sensor de temperatura remoto con Raspberry Pi y Python – Guía paso a paso
- Construya una estación meteorológica con Raspberry Pi que envíe datos diarios por email
- Monitorización precisa de temperatura en armario de servidores con Raspberry Pi