4

我有一个 DHT22 连接到我的树莓派 4 型号 B,连接如下: 在此处输入图像描述

我为树莓派写了一个小脚本,它应该得到温度和湿度。我通过本地网络的 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.humidity 时特别出现。当我忽略它时,我可以毫无问题地调用端点。

需要明确的是:我确实在 Raspberry Pi 上安装了 libgpiod。 编辑:我安装了libgpiod2,作为建议的答案之一。

有人知道这里可能出现的问题吗?提前致谢!

4

3 回答 3

1

你写了:

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

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

于 2020-06-23T11:45:06.273 回答
1

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

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

于 2020-06-20T20:49:51.330 回答
0

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

您可以尝试使用以下命令安装 libgpiod2 包

sudo apt-get install libgpiod2

如果您收到错误消息“E: Unable to locate package libgpiod2”

然后, 使用 deb 包安装包

包地址: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
于 2021-08-20T05:38:00.957 回答