第二次尝试从 raspberry pi (DHT22) 到 api 收集温度失败

Gathering temperature from raspberry pi (DHT22) through api failes on second attempt

我有一个 DHT22 连接到我的 raspberry pi 4 模型 B,连接方式如下:

我为 raspberry pi 写了一个小脚本,用来获取温度和湿度。我通过本地网络的 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,作为建议的答案之一。

有人知道这里的问题是什么吗?提前致谢!

这已通过安装 libgpiod2 为 Pi3 在其他地方解决:

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

您写道:

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