Construire un moniteur de température domestique avec Raspberry Pi, MCP9808, InfluxDB et Grafana
Après avoir acquis un Raspberry Pi et lu le Guide utilisateur Raspberry Pi d'Eben Upton — surtout les sections GPIO — je me suis lancé dans mon premier projet : un système de surveillance de température domestique. Ce billet détaille l'itération initiale utilisant un Raspberry Pi, une carte breakout Adafruit MCP9808, un vieux Mac Mini, InfluxDB, Grafana, Python et le superviseur de processus runit.
Matériel du capteur
Pour le capteur de température, j'ai choisi la carte breakout MCP9808 d'Adafruit. Mon choix était motivé par :
- Interface I²C native – les broches GPIO 3 (SDA) et 5 (SCL) du Pi supportent le bus requis.
- Large plage de tension (2,7 V–5,5 V) – compatible avec les rails 3,3 V et 5 V du Pi.
- Coût efficace – moins de 5 $ US, idéal pour un premier projet débutant.
Assemblage du circuit
La carte MCP9808 arrive majoritairement assemblée ; la seule soudure requise est l'attachement de l'en-tête 8 broches. J'ai utilisé un breakout GPIO et une plaque d'essai pour connecter le Pi au capteur, simplifiant le câblage et facilitant les ajustements futurs. Les connexions essentielles sont :
- Alimentation (VDD)
- Masse (GND)
- Données (SDA)
- Horloge (SCL)
Les broches restantes — utilisées pour la sélection d'adresse et l'alerte — sont restées déconnectées pour cette configuration à un seul dispositif.
Stockage des données
Capturer des données dans le temps permet l'analyse de tendances et la corrélation avec des événements externes. J'ai choisi InfluxDB pour son orientation séries temporelles et son langage de requête intuitif. La base de données tourne sur un Mac Mini début 2009 (OS X 10.10) sous Homebrew :
brew install influxdb
Configurer la base de données InfluxDB
Après l'installation, j'ai créé une base de données et un utilisateur dédié via la console web (port par défaut 8083). J'ai également configuré une base nommée mcp9808_test pour stocker les lectures du capteur.
Configuration du Raspberry Pi
Activer I²C
Le Pi ne charge pas les modules I²C par défaut. Ajoutez ces lignes à /etc/modules et redémarrez :
i2c-bcm2708
i2c-dev
Vérifiez que le capteur est détecté avec :
sudo i2cdetect 1
Logiciel du capteur
J'ai utilisé le wrapper Python MCP9808 d'Adafruit, qui inclut aussi la couche d'abstraction I²C.
Installer les dépendances de construction
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus
Installer le wrapper Adafruit MCP9808
cd ~/Downloads
git clone https://github.com/adafruit/Adafruit_Python_MCP9808
cd Adafruit_Python_MCP9808
sudo python setup.py install
Lire, reporter, répéter
Voici le script poll.py qui lit la température chaque minute et écrit la valeur dans InfluxDB :
#!/usr/bin/python
import time
import Adafruit_MCP9808.MCP9808 as MCP9808
from influxdb import InfluxDBClient
# Préparer la charge utile pour InfluxDB
def temperature_data(degrees_c):
return [{
'points': [[c_to_f(degrees_c)]],
'name': 'Temperature Readings',
'columns': ['degrees_f']
}]
# Convertir Celsius en Fahrenheit
def c_to_f(c):
return c * 9.0 / 5.0 + 32.0
# Initialiser le capteur
sensor = MCP9808.MCP9808()
sensor.begin()
# Intervalle de capture en secondes
capture_interval = 60.0
# Connexion à InfluxDB (remplacez les valeurs par les vôtres)
influxClient = InfluxDBClient('', 8086, 'mcp9808', '', 'mcp9808_test')
# Boucle continue
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)
Exécutez le script en root pour accéder aux broches GPIO :
sudo python /path/to/poll.py
Supervision de processus avec runit
Pour garantir que poll.py reste en vie après les redémarrages et cycles d'alimentation, j'ai configuré runit comme superviseur de processus. Les étapes de configuration détaillées sont dans la documentation originale du projet.
Résumé
Avec le capteur, la base de données et la pile de surveillance en place, vous disposez maintenant d'un enregistreur de température domestique fiable et peu coûteux. Utilisez Grafana pour visualiser les données, définir des alertes et obtenir des informations exploitables sur votre environnement.
Processus de fabrication
- Construire un enregistreur de température Raspberry Pi avec capteur I2C à 5 $
- Profilage température Raspberry Pi précis avec Python, SQLite et LabVIEW
- Connecter plusieurs capteurs DS18B20 1-Wire à un Raspberry Pi pour une surveillance température précise
- Moniteur réseau température et humidité Raspberry Pi — Guide de configuration DIY
- Comment lire la température avec un DS18B20 sur Raspberry Pi 2
- Surveillance de température professionnelle sur Raspberry Pi avec DS18B20
- Mesure de température sur Raspberry Pi avec capteurs 1‑Wire Maxim et pont I2C DS2482
- Capteur de température infrarouge TMP006 avec Raspberry Pi : bibliothèque Python et guide de configuration
- Construire un capteur de température distant avec Raspberry Pi et Python – Guide étape par étape