通过api从树莓皮(DHT22)收集温度的第二次尝试失败

2024-10-02 18:16:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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.

当这种情况发生时,我需要重新启动Web服务器,它会重新启动:我可以调用一次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.湿度时会出现此问题。如果不考虑这一点,我可以毫无问题地调用端点

明确地说:我确实在Raspberry Pi上安装了libgpiod。 编辑:我安装了libgpiod2,这是答案之一

有人知道这里可能有什么问题吗?提前谢谢


Tags: importboardadafruit脚本datadevice错误温度
3条回答

你写道:

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

您遇到的问题是,每次调用端点时都会创建一个新实例。第一个实例已正确创建并可以访问信息,但第二个和连续的实例被第一个实例阻止

我在RaspberryPi的Raspbian stretch OS中遇到了这个错误。 使用以下步骤解决

您可以尝试使用下面的命令安装libgpiod2软件包

sudo apt-get install libgpiod2

如果您得到的错误为“E:无法找到程序包libgpiod2”

那么, 使用deb软件包安装软件包

包url:https://packages.debian.org/buster/libgpiod2

wget http://ftp.cn.debian.org/debian/pool/main/libg/libgpiod/libgpiod2_1.2-3_armhf.deb

sudo dpkg -i libgpiod2_1.2-3_armhf.deb

如果由于与libgpiod1的包冲突而出现错误,请卸载libgpiod1包

sudo apt-get remove libgpiod1

然后尝试安装该软件包

sudo dpkg -i libgpiod2_1.2-3_armhf.deb

通过安装libgpiod2,Pi3的其他地方解决了这一问题:

https://github.com/adafruit/Adafruit_Blinka/issues/259

相关问题 更多 >