Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター
Raspberry Piを入手し、Eben Upton著『Raspberry Pi User Guide』のGPIO章を復習した後、最初のプロジェクトとして家庭温度監視システムに取り組みました。この記事では、Raspberry Pi、Adafruit MCP9808ブレークアウト、古いMac Mini、InfluxDB、Grafana、Python、runitプロセススーパーバイザーを用いた初期イテレーションを詳述します。
センサーハードウェア
温度センサーにはAdafruit MCP9808ブレークアウトボードを選択。理由は:
- ネイティブI²Cインターフェース – PiのGPIOピン3(SDA)と5(SCL)が必要なバスをサポート
- 幅広い電圧範囲(2.7V〜5.5V) – Piの3.3Vと5Vレール両対応
- コスト効率 – 5ドル未満、初心者の最初のプロジェクトに最適
回路組み立て
MCP9808ボードはほぼ組み立て済みで、必要なのは8ピンヘッダーのはんだ付けのみ。GPIOブレークアウトとブレッドボードでPiとセンサーを接続し、配線をシンプルに、将来の調整も容易に。必須接続は:
- 電源(VDD)
- グランド(GND)
- データ(SDA)
- クロック(SCL)
残りのピン(アドレス選択用とアラート用)は今回の単一デバイス構成では未接続。
データストア
時系列データ取得でトレンド分析や外部イベントとの相関が可能。時系列特化と直感的なクエリ言語でInfluxDBを選択。データベースは初期2009年製Mac Mini(OS X 10.10)上でHomebrew経由で稼働:
brew install influxdb
InfluxDBデータベース設定
インストール後、Webコンソール(デフォルトポート8083)でデータベースと専用ユーザーを作成。センサー読み取り値を格納するmcp9808_testデータベースもセットアップ。
Raspberry Pi設定
I²C有効化
PiはデフォルトでI²Cモジュールを読み込みません。/etc/modulesに以下を追加し再起動:
i2c-bcm2708
i2c-dev
センサー検出確認:
sudo i2cdetect 1
センサーソフトウェア
AdafruitのMCP9808 Pythonラッパーを活用。I²C抽象化レイヤーも同梱。
ビルド依存関係インストール
sudo apt-get update
sudo apt-get install build-essential python-dev python-smbus
Adafruit MCP9808ラッパーインストール
cd ~/Downloads
git clone https://github.com/adafruit/Adafruit_Python_MCP9808
cd Adafruit_Python_MCP9808
sudo python setup.py install
読み取り、報告、繰り返し
以下は毎分温度を読み取りInfluxDBに書き込むpoll.pyスクリプト:
#!/usr/bin/python
import time
import Adafruit_MCP9808.MCP9808 as MCP9808
from influxdb import InfluxDBClient
# InfluxDB用ペイロード準備
def temperature_data(degrees_c):
return [{
'points': [[c_to_f(degrees_c)]],
'name': 'Temperature Readings',
'columns': ['degrees_f']
}]
# 摂氏→華氏変換
def c_to_f(c):
return c * 9.0 / 5.0 + 32.0
# センサー初期化
sensor = MCP9808.MCP9808()
sensor.begin()
# 取得間隔(秒)
capture_interval = 60.0
# InfluxDB接続(プレースホルダーを実値に置換)
influxClient = InfluxDBClient('', 8086, 'mcp9808', '', 'mcp9808_test')
# 無限ループ
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)
GPIOピンアクセスのためrootで実行:
sudo python /path/to/poll.py
runitによるプロセス監視
poll.pyがリブートや電源サイクル後も生存し続けるよう、runitをプロセススーパーバイザーとして設定。詳細手順は元プロジェクトドキュメントを参照。
まとめ
センサー、データベース、監視スタックが揃い、信頼性の高い低コスト家庭温度ロガーが完成。Grafanaでデータを可視化し、アラート設定、環境への実用的インサイト獲得が可能です。
製造プロセス
- 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
- Python、SQLite、LabVIEWによるRaspberry Pi高精度温度プロファイリング
- 複数DS18B20 1-WireセンサーをRaspberry Pi接続で精密温度監視
- Raspberry Pi温度・湿度ネットワークモニター – DIYセットアップガイド
- Raspberry Pi 2でDS18B20温度センサー読み取りガイド
- Raspberry PiとDS18B20によるプロフェッショナルな温度監視
- Raspberry PiでMaxim 1-WireセンサーとDS2482 I2Cブリッジを用いた温度測定
- Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
- Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
- Raspberry Piで気象観測ステーションを構築し、日次天気データをメール送信
- Raspberry Piでサーバークローゼットの温度を正確に監視