Raspberry Pi 3
暑くなってきました。
相変わらずネコカメラは稼働中ですが、こう暑くなるとネコたちが大丈夫か心配になります。
エアコンはつけているもののそれが適温なのかわからないため、応急処置でカメラで温度、湿度計を撮影するようにしていました。
でもさすがにちょっとアナログすぎるのでラズパイにセンサーをつけて測ってみることに。
ウチには3とzeroの2台ありますが、zeroはピンヘッダがついてないタイプ(自分でつける)なので3で試しました。
GPIO
測る前にGPIOについて理解を深めることに。
以下のサイトを参考にいわゆる「Hello, world」的なモノをやってみました。
「抵抗つけないと爆発する」みたいな記述を見かけたので怖かったのですが、無事実装。
抵抗は330Ωを使用。
光るだけで嬉しい。
だいたいどんなもんかわかったところで次へ。
温湿度センサー
DHT11という温度・湿度センサーを選択。3つで650円くらいでした。
HiLetgo 3個セット DHT11温度センサー モジュール湿度センサーモジュール デュポンラインと付属 Arduinoと互換
posted with amazlet at 19.01.26
HiLetgo
売り上げランキング: 3,078
売り上げランキング: 3,078
以下を参考に実装。
しかし・・・温度も湿度も取得できない。
安いものだから元々故障してたかな・・・?
しまいにハンダ臭くなってくる・・・
よく見たら購入したDHT11は+と-が逆でした。
基板にご丁寧に書いてあったのにちゃんと見てなかったです・・危ない。
サンプル動かしてとりあえず取得できるように。
ただ、思ってた以上に精度が悪い。
さらに取得できないタイミングも結構ある。
まあおもちゃみたいな値段のものだからしょうがないか・・
IFTTTとgoogleスプレッドシート
温度や湿度の集計はgoogleスプレッドシートにすることにしました。
直接API叩くことも出来るけど、手っ取り早くIFTTTで連携。
トリガーはWebhooks。
以下のようなほとんどサンプルのpythonスクリプト作ってcronで一定時間ごとにセンサーをチェックしてPOST。
temp.py
# -*- coding: utf-8 -*-
import requests
import json
import datetime
import dht11
import RPi.GPIO as GPIO
#define GPIO 14 as DHT11 data pin
Temp_sensor=14
def post(t,h):
_time=datetime.datetime.now().strftime("%Y/%m/%d %H:%M:%S")
payload = {
"value1": _time,
"value2": t,
"value3": h
}
headers = {'content-type': 'application/json'}
requests.post("https://maker.ifttt.com/trigger/XXXXXXXX/with/key/XXXXXXXXXXXXXXXX", data=json.dumps(payload), headers=headers)
def main():
# Main program block
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM) # Use BCM GPIO numbers
# Initialise display
# lcd_init()
instance = dht11.DHT11(pin = Temp_sensor)
#get DHT11 sensor value
result = instance.read()
print"Temperature = ",result.temperature,"C"," Humidity = ",result.humidity,"%"
return result.temperature, result.humidity
if __name__ == '__main__':
t, h = main()
post(t,h)
取得できないタイミングはあるけど、ほぼ取得できてる。
こうしてグラフになるとセンサーが仕事してる感じします。
まとめ
センサーの精度にはがっかりしましたが、GPIO使っていろいろするの楽しいです。
もうちょっと勉強していろいろ出来るようになりたいところ。
あとは日中どうなるかチェックしてネコに快適な環境を構築できれば任務完了です。