Adafruit_Python_DHT-Raspberry Pi在get_platform RuntimeError中:未知平台

问题描述

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

所以我安装了库Adafruit_DHT

sudo pip3 install Adafruit_DHT

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

因为我有一个DHT 22 传感器连接到GPIO引脚 4

我跑步

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",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。 br /> 所以我敢打赌,这就是发生错误unkNown platform的原因。

我浏览了库源代码,然后找到目录Adafruit_Python_DHT/Adafruit_DHT/,其中最后一次提交显示为“ included 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传感器中获取数据?

解决方法

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

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

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

对您的解决方案的修改对我有用,是将 RPi 4B 的 BCM(Broadcom 芯片标识符)值添加到 {your path}/Adafruit_Python_DHT/Adafruit_DHT/ 文件中,(而不是失败并提供值)

例如:

platform_detect.py

编辑pi_version(): - 在函数BCM2711 [第112 行] 中,将RPI-4b 的BCM 设备值(BCM2711)添加到BCM 类型的if/elif 列表中。对于 Raspberry Pi 4B,# Adding the following elif to accommodate RPi4B Broadcomchip elif match.group(1) == 'BCM2711': # Pi 4B return 3 是要检查的更新值:

common.py

无需更改最后的 else 语句或编辑 {your path}/Adafruit_python_DHT/folder 文件。

接下来,返回到 setup.py,并按照 Tms91 的建议,再次运行 python3 setup.py install 

platform_detect.py

重新安装 channel.set_permissions 文件。

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

,

已解决:

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

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

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

platform_detect.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

common.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%