大阪近郊で活動するフリーランスエンジニアのブログです 技術情報とか趣味など

*

Raspberry Pi2で室温、水温を計測してグラフ表示する

   

Raspberry Pi2に水温計と温度計を取り付け、10分ごとに室温と水温を計測してさくらVPSへ送信
送ったデータを記録してグラフ表示して可視化する

温度計を取り付ける

ものづくりエクスペリメントさんを参考に防水温度センサと温度センサ DS18B20を2つ取り付ける
防水温度センサはAitendoで買うと2線のものになってたので2線の場合はIT工房Zさん参照してください
私はよく解らなかったのでビクトリーセブンで3線タイプのものを買い直しました

配線はググって出てきた配線図の通りに
ds1820connect

配線が終わったらコンソールからデバイスを確認

ls /sys/bus/w1/devices
28-01146537b1ff  28-0414681d12ff  w1_bus_master1

28-01146537b1ff 28-0414681d12ff IDは各自で異なります
どちらが水温計でどちらが室温計なのか線を抜き差しして特定しておきます

温度計測

ターミナルからコマンドで確認 t=の所を1000で割ると温度になります

cat /sys/bus/w1/devices/28-01146537b1ff/w1_slave
bd 01 55 00 7f ff 0c 10 da : crc=da YES
bd 01 55 00 7f ff 0c 10 da t=27812

cat /sys/bus/w1/devices/28-0414681d12ff/w1_slave 
75 01 55 00 7f ff 0c 10 2b : crc=2b YES
75 01 55 00 7f ff 0c 10 2b t=23312

シェルスクリプト化

sudo vi /usr/local/bin/room_temp 

#!/bin/sh
DEVID="28-0414681d12ff"

cat /sys/bus/w1/devices/$DEVID/w1_slave \
     | perl -e 'while(<stdin>){ if(/t=([0-9]+)/){print $1/1000,"\n";} }'

コピって水温用にDEVIDだけ書き換えたものも用意しておきます

権限を与えて実行

sudo chmod +x /usr/local/bin/room_temp
room_temp
23.25

サーバーへ送信する

取得したデータをさくらVPSへPOST
参考サイトから丸コピしてデータ部分を追記

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

require 'uri'
require 'net/http'

def http_request(method, uri, query_hash={})
    query = query_hash.map{|k, v| "#{k}=#{v}"}.join('&')        #ハッシュをオプションの書式に変換
    query_escaped = URI.escape(query)

    uri_parsed = URI.parse(uri)
    http = Net::HTTP.new(uri_parsed.host)

    case method.downcase!
    when 'get'
        return http.get(uri_parsed.path + '?' + query_escaped).body
    when 'post'
        return http.post(uri_parsed.path, query_escaped).body
    end
end

#cpu
cpu_temp = `cat /sys/class/thermal/thermal_zone0/temp`
cpu_usage = `mpstat | sed -n '4,4p' | awk '{ print $3 }' | tr -d '\n'`

#mem
usedmem = `free -m | sed -n '3,3p' | awk '{ print $3 }' | tr -d '\n'`
totalmem = `free -m | sed -n '2,2p' | awk '{ print $2 }' | tr -d '\n'`
mem_usage = totalmem.to_f.quo(usedmem.to_f)

#room
room_temp = `/usr/local/bin/room_temp`

#water
water_temp = `/usr/local/bin/water_temp`


http_request('POST', 'ポスト先URL', {:cpu_temp => cpu_temp.to_f.quo(1000), :cpu_usage => cpu_usage, :room_temp => room_temp,:water_temp => water_temp, :mem_usage => mem_usage})

オマケでCPU温度CPU使用率メモリ使用率も取得するよう設定してみました

cronに仕込んで10分おきに送信する

crontab -e
*/10 * * * * /usr/local/bin/send-temp > /dev/null 2>&1

POSTされたデータをDBに登録する

これはもう普通のWebアプリと一緒
さくらVPS側でphpを使って実装 やる気の感じられないPHPコードがこちら

