Raspberry Piで水温計を作る(2)

イメージ
前回でRaspberry Pi2に接続した水温計から温度を拾えるようになりました。
このデータをネット経由で確認することがゴールですが、ひとまずお手軽にdatadogでグラフを描画したいと思います。
datadogは本来はサーバ監視向けのサービスですが、任意の値を送ればそれもグラフ化してくれる上に、Web APIからも取得可能と、公開を考えなければグラフツールとしてもかなり使い勝手がよいです。


datadog-agentの導入
datadogにデータを送信するため、datadog-agentをRaspberry Piにインストールします。
https://app.datadoghq.com/account/settings#agent/source

~/.datadog-agent/ に一式がインストールされますが、上記ページの説明によれば適当に移動できるとのこと。

エージェントの起動cd ~/.datadog-agent bin/agent start
この時点でCPUやメモリの使用率など、基本的なメトリクスはdatadogに送信されるようになりますが、流石に温度計のデータは拾ってくれません。
datadog公式のサンプルと、前回の温度を拾うスクリプトを組み合わせて、スクリプトをでっち上げます。

(thermo.py)
import os import glob import time from datadog import initialize from datadog import statsd os.system('modprobe w1-gpio'); os.system('modprobe w1-therm'); base_dir = '/sys/bus/w1/devices/' device_folder = glob.glob(base_dir + '28*')[0] device_file = device_folder + '/w1_slave' # datadog client options = { 'api_key':'API_KEY', 'app_key':'APP_KEY' } …

Raspberry Piで水温計を作る(1)

やりたいこと

私は小さな水槽で熱帯魚を飼っているのですが、夏場はあっというまに水温が上がってしまい、仕事中も魚たちが茹だっていないか、たいへん心配です。
そこで遠隔地から水温をモニタリングしたい。観測してそのあとどうするかはそのときに考えます。

完成イメージ

下記のサイトをなぞりながら、遠隔値の水温計をスマートフォンでモニターすることを目指します。
センサから拾った温度を適当なサーバにアップし、Web APIとしてスマートフォンから確認できればよさそうだなと思っています。
まずはRasberry Piをセットアップするところから始めましょう。なお、電子工作は未経験です。

https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/overview

Raspberry Pi セットアップ

Raspberry Pi の初期設定にとりかかります。

用意したもの

(以下はセットアップ時のみ使用)
  • HDMIディスプレイ / ケーブル
  • USBマウス / キーボード

OSのセットアップ

NOOBSというブートローダ込みのパッケージを利用してOSをセットアップします。
詳細は公式のガイドラインを参照してください。
https://www.raspberrypi.org/learning/software-guide/quickstart/
(日本語) https://okuzawats.com/noobs-20150603/

NOOBSのダウンロード

NOOBSとNOOBS Liteの2種類のパッケージを選択できます。
NOOBSはOSイメージも含んでいるのに対し、Liteはインストール時にダウンロードするのが違いです。
ここではNOOBSを採用しました。

https://www.raspberrypi.org/downloads/noobs/

NOOBSの準備

NOOBSのアーカイブを展開し、できたフォルダ配下のファイルをすべてSDカードにコピーします。
アーカイブは再セットアップにそなえ、適当な場所に保管しておきましょう。

ハードウェアの準備

電源を入れる前に、SDカード(とキーボードなど)を取り付けておきます。

OSのインストール

  1. 基板上のmicro USB端子にUSBケーブルを差し込む。
    電源スイッチはないため、これだけで起動する。
  2. 画面下部のプルダウンで適切なキーボードレイアウトを選択する。
  3. 画面中央のダイアログで Raspbian を選択し、「インストール」をクリック。
  4. インストール開始時に「SDカードの内容が失われる」旨の確認ダイアログが表示される。「Yes」を選択。
  5. あとは自動で進行する。
  6. インストール終了後に初期ユーザでログインした状態でGnomeが起動する。

OS初期設定

あとは通常のdebianのようにapt-upgrade, 各種設定などを必要に応じてやっておきます。

sshで操作したい場合、初期ユーザは説明書に記載されている通り、
ID: pi
pass: raspberry
となっています。

水温計をRaspberry Piへ取り付ける


使用したRaspberry Piのモデルがチュートリアルと違っていたため、配線図はそのまま使用できませんでしたが、次のようになりました。


温度計から出ているケーブルの色がチュートリアルと違っていたため、だいぶ悩みましたが、
赤 : VDD
黄色 : DQ
黒 : GND
で良かったようです。

なお、仕上がりはこうなりました。



Raspberry Pi上での設定

センサが1-Wireという規格でデータ転送を行うため、OS側でもそれに対応するモジュールをロードさせるようです。(どう見てもセンサからは3本ケーブルが出ていますが…)
https://learn.adafruit.com/adafruits-raspberry-pi-lesson-11-ds18b20-temperature-sensing/ds18b20

(/boot/config.txt)
# Uncomment this to enable the lirc-rpi module
#dtoverlay=lirc-rpi
dtoverlay=w1-gpio
※編集後にrebootすること

sudo modprobe w1-gpio
sudo modprobe w1-therm

ここまで問題なく進んでいれば、 /sys/bus/w1/devices/28-xxxx/ (xxxxは任意) というディレクトリが現れ、w1_slave というファイルにセンサーから拾った温度が書き込まれているはずです。

動作確認

w1_slaveはアクセスされるたびに更新される仕様のようです。
定番のtail -f が使えないのでwatchで毎秒内容を表示して確認としましょう。

watch -n1 -e 'cat w1_slave'

(出力)

右下の "t=29312" の部分が摂氏を1000倍した値になります。

今後

以後はプログラムで適当なサーバにデータを転送し、Web APIとして配信できるようにすることが目標です。

コメント

このブログの人気の投稿

Raspberry Piで水温計を作る(2)