読者です 読者をやめる 読者になる 読者になる

自宅の温度湿度を RaspberryPi2 でログ取り始めた

はじめに

自分のコンテキストを書いておく。
電子工作経験はほぼなし。
10年前、パトランプのXFD体験イベントに参加した先輩からデバイス完成品を譲ってもらったレベル。
たぶんそのイベントはこのへん
電子工作のウデマエは1といって差し支えないだろう。

準備

買ったものは以下のとおり

f:id:khei-fuji:20151225205944j:plain

結果

ログはこんな感じで確認できる。

f:id:khei-fuji:20160104145918p:plain

それぞれ温度と湿度。

サーバー代を惜しんで RaspberryPi2 内にログを残している。
そのためログは自宅内でしか確認できない。


RaspberryPi はリビングの一角に設置している。

f:id:khei-fuji:20160103094625j:plain

手前に向かって生えているのがDHT22センサー。

手順

ざっくり以下のように行った。
詳細は後述。

  • 初期設定
  • センサー(DHT22/AM2302)取り付け
  • 温度湿度データ取得テスト
  • ログ保存
  • ログ取得

初期設定

ローカライズ

locale やタイムゾーンなどを日本に変更。
このあたりを参考に。
Raspberry Pi 2の文字コードを変更する(日本語の設定) - wide_snow’s blog

ネットワーク

巷では無線LANの事例が多いが、ケチって RaspberryPi2 は有線LANで利用する。

スターターキットでは etc/network/interfacesdhcp ではなく manual に設定されていたため、自分で一度 dhcp に変更した。
その際は問題が起きたが以下の記事によって解決した。
linux - DHCP failure when rebooting RPI 2 - Super User

その後static に変更して終わり。
Raspberry Pi 2 IPアドレスを固定(有線LAN)にする - カタカタブログ

センサー(DHT22/AM2302)取り付け

ケーブルなどを細かく買うのが煩わしかったので、買ったのはモジュール化済みの DHT22。

f:id:khei-fuji:20160102142450j:plain

DHT22や互換性があるDHT11の情報はググれば多い。
が、モジュール化されたものの情報は見つからず、どう接続したらいいかわからなかった。
そこで基本をおさえることに。
下記サイトが大変わかりやすかった。

Raspberry Piで電子工作!Lチカ…の前にLピカ! | Device Plus - デバプラ


RaspberryPi のような機器では大きく分けて3つの接続先が用意されている。
電源、アース、入出力だ。
モジュールの + は電源、- はアース、out は出力、ということでそれぞれ 1, 9, 7 に接続した。

温度湿度データ取得テスト

GitHub に公開されているスクリプトを使ってテストする。

adafruit/Adafruit_Python_DHT · GitHub

サンプルのスクリプト example/AdafruitDHT.py を実行すると以下の結果が得られた。

Temp=20.3*  Humidity=37.3%

このスクリプトは以下サイトから知った。
Raspberry pi + pubnub で温度と湿度のリアルタイムグラフ表示 | ネットワークエンジニアを目指して - ブログ

このスクリプトを後で流用する。

ログ保存

GrowthForecast を使ってログの蓄積・可視化を行っている。

導入はこのへんを参考にすれば大体解決。


GrowthForecast の起動スクリプトは雑だが下のような形に落ち着いた。

世の中の記事を見ると GrowthForecast が小数対応する前の情報が多いが、今なら --enable-float-number オプションで小数が使える。


このスクリプトSupervisor に呼び出してもらう。

Supervisor の導入についてはこちらを参考。

GrowthForecast を CentOS 6.3 にインストールして Supervisor で管理する - 彼女からは、おいちゃんと呼ばれています

ログ取得

データ蓄積は、前述の example/AdafruitDHT.py を真似たスクリプトを cron で実行し、結果を GrowthForecast に投げることで解決する。


Adatemp.py 22 4 の 22 は DHT22、4 は RaspberryPi の7番が GPIO 4 なのでそれを指定している。
ここで実行している Adatemp.pyAdahumit.py は、AdafruitDHT.pycp してつくったスクリプト
それぞれファイルの最後から2番目の print を以下のように書き換える。

print '{0:0.1f}'.format(temperature)
print '{0:0.1f}'.format(humidity)

あとは作成したスクリプトを cron で実行すればいい。

最後に

ここまでの作業はすべて1日以内で完了した。
連休でちょっと試してみるにはほどよい作業量だと思う。
これが1万円でできるなんてすごい世の中になったものだと実感。

今後やってみたいこと。

  • どうせなら屋外にも設置する
  • 定期的に自分にプッシュ通知する


興味を持った方は下から購入してもらえると嬉しい。


Raspberry Piスターターパック (Pi2 用Standard)

Raspberry Piスターターパック (Pi2 用Standard)