开发者问题收集

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

2020-09-27
8069

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

因此,我安装了库 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#

由于回溯表示

'Unknown platform.'

我对 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 传感器获取数据?

2个回答

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

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

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

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

对于例如:

{your path}/Adafruit_Python_DHT/Adafruit_DHT/

编辑 platform_detect.py : - 在函数 pi_version() 中 [大约第 112 行] 将 RPI-4b ( BCM2711 ) 的 BCM 设备值添加到 BCM 类型的 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 文件。 

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

Quisp
2021-07-11

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

通过使用 Filezilla,我连接到我的 Raspberry Pi 4,我导航到 Adafruit_Python_DHT/Adafruit_DHT/ 并在本地电脑上下载了 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

并且库正常工作,返回我的传感器跟踪的值

Temp=22.3* Humidity=54.1%

Tms91
2020-10-08