2021年3月31日水曜日

Raspberry Pi Zero WHを使って、格安で温湿度データロガーを作る。(2/2)【Pythonスクリプトの作成】

Raspberry Pi Zero WHを使って、格安で温湿度データロガーを作る。(1/2)【準備編】」の続きです。

基本的な作業は「Raspberry Piで温度と湿度を定期的に取得してスプレッドシートに記録する。」と同じになります。

ただ、使用している温湿度センサー(DHT22/AM2302)のライブラリが異なりますので、そちらに対応したPythonスクリプトだけ載せておきます。


***

▼ Pythonスクリプト


Raspberry Piにて測定した温度と湿度の値を、スプレッドシートの「fromPi」シート(こちら参照)に書き込むためのPythonスクリプトです。

#!/usr/bin/env python3

import Adafruit_DHT
import time
import gspread
import json

from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']

credentials = ServiceAccountCredentials.from_json_keyfile_name('JSONファイル名(絶対パスで記述)', scope)

gc = gspread.authorize(credentials)

SPREADSHEET_KEY = 'スプレッドシートID'

worksheet = gc.open_by_key(SPREADSHEET_KEY).worksheet('fromPi')

sensor = Adafruit_DHT.DHT22

pin = 4

while True:
    x = 0
    while x < 1:
        try:
            humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
            x = 1

        except:
            x = 0

    worksheet.update_cell(2,1, '{0:0.1f}'.format(temperature))
    worksheet.update_cell(2,2, '{0:0.1f}'.format(humidity))

    time.sleep(900)

書き換えが必要な箇所は、次の通りです。

・12行目「JSONファイル名(絶対パスで記述)」

絶対パスでなので、例えば「/home/pi/」から書き始めます。

こちら参照


・16行目「スプレッドシートID」

スプレッドシートを開いた状態でURLの下記部分に表示されます。ちょっと長めです。

https://docs.google.com/spreadsheets/d/ここの値をコピペ/edit#gid=0


・22行目「4」

接続したGPIO番号を記述。


・37行目「900」

測定の間隔です。秒数ですので、900ですと15分おきの測定になります。適宜変更してください。


あと、Macからリモートでぐちゃぐちゃ作業していたら、どこかのタイミングで上のPythonスクリプトの改行コードが<CR>になってしまっていて、デーモン化の際にエラーで引っ掛かりました……。

改行コードが<CR>の場合、viでファイルを開くと行末に「^M」と表示されるので、コマンドモードで一発(「:%s/^M//g」)で削除できます。(参考:「テキストファイルの行末に^Mが表示される」)


***

ということで、とりあえずはラズパイZeroを使ってスプレッドシートへの記録ができるようになりました。

夏場にハウスで使おうと思っているので、次なる課題は、電源と防水です。いろいろ試してみようと思います。


・関連投稿
Raspberry Pi Zero WHを使って、格安で温湿度データロガーを作る。(1/2)【準備編】