0

我有一个与 DHT22 传感器连接的Raspberry Pi 4,我想从我的传感器读取数据。

所以我安装了库Adafruit_DHT

sudo pip3 install Adafruit_DHT

然后,我导航到目录Adafruit_Python_DHT/examples/,然后,

因为我有一个连接到 GPIO pi n° 4的 DHT 22传感器,

我跑

python AdafruitDHT.py 22 4

我得到

(lab_app) root@Raspberry100:/var/www/lab_app/Adafruit_Python_DHT/examples# python AdafruitDHT.py 2302 4
Traceback (most recent call last):
  File "AdafruitDHT.py", line 41, in <module>
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
  File "/var/www/lab_app/lib/python3.8/site-packages/Adafruit_DHT-1.4.0-py3.8-linux-armv7l.egg/Adafruit_DHT/common.py", line 94, in read_retry
    humidity, temperature = read(sensor, pin, platform)
  File "/var/www/lab_app/lib/python3.8/site-packages/Adafruit_DHT-1.4.0-py3.8-linux-armv7l.egg/Adafruit_DHT/common.py", line 80, in read
    platform = get_platform()
  File "/var/www/lab_app/lib/python3.8/site-packages/Adafruit_DHT-1.4.0-py3.8-linux-armv7l.egg/Adafruit_DHT/common.py", line 63, in get_platform
    raise RuntimeError('Unknown platform.')
RuntimeError: Unknown platform.
(lab_app) root@Raspberry100:/var/www/lab_app/Adafruit_Python_DHT/examples# python AdafruitDHT.py 22 4
Traceback (most recent call last):
  File "AdafruitDHT.py", line 41, in <module>
    humidity, temperature = Adafruit_DHT.read_retry(sensor, pin)
  File "/var/www/lab_app/lib/python3.8/site-packages/Adafruit_DHT-1.4.0-py3.8-linux-armv7l.egg/Adafruit_DHT/common.py", line 94, in read_retry
    humidity, temperature = read(sensor, pin, platform)
  File "/var/www/lab_app/lib/python3.8/site-packages/Adafruit_DHT-1.4.0-py3.8-linux-armv7l.egg/Adafruit_DHT/common.py", line 80, in read
    platform = get_platform()
  File "/var/www/lab_app/lib/python3.8/site-packages/Adafruit_DHT-1.4.0-py3.8-linux-armv7l.egg/Adafruit_DHT/common.py", line 63, in get_platform
    raise RuntimeError('Unknown platform.')
RuntimeError: Unknown platform.
(lab_app) root@Raspberry100:/var/www/lab_app/Adafruit_Python_DHT/examples#

由于回溯表明

“未知平台。”

我对 Adafruit_Python_DHT 库的 github 存储库做了一些研究,并找到了脚本Adafruit_Python_DHT/Adafruit_DHT/common.py
在这里,我看到有一个 If/elif 结构def get_platform(),旨在识别调用库的设备,但只有 RPi 1、2 和 3 的值分配,而 RPi 4 缺失。
所以我打赌这就是错误unknown platform发生的原因。

我浏览了库源代码并找到了目录Adafruit_Python_DHT/Adafruit_DHT/,其中最后一次提交显示“包含 Raspberry Pi 4”。
这是一个platform_detect.py似乎旨在以某种方式“升级”库以识别 Raspberry Pi 4 的模块。

所以我试图通过这样做来“升级”我的图书馆:

(lab_app) root@Raspberry100:/var/www/lab_app/Adafruit_Python_DHT/Adafruit_DHT#,

我跑

platform_detect.py

而且我没有从提示中得到任何输出,所以我想一切都很顺利。

然后我导航到目录Adafruit_Python_DHT/examples/并再次运行

python AdafruitDHT.py 22 4

但我仍然得到同样的错误。

那么如何使用 Adafruit_Python_DHT 库从连接到 GPIO pi n° 4 的 DHT22 传感器获取数据?

4

2 回答 2

2

感谢 Tms91 发布此解决方案,因为它帮助找到了我在使用 DHT22 传感器时遇到的问题的核心。

我在读取 Raspberry Pi 4B 上的 DHT22 传感器时遇到问题。

该文件在尝试读取温度和湿度时platform_detect.py向 Adafruit_DHT 例程调用返回一个值,read_retry()以识别正在使用的平台(对于 RPi4 应该返回)。3

对我有用的解决方案的修改是将 RPi 4B 的 BCM(Broadcom 芯片标识符)值添加到platform_detect.py文件中,(而不是失败并提供值)

例如:

{your path}/Adafruit_Python_DHT/Adafruit_DHT/

编辑platform_detect.py: - 在函数pi_version()[第 112 行附近] 中,将 RPI-4b ( ) 的 BCM 设备值添加到BCM2711BCM 类型的 if/elif 列表中。对于 Raspberry Pi 4B,BCM2711是要检查的更新值:

# Adding the following elif to accommodate RPi4B Broadcomchip
elif match.group(1) == 'BCM2711':
    # Pi 4B
    return 3

无需更改最后的 else 语句或编辑common.py文件。

接下来,返回{your path}/Adafruit_python_DHT/folder并按照 Tms91 的建议setup.py再次运行:

python3 setup.py install 

重新安装platform_detect.py文件。 

如果您能够为您的平台找到正确的值,我猜这可能适用于其他类似的平台错误。

于 2021-07-11T20:57:57.810 回答
0

解决了:

这不是一个干净的方法,但它解决了我的问题。

通过使用 Filezilla,我连接到我的 Raspberry Pi 4,我导航到Adafruit_Python_DHT/Adafruit_DHT/并下载platform_detect.pycommon.py我的本地电脑上。

然后我用Notepad++编辑了这两个文件,如下所示:

平台检测.py

在第 112-144 行,我替换了

else:
        # Something else, not a pi.
        return None

和:

else:
# Something else, like PI 4 MODEL B
# my personal changes to the code
    return 3

常见的.py

在第 62-63 行,我替换了:

else:
    raise RuntimeError('Unknown platform.')

和:

else:
    #raise RuntimeError('Unknown platform.')
    """Use Pi 2 driver even though running on Pi 4"""
    #my personal changes to the code, do it only if you are using a RPi 2, 3 or 4.
    from . import Raspberry_Pi_2
    return Raspberry_Pi_2

然后我保存了这两个文件并将它们上传到我的 RPi4 上的同一目录中,从而重写了旧文件。

然后,在我的命令提示符下,我运行

sudo su

然后我打开虚拟环境并导航到 /var/www/lab_app/Adafruit_Python_DHT,在这里我运行:

python setup.py install

现在安装了库,而我的提示没有显示任何平台检测错误。

最后我导航到/var/www/lab_app/Adafruit_Python_DHT/examples并运行:

python AdafruitDHT.py 22 4

图书馆工作,返回我的传感器跟踪的值

温度=22.3* 湿度=54.1%

于 2020-10-08T00:22:11.170 回答