gpt4 book ai didi

python - 通过 api 从树莓派 (DHT22) 收集温度在第二次尝试时失败

转载 作者:行者123 更新时间:2023-12-03 19:10:03 26 4
gpt4 key购买 nike

我有一个 DHT22 连接到我的 raspberry pi 4 B 型,连接如下:
enter image description here
我为树莓派写了一个小脚本,用来获取温度和湿度。我通过本地网络的 IP 地址提供了这个脚本。为此,我使用了两个库来试图找出错误:Flask 和 Jaymon/Endpoints。
在本地运行脚本时,一切正常。当我使用 Postman 调用端点时,我得到了温度和湿度,正如预期的那样。但是,当我第二次调用同一个端点时,我收到以下错误:

RuntimeError: Timed out waiting for PulseIn message. Make sure libgpiod is installed.
发生这种情况时,我需要重新启动网络服务器并重新开始:我可以调用 api 一次并获得正确的结果,但第二次尝试失败。
这是我尝试过的脚本之一:
from endpoints import Controller

import adafruit_dht import board

class Default(Controller): def GET(self):
dht_device = adafruit_dht.DHT22(board.D4)

data = {
"temperature": dht_device.temperature,
"humidity": dht_device.humidity
}

return data
该问题特别在调用 dht_device.temperature/dht_device.warmity 时发生。当我忽略这一点时,我可以毫无问题地调用端点。
需要明确的是:我确实在 Raspberry Pi 上安装了 libgpiod。
编辑 : 我安装了 libgpiod2 ,正如答案之一所建议的那样。
有没有人知道这里可能存在什么问题?提前致谢!

最佳答案

你写了:

class Default(Controller):
def GET(self):
dht_device = adafruit_dht.DHT22(board.D4)

data = {
"temperature": dht_device.temperature,
"humidity": dht_device.humidity
}

return data
你需要这样的东西:
class Default(Controller):
def __init__(self):
super().__init__(self)
self.dht_device = adafruit_dht.DHT22(board.D4)

def GET(self):
data = {
"temperature": self.dht_device.temperature,
"humidity": self.dht_device.humidity
}
return data
您遇到的问题是每次调用端点时都会创建一个新实例。第一个实例被正确创建并且可以访问信息,但是第二个和连续的实例被第一个实例阻止。

关于python - 通过 api 从树莓派 (DHT22) 收集温度在第二次尝试时失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62491159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com