<?php
require_once('./db_conf.php');
$pdo = getPDO();
$stmt = $pdo->prepare("INSERT INTO STAT (cpu_temp,room_temp,water_temp,cpu_usage,mem_usage,assay) VALUES (:cpu_temp,:room_temp,:water_temp, :cpu_usage, :mem_usage, NOW())");

foreach($_POST as $key => $value) {
        $stmt->bindValue(':'.$key, $value);
}

$stmt->execute();
$pdo = null;
?>

ラスパイから温度送信rubyファイルを叩いたりした後、さくらVPS上でデータを確認

select * from STAT order by id desc;
+------+----------+-----------+------------+-----------+-----------+---------------------+
| id   | cpu_temp | room_temp | water_temp | cpu_usage | mem_usage | assay               |
+------+----------+-----------+------------+-----------+-----------+---------------------+
| 1165 |    30.40 |     23.19 |      27.81 |      9.32 |     17.49 | 2015-04-19 19:40:03 |
| 1164 |    30.40 |     23.19 |      27.81 |      9.32 |     17.49 | 2015-04-19 19:30:03 |
| 1163 |    30.40 |     23.25 |      27.81 |      9.32 |     16.85 | 2015-04-19 19:20:04 |
| 1162 |    30.40 |     23.31 |      27.81 |      9.32 |     17.83 | 2015-04-19 19:10:03 |
| 1161 |    30.94 |     23.38 |      27.81 |      9.32 |     17.17 | 2015-04-19 19:00:05 |
| 1160 |    30.40 |     23.38 |      27.81 |      9.32 |     17.17 | 2015-04-19 18:50:03 |
| 1159 |    30.40 |     23.44 |      27.81 |      9.32 |     17.49 | 2015-04-19 18:40:04 |
| 1158 |    30.40 |     23.25 |      27.88 |      9.32 |     17.49 | 2015-04-19 18:30:03 |
| 1157 |    29.86 |     23.25 |      27.88 |      9.32 |     17.49 | 2015-04-19 18:20:04 |
| 1156 |    30.94 |     23.31 |      27.88 |      9.32 |     17.49 | 2015-04-19 18:10:03 |

あとはグラフ化ですが長くなってきたので次回
完成品は金魚水槽ページで確認できますのでどうぞ

 - php, Raspberry Pi, ruby, 金魚 , , ,

  • このエントリーをはてなブックマークに追加
  • にほんブログ村 観賞魚ブログ 金魚へ

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  関連記事

RaspberryPi2で動画配信しながら写真も撮りたい

金魚デカくなった? 金魚にエサやってると4月の初頭から飼い始めた琉金が1周り大き …

Raspberry Pi2を使ってリモートで餌やりをする

ブログからガレージの金魚にエサをやる 以前からやろうやろうと先延ばしにしてたエサ …

Raspberry Pi ZEROでGW-450D2(無線LANドングル)を使う

ZERO買っちゃった Pimoroniで入荷しているのを見たのでRaspberr …

エサやりボタンを撤去しました

寒い! 寒くなってきましね。 水温を10度を切り始めたので、プラ舟ページに配置し …

プラ船の金魚がネコに襲撃された

ガレージに出してるプラ船がネコにやられました・・・ これはひどい どうもカメラを …

穂竜水槽のフィルターを交換

穂竜が挟まる! 金魚水槽のページで配信している穂竜たちですが、非常にドン臭く よ …

Raspberry Pi2で室温、水温を計測してグラフ表示する その2

前回でRaspberry PiからさくらVPSへ計測したデータを飛ばして登録でき …

Raspberry Pi2で外部から水槽のLEDを点灯する

外部からネット越しに金魚水槽のLEDを点灯させたい WebIOPiというライブラ …

福だるま購入しました

福だるま?玉サバ? ちょっと前、寝室に60cm水槽に立ち上げた水槽へ福だるまを4 …

Raspberry Pi ZEROをソーラーパネルで動かす

ソーラーパネルでラズパイ! 以前からソーラーパネルを使って電源の要らないRasp …