MENU
カタログクリップ
本ページはプロモーションを含みます。

Raspberry piで大気圧と温度を記録してグラフにして他のPCからグラフを見る

2018 11/01
広告
コンピューター 電子工作
2014年7月26日2018年11月1日

前エントリの続きです。前エントリでは、大気圧・温度センサのRaspberry Piへの接続を行っています。

概要

次の機能を一つのpythonコードに押し込んで、(root権限の)crontabで定期的に(5分ごとないしは、20分ごと)実行して、pngグラフ作成までを行う。

  • i2cでLPS331から、大気圧と温度を読んできて、ファイルに書き出す。
  • ファイルから読み込んで、グラフにする。

このグラフを外のPCから読めるように簡易httpサーバを立てて、pngにリンクする。
他のPCのブラウザから接続すると、こんな感じになる。
f:id:beiz23:20140726222355p:image:w350

httpサーバ

pythonの一行で建てれる簡易サーバを使った。
SimpleHTTPServer
次の一行をコマンドラインから実行するとサーバが立ちます。well-knownポートを使う場合はroot権限がいるかもしれないので、8000番とした。コマンドを実行したディレクトリ以下を外から見ることができる。pngのあるディレクトリをまるごと見せるか、そこにindex.htmlでも置けば良い。


python -m SimpleHTTPServer 8000
crontabの設定

$ sudo crontab -e

として次の行を追加。


*/5 * * * * /home/pi/pressure-logger.py
データファイル形式

次のよう。


20140726-2210 1006.48 31.45
20140726-2212 1006.35 31.40
20140726-2215 1006.37 31.34
スクリプト(pressure-logger.py)はこちら。

matplotlibによるグラフ作成の部分はトラ技2014年7月号(これもお借りしてきた)をだいぶ参考にした。


#!/usr/bin/python

import smbus
import time
import datetime
import matplotlib as mpl
matplotlib.use('Agg')
import matplotlib.dates
import matplotlib.pyplot
logpath = '/home/pi/press/'
logfile = 'pressure.log'
graphfile = 'graph.png'
nh = 2000 #number of history to plot

class pressureSens:
    """ pressure sensor LPS331 controled through i2c interface """
    def __init__(self, addr = 0x5d):
        self.i2c = smbus.SMBus(1)
        self.addr = addr
        self.i2c.write_byte_data(self.addr, 0x20, 0x94) #CTRL_REG1 dev. on, 1 Hz update, block data update

    def get_press(self):
        return ((self.i2c.read_byte_data(self.addr, 0x2a) * 0x10000) + (self.i2c.read_byte_data(self.addr, 0x29) * 0x100) + self.i2c.read_byte_data(self.addr, 0x28)) / 4096.0

    def get_temp(self):
        #print "%X" % ((self.i2c.read_byte_data(self.addr, 0x2c) * 0x100) + self.i2c.read_byte_data(self.addr, 0x2b))
        return -((((self.i2c.read_byte_data(self.addr, 0x2c) * 0x100) + self.i2c.read_byte_data(self.addr, 0x2b)) - 1) ^ 0xffff) / 480. + 42.5

    def chk(self):
        return (0xbb == self.i2c.read_byte_data(self.addr, 0x0f))



def makeGraph():
    f = open(logpath + logfile, 'r')
    dates = []
    prs = []
    tmp = []

    for line in f:
    #print line[0:13],line[14:21], line[22:27]
        dates.append(datetime.datetime.strptime(line[0:13], "%Y%m%d-%H%M"))
        prs.append(float(line[14:21]))
        tmp.append(float(line[22:27]))

    #print dates

    x = mpl.dates.date2num(dates)
    #print len(x), x[len(x)-2:len(x)]

    fig = mpl.pyplot.figure()
    ax1 = fig.add_subplot(111)
    l = len(x)
    ax1.plot_date(x[l-nh:l], prs[l-nh:l], 'r')
    ax2 = ax1.twinx()
    ax2.plot_date(x[l-nh:l], tmp[l-nh:l], 'b')

    ax1.set_title("Pressure and Temperature")
    ax1.set_xlabel("Date and Time")
    ax1.set_ylabel("Pressure (mbar)", color='r')
    ax2.set_ylabel("Temperature (degC)", color='b')
    y_formatter = mpl.ticker.ScalarFormatter(useOffset=False)
    ax1.yaxis.set_major_formatter(y_formatter)
    fig.savefig(logpath + graphfile)



def main():
    p = pressureSens()
    #print p.chk()
    #print "%.2f" % p.get_press()
    #print "%.1f" % p.get_temp()
    wbuf = "%s %.2f %.2f\n" % (time.strftime('%Y%m%d-%H%M'), p.get_press(), p.get_temp())
    #print wbuf

    f = open(logpath + logfile, 'a')
    f.write(wbuf)
    f.close()

    makeGraph()


if __name__ == '__main__':
    main()

 

おすすめのラズパイ用センサー

このように、センサー類があるとラズパイの応用の幅がぐっと広がります。

