(Adafruit_Python_DHT - Raspberry Pi) in get_platform RuntimeError: Unknown platform

(Adafruit_Python_DHT - Raspberry Pi) in get_platform RuntimeError: Unknown platform

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

所以我安装了库Adafruit_DHT

sudo pip3 install Adafruit_DHT

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

因为我有一个 DHT22 传感器连接到 GPIO pin n° 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", 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()用来识别调用库的设备,但是只有树莓派1、2、3有赋值,而树莓派4是不见了。
所以我敢打赌这就是错误 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 传感器获取数据?

已解决:

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

通过使用 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

然后我保存了这两个文件并上传到我的树莓派上的同一个目录,从而重写了旧的。

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

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 发布此解决方案,因为它有助于找到我一直运行使用 DHT22 传感器解决的问题的核心。

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

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

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

例如:

{your path}/Adafruit_Python_DHT/Adafruit_DHT/

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

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

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

接下来,return 到 {your path}/Adafruit_python_DHT/folder 并且,如 Tms91 所建议的那样,运行 再次 setup.py

python3 setup.py install 

重新安装 platform_detect.py 文件。

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