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

*

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

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

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

  関連記事

Raspberry Pi ZERO + L-03D + IIJmioを使ってネットに接続する

野外のソーラーパネル&ラズパイからネットに繋ぎたい ソーラーパネルで給 …

みんなのラズパイコンテストにて受賞しました

ラズパイマガジンと日経Linux、日経ソフトウエア様の みんなのラズパイコンテス …

穂竜はじめました

先日新しく45cm水槽を立ち上げてまして穂竜という金魚を飼いはじめました。 高頭 …

Raspberry Pi2に2台のカメラを繋いで同時配信する

水槽増えたんだけどまたパイ買うの? 先日新しく45cm水槽を買いまして買ったなら …

金魚水槽の照明をパワーアップさせたい

金魚水槽のページでON/OFFできるようにしている照明ですが、 やっぱ1Wパワー …

穂竜水槽を引っ越しました

穂竜さん入院 金魚水槽のページで配信していた45cm水槽の穂竜ですが、 どうやら …

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

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

45cm水槽を修理してみた

大昔に使ってた45cm水槽が出てきたので洗って使おうと思ったんですが水漏れしてま …

WordPressでモバイルの時はサイドウィジェットを非表示にしたい

私のブログ重すぎ・・・!? 外出先でモバイルから自分のブログ見るとサイドに置いて …

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

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