質問
「スマート温湿度計を作ろう」でDHT22センサーの「動作を確認する」のところでdht22.pyを実行してもエラーが表示され、実行できません。
回答
アップデートによりOSバージョンが上がったことが関係していると思われます。対処法ですが、代替となるライブラリを使うことで解消できるかと思います。
手順としては以下の通りです。
(1)下記コマンドでライブラリをインストール
pip3 install adafruit-circuitpython-dht
(2)添付のサンプルプログラムをdht22.pyとしてRaspberry Pi上に作成
(3)プログラムを実行し、動作確認を行ってください。
サンプルプログラムは、テキスト「スマート温湿度計を作ろう」のものと宣言している関数名が同じですので、動作が確認できましたら次章以降も利用できるかと思います。
サンプルプログラム (dht22.py)
import time
import adafruit_dht
from board import *
class DHT22:
def __init__(self, pin=D4, max_retry=5):
self.dht22 = adafruit_dht.DHT22(pin, use_pulseio=False)
self.temperature = None
self.humidity = None
retry = 0
while not self.is_available():
print('Trying to get proper data...')
retry += 1
if retry >= max_retry:
raise RuntimeError('Couldn\'t get sensor data while retrying.')
time.sleep(1)
def is_available(self):
self.temperature = self.get_temperature()
self.humidity = self.get_humidity()
if self.temperature and self.humidity:
return True
return False
def get_temperature(self):
try:
self.temperature = self.dht22.temperature
except RuntimeError:
# Check sum failed or insufficient data.
pass
return self.temperature
def get_humidity(self):
try:
self.humidity = self.dht22.humidity
except RuntimeError:
# Check sum failed or insufficient data.
pass
return self.humidity
if __name__ == '__main__':
sense = DHT22()
for i in range(3):
temp = sense.get_temperature()
hum = sense.get_humidity()
print(f'====={time.ctime()}=====')
print(f'Temperature: {temp}')
print(f'Humidity: {hum}')
time.sleep(1)