ラズパイとDHT22を使用して温湿度を取得しリアルタイムでグラフ化表示をしてみました。
忘備録としてやり方を記しておきます。
1.ラズパイとDHT22の接続
2.必要ライブラリ群のインストール
必要ライブラリのインストール(Matplotlibを実行するのに必要なライブラリ)
$ sudo apt install libatlas-base-dev
NumPyのインストール(数値計算ライブラリ)
$ sudo apt-get install python3-numpy
Matplotlib のインストール(グラフ表示ライブラリ)
$ sudo apt-get install python3-matplotlib
3.プログラム作成
センサーから取得した温湿度グラフを2軸グラフにして2秒毎に
リアルタイム更新で表示していくようにしました。
# coding: utf-8
import MyPyDHT
import time
import datetime
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
##グラフの設定
max_plot_number = 30#グラフに表示する点数を30個に設定
x = []#空の配列x作成(日時の配列)
y1 = []#空の配列y1作成(温度の配列)
y2 = []#空の配列y2作成(湿度の配列)
ax1 = plt.subplot()#ax1にグラフプロット
ax2 = ax1.twinx()#ax2にax1との2軸グラフ(温度と湿度の2軸グラフ作成)
try:
while True:
ss=0#値の取得判定の変数初期化
while ss< 1:#値が取得できるまで(ss=1となるまで繰り返す)
try:
#センサー制御取得----------------------------------------------------
#4は、接続したGPIOポート
humidity, temperature = MyPyDHT.sensor_read(MyPyDHT.Sensor.DHT22, 4)
#------------------------------------------------------------------
ss=1#値が取得できた時はss=1とする
except:#値の取得ができなかった時の処理
ss=0#値が取得できたときはss=0とする
x.append(datetime.datetime.now())#配列xに現在の日時を追加する
y1.append(temperature)#配列y1に取得した温度を追加する
y2.append(humidity)#配列y2に取得した湿度を追加する
ax1.set_ylabel("[℃]")#主軸のy軸のラベルを[℃]にする
ax2.set_ylabel("[%rh]")#第2軸のy軸のラベルを[%rh]にする
plt.setp(ax1.get_xticklabels(),rotation=90)#x軸(時刻)のラベルを90°回転して縦書きにする
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))#x軸(時刻)の表示形式を(時間:分:秒)にする
ax2.set_ylim(0,100)#第2軸のスケールを最小値0,最大100にする
ax1.plot(x[-max_plot_number:],y1[-max_plot_number:],'-',color = "red",label= "temperature")#時刻、温度の配列の後ろから設定した最大プロット数分グラフに表示する。線タイプ、赤色、凡例の名前をtemperatureにする。
ax2.plot(x[-max_plot_number:],y2[-max_plot_number:],'-',color ="blue",label = "humidity")#時刻、湿度の配列の後ろから設定した最大プロット数分グラフに表示する。線タイプ、青色、凡例の名前をhumidityにする。
ax1.legend(bbox_to_anchor = (0.5,1.15))#主軸の凡例を(0.5,1.15)の位置(中央の上)に表示する
ax2.legend(bbox_to_anchor = (0.5,1.1))#第2軸の凡例を(0.5,1.1)の位置(中央の上)に表示する
plt.pause(2)#グラフの更新を2秒待つ
ax1.clear()#主軸(温度)のグラフを初期化
ax2.clear()#第2軸(湿度)のグラフを初期化
except KeyboardInterrupt:#キーを押して終了した時は何もしないでプログラムを終了する
pass
実行結果はこちら
次はcsvで出力して自動でデータをpcに保存できるようにし
温湿度ロガーの代わりに使えるようにしたいと思います。
コメント