(Adafruit_Python_DHT - Raspberry Pi)在 get_platform RuntimeError 中:未知平台
我有一个 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 传感器获取数据?
感谢 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
文件。
我猜如果您能够为您的平台找到正确的值,这可能适用于其他类似的平台错误。
这不是一个干净的方法,但它解决了我的问题。
通过使用 Filezilla,我连接到我的 Raspberry Pi 4,我导航到
Adafruit_Python_DHT/Adafruit_DHT/
并在本地电脑上下载了
platform_detect.py
和
common.py
。
然后我使用 Notepad++ 编辑了这两个文件,如下所示:
在第 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
在第 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%