(2021-12-01 初稿 - 2022-08-28 修正)
以前にRaspberry Piで、DHT22が付いたAM2302というセンサーで温湿度を測り、飽差を計算する記事を書いた。
記事をアップした当初は正常に動作したが、新たにインストールしたRaspberry Piでは動作しなくなってしまった。
確かに、当時使っていたライブラリのサイトを見ると、DEPRECATED LIBRARYとなっており、現在は推奨されていない。
ここでは、Adafruit社のCircuitPythonのライブラリをインストールして、温湿度を測る方法を改めて記述する。
なお、以下の方法は、Raspberry Pi のOS Bullseye相当で確認を行った。
温度と湿度のセンサー
今回の目的のために購入した温湿度センサーは以下のとおり。
1個500〜600円なので、財布には優しい。
このセンサーはDHT22が温度・湿度センサーで、既にハンダ付けされて付属のケーブルでつなぐだけのAM2302を購入した。以下、このセンサーをAM2302と呼ぶ。
AM2302のつなぎ方
AM2302とラズパイの接続を間違えるとセンサーが壊れてしまうので、注意すること。
以下に写真を載せるので、付属ケーブルの接続方法を確認すること。
+ ⇒ pin1
out ⇒ pin7
- ⇒ pin9
温度と湿度を測る
ライブラリのインストール
接続完了後、以下のとおりライブラリをインストールする。
まず、python3の pip を事前にインストール。既にインストールされていれば、不要。
$ sudo apt-get update $ sudo apt-get install python3-pip
以下のサイトに記述があるように、ライブラリをインストールする。
pip3 install adafruit-circuitpython-dht sudo apt-get install libgpiod2
温度の計測
動作のテストは、上記サイトにあるスクリプトをコピーして実行するか、以下のスクリプトを試す。
以下のスクリプトは、筆者がCronで起動するために作成したもので、temp_hum-cp.py等と名前をつけて保存する。
$cat temp_hum-cp.py #!/usr/bin/env python3 # coding: utf-8 import time import datetime import board import adafruit_dht MAXTRY = 4 # add 2021-08-20 humidity = temperature = None # Initial the dht device, with data pin connected to: # 測定の開始(4は、接続したGPIOポート) dhtDevice = adafruit_dht.DHT22(board.D4, use_pulseio=False) # mod2022-08-29 cnt = 0 while cnt < MAXTRY: try: temperature = dhtDevice.temperature humidity = dhtDevice.humidity if humidity is not None and temperature is not None: #print(temperature, humidity) break except RuntimeError as error: print(error.args[0]) time.sleep(1) cnt += 1 continue except Exception as error: dhtDevice.exit() print("Exception error") raise error # 時間の取得 now = datetime.datetime.today() # 結果の表示 print("{} {} Temperature= {:.1f} *C, Humidity= {:.1f} %".format(now.strftime("%Y-%m-%d"),now.strftime("%H:%M:%S"), temperature , humidity))
サンプルプログラムの実行
$ chmod +x temp_hum-cp.py $ python3 ./temp_hum-cp.py 2021-12-01 14:25:01 Temperature= 25.3 *C, Humidity= 40.7 %
上記のとおり、温度と湿度が表示されれば、正常に作している。
Crontab登録のためのBashスクリプトの作成
温湿度が計測できるようになったので、せっかくなのでデータを保存できるようにBashでラッパーを作成する。
ここでは、単純に ~/data ディレクトリに日付(2021-12-01.txt 等)ごとのファイルを作成し保存することとした。
このスクリプトは、t_temp_hum 等の名前にして、~/binディレクトリに保存する。
#!/bin/env bash # 測定program for AM2302 rtext=$(/home/pi/py-s/temp_hum-cp.py) set $rtext # setで要素に分解 超便利 #echo ${1} fpath="/home/pi/data/" fname=error.txt if [[ ${1} =~ [0-9]{4}-[0-9]{2}-[0-9]{2} ]]; then # 日付だったら fname=${1}.txt fi echo $rtext echo $rtext >> $fpath$fname # >> 追記
作成したBashスクリプトは以下のとおり、実行権を与えてテストする。
$ chmod +x ~/bin/t_temp_hum $ t_temp_hum 2021-12-01 14:25:01 Temperature= 25.3 *C, Humidity= 40.7 %
Crontabへの登録
出来上がったBashスクリプトは、Crontabへ登録する。
$ crontab -e
*/5 * * * * /home/pi/t-png 1>/dev/null
以上で、5分おきに温湿度を記録するようになる。
おわりに
以前の方法は非推奨とのことだったので、改めてCircuitPythonライブラリを用いた温湿度計測方法にスクリプトを書き直した。また、変更があれば、修正・追記を行う。
関連ページ