我正在尝试制作一个可通过DHT22提供温度和湿度的Raspberry Pi 3 REST API。整个代码:
from flask import Flask, jsonify, request
from sds011 import SDS011
from adafruit_dht import DHT22
import board
import os
import time
app = Flask(__name__)
dht = DHT22(board.D4)
def get_dht_data():
while True:
try:
temperature, humidity = dht.temperature, dht.humidity
print(temperature, humidity)
if temperature is not None and humidity is not None:
return temperature, humidity
else:
raise
except:
time.sleep(0.5)
@app.route('/', methods=['GET'])
def status():
temperature, humidity = get_dht_data()
return jsonify({
'temperature': temperature,
'humidity': humidity
})
if __name__ == '__main__':
app.run(debug=True)
我使用了https://github.com/adafruit/Adafruit_CircuitPython_DHT
但是,当我启动服务器时,它显示消息
'无法将第4行设置为输入'
并且温度和湿度始终为None
。如果我不运行flask应用程序,而仅运行DHT代码,则可以使用。
找到进程libgpiod_pulsein
并杀死它解决了问题。
在您的终端中,搜索进程ID:
pgrep libgpiod_pulsein
和
kill <PID>
(从上面发现-您可能正在运行多个)
我在使用DHT11时遇到了完全相同的事情。在我的情况下,我必须终止该进程:libgpiod_pulsein
。
[在全新启动时进行了第一次尝试,但是随后的执行将失败。更改我正在使用的GPIO并运行该程序具有相同的效果,第一次工作,随后的尝试将失败,例如:
无法将第4行设置为输入
等待PulseIn消息超时
等待PulseIn消息超时...