おはようございます。じぇいかわさきです。
さて、前回日付を付加して、何時の温湿度データなのかがわかるようにしました。
今回は、そのデータをいよいよDBに格納するためにCSV形式のファイルとして出力ができるようにします。

最初にやるべきこと
普段業務で、ExcelやAccessなどを使用してファイルの書き出しや、読み込みを何気なく実施していますが、ラズパイでファイルのやり取りをするには、それなりの下準備が必要なんですね。
調べていくと、まず今使用している言語のPythonで、外部ファイルを操作するには、ファイル操作用のライブラリーを最初に読み込まないと使えないのですね。
何かを使用とした時、外部から全てライブラリーを読み込んであげないと動かないのがPythonなんですね。
逆に言うと、ライブラリーさえ読み込めれば何でもできるという裏返しではないでしょうか。
ということから、まずしなければいけないのは以下の内容だと認識しました。
- 外部ファイルを操作するライブラリーを読み込む
- データを格納するための、ファイルパスを定義する
- 指定パスにファイルが無ければ、新規にファイルを作成する
- 指定パスにファイルがあれば、そのファイルにデータを追加する
プログラムの修正
それでは、先の項目内容を前回までのプログラムに対して修正をしていきます。
import RPi.GPIO as GPIO
import dht11
import datetime
import os /* 外部ファイル操作ライブラリーを読み込むfileName = ‘ /home/pi/rasptemp//temp_hmdt.csv’ /* ファイルの保存先を変数fileNameに格納する
tempGpio = 4GPOI.setmode(GPIO.BCM)
dhtStart = dht11.DHT11(pin = tempGpio)if not os.path.exists(fileName): /* もし、所定の場所にfileNameがなければ次の処理を実行する
thData = open(fileName, ‘w’) /* fileNameの保存先と名前で新規ファイルを作成する
thData.write(‘date_time,temp,hmdt\n’) /* ファイルに日付、温度、湿度を書き込む
thData.close() /* ファイルをクローズするwhile True:
stat = dhtStat.read()
now = str (datetime.datetime.now())[0:16]
data = [now,stat.temperature,stat.humidity]
if stat.temperature == stat.humidity == 0:
continue
thData = opem(fileName, ‘a’) /* fileNameを追記モードで開く
thData.write (‘,’.join(map(stat,data)) + ‘\n’ ) /* ファイル配列にdataの内容をカンマ区切りで書き込む
thData.close() /* ファイルをクローズする
break
[ads]


これで日付付の温湿度データをCSV形式で格納する準備が出来ました。
まとめ
今まで一連で実施してきた、ラズパイとDHT11センサーを使用しての温湿度のデータ取得ですが、今回まででいちようCSVファイルでの書き出しができるはずになりました。
できるはずというのは、このままでは、いちいち人が1分毎や10分ごとにプログラムを実行させなければいけないと言うこと。
従って、自動で実行するのではないので、本当にデータが所定時間で取得してCSVファイルに書き込んでいけるのか、未だわかりません。
まずは、人が適当な間隔でプログラムを実行させて、期待通りのデータをCSVファイルとして格納できるのかをまずは見る必要があります。
今後は、まずこのCSVファイルに期待値が保存されるのかを確認検証し、その後は自動でプログラムが動くことを確認し、最終的には、一定時間で測定後に値をDBに格納していくようにしたいと考えています。
なかなか先に進みませんが、一歩一歩実行していくことで、何をしなければいけないのかを確認しながら進められるので、逆におじさんとしては非常に楽しいですね。
知っている人から見たら、もっとシャキシャキやれって言われるかもしれませんが、世のしらないおじさんと一緒に歩んでいく流れなのでご勘弁ください。
まだまだ続きます。次もよろしく願いしますね。
[twt]