2017年2月現在、Amazonで取扱の20種類のセンサーセットが3,980円に値下げされています。

このセットをひとつ買っておけばしばらく遊べるので、おすすめです。

ベスト センサーモジュール キット 20種セット for Arduino / raspberry pi 3 モデル B raspberry pi 2 Model B 収納ケース付き

ベスト センサーモジュール キット 20種セット for Arduino / raspberry pi 3 モデル B raspberry pi 2 Model B 収納ケース付き(温度センサー/ホール効果センサー/赤外線トラッキングセンサー/タッチセンサー/マイク・サウンドセンサー/デジタル温度&湿度センサー/3色フルカラー SMD LEDモジュール/赤外線リモコン受信モジュール/赤外線送信モジュール/Bluetooth モジュールリレー モジュール/レーザーセンサー/遮光センサー/水銀チルトセンサー/リードスイッチ/火炎検知センサー/赤外線障害物検知センサー/土壌湿度検出モジュール/光センサー/可燃ガス&煙センサー)

センサーの一覧は次のとおりです。

温度センサー/ホール効果センサー/赤外線トラッキングセンサー/タッチセンサー/マイク・サウンドセンサー/デジタル温度&湿度センサー/3色フルカラー SMD LEDモジュール/赤外線リモコン受信モジュール/赤外線送信モジュール/Bluetooth モジュールリレー モジュール/レーザーセンサー/遮光センサー/水銀チルトセンサー/リードスイッチ/火炎検知センサー/赤外線障害物検知センサー/土壌湿度検出モジュール/光センサー/可燃ガス&煙センサー

センサー1種類あたり200円と、なかなかお買い得です。

 

おすすめのラズパイ本

センサー類を扱う方法を知りたい場合には、次の本がおすすめです。

2017/1/31に出版されたばかりのRspberry Pi 3対応の本です。

Raspberry Pi 3でつくる IoTプログラミング

Raspberry Pi 3でつくる IoTプログラミング

基本に立ち返って勉強し直したい場合は、定番のこの本でしょうか。

これ1冊でできる! ラズベリー・パイ 超入門 改訂第3版

これ1冊でできる! ラズベリー・パイ 超入門 改訂第3版

 

以上、Raspberry piで大気圧と温度を記録してグラフにして他のPCからグラフを見る、でした。

コンピューター 電子工作
highlightjs

関連記事

  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
    2025年4月16日
  • AXE5400VとAX80Vの3つの違い。[Wi-Fiルーター]
    2025年4月7日
  • Archer AXE5400とAX80の3つの違い。[Wi-Fiルーター]
    2025年4月7日
  • Archer AXE5400とAX5400の3つの違い。[Wi-Fiルーター]
    2025年4月6日
  • Archer AX3000とAX1800の2つの違い。[Wi-Fiルーター]
    2025年4月6日
  • Archer AX3000VとAX23Vの2つの違い。[Wi-Fiルーター]
    2025年4月5日
  • Archer AX80とAX5400の3つの違い。[Wi-Fiルーター]
    2025年4月5日
  • Archer AX80VとAX73Vの3つの違い。[Wi-Fiルーター]
    2025年4月5日
カテゴリー
  • コンピューター
    • gnuplot & eps
    • mac
    • matplotlib
    • wordpress
  • ホーム・家電
    • アイロン
    • オーディオ
    • オーラルケア
      • ジェットウォッシャー
      • 音波振動歯ブラシ
    • カメラ
    • カー用品
    • クリーナー
    • テレビ、レコーダー
    • ドアホン
    • メンズ美容家電
      • ラムダッシュ
    • ルンバ
    • 一覧比較
    • 工具
    • 浄水器
    • 温水洗浄便座
    • 炊飯器
    • 空気清浄機・加除湿機
    • 空調・季節家電
    • 美容家電
      • フェイスケア
      • ヘアケア
      • ボディーケア
    • 血圧計
    • 調理器具
    • 電子レンジ
  • 健康
  • 家事
    • パン
    • 料理
    • 育児
    • 食品
      • おせち
      • コーヒー
  • 書籍
  • 知識
  • 趣味
    • ペン字
    • ロードバイク・クロスバイク
    • 車
    • 鉄道模型
    • 電子工作
サイト内検索
最近の投稿
  • モナークHGとモナークM7の4つの違い。[ニコン双眼鏡]
  • ニコン モナーク M7とM5の4つの違い。[双眼鏡]
  • Speed Wi-Fi DOCK 5G 01の実機使用レビュー。
  • RZ-760、GT-760、ST-760の違い。[ガス缶・CB缶]
  • RZ-730、RZ-730S、RZ-730SBK、RZ-730SWH、ST-Y450の違い。
  • TC-EA35WとTC-E123SBKの違いを比較。[スティッククリーナー]
  1. ホーム
  2. コンピューター
  3. Raspberry piで大気圧と温度を記録してグラフにして他のPCからグラフを見る
  • ホーム
  • プライバシーポリシー

© カタログクリップ
contact@beiznotes.org

目次