概要
ラズパイとDHT11を使用して、周囲の温度を測定し、データベースに保存する
用意するもの
ラズパイ 3-4
DHT11 本体
自分の環境は ラズパイ 3 b+ に上のDHT11モジュールを使用しています。
参考サイト
https://www.souichi.club/raspberrypi/temperature-and-humidity/
ピン配置は上の通り
プログラム
実はPythonにあまり触れたことがなく、知識も浅いのでとりあえずJSONにしてコマンドラインで出力を行うことにした。
import GPi.GPIO as GPIO import dht11 import time import datetime import json # ◆儀式◆ # 詳しくはわかりません GPIO.setwarnings(True) GPIO.setmode(GPIO.BCM) # Output が GPIO 4 なので # pin=4 になります ins = dht11.DHT11(pin=4) while True: result = ins.read() if result.is_valid(): # JSON 出力用に辞書作成 d = dict() # 日付 d["date"] = str(datetime.datetime.now()) # 温度 d["temp"] = result.temperature # 湿度 d["humi"] = result.humidity # 出力 print(json.dumps(d, ensure_ascii=False, indent=2)) break # 取得失敗 # 1秒待って再度チャレンジ time.sleep(1) GPIO.cleanup()
コマンドラインで実行すると
{ "date": "2021-06-18 20:29:05.163202", "humi": 48.0, "temp": 28.1, }
というようなデータが取れるようになります。
データベースに保存するのにはPHPを使用します。
以下のようなコードでJSONを取得できます。
$raw = shell_exec("python output.py"); $json = json_decode($raw, true);
shell_exec でコマンドを実行して、出力データを $raw に代入し、
$raw を json_decode で配列に変換しています。
温度は $json[“temp”] で取得できるようになっています。
あとはこのデータをデータベースに保存するだけです。