(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.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
然后我保存了这两个文件并上传到我的树莓派上的同一个目录,从而重写了旧的。
然后,在我的命令提示符下,我 运行
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
文件。
我猜如果您能够为您的平台找到正确的值,这可能适用于其他类似的平台错误。
我有一个 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.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
然后我保存了这两个文件并上传到我的树莓派上的同一个目录,从而重写了旧的。
然后,在我的命令提示符下,我 运行
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) 当它试图读取温度和湿度时。
对 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
文件。
我猜如果您能够为您的平台找到正确的值,这可能适用于其他类似的平台错误。