带烧瓶的RPI dht22:无法将第4行设置为输入-等待PulseIn消息超时

问题描述 投票:1回答:1

我正在尝试制作一个可通过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代码,则可以使用。

python flask raspberry-pi hardware
1个回答
0
投票

找到进程libgpiod_pulsein并杀死它解决了问题。

在您的终端中,搜索进程ID:

pgrep libgpiod_pulsein

kill <PID>(从上面发现-您可能正在运行多个)


我在使用DHT11时遇到了完全相同的事情。在我的情况下,我必须终止该进程:libgpiod_pulsein

[在全新启动时进行了第一次尝试,但是随后的执行将失败。更改我正在使用的GPIO并运行该程序具有相同的效果,第一次工作,随后的尝试将失败,例如:

无法将第4行设置为输入

等待PulseIn消息超时

等待PulseIn消息超时...

© www.soinside.com 2019 - 2024. All rights reserved.