首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Adafruit_Python_DHT -覆盆子Pi)在get_platform RuntimeError中:未知平台

(Adafruit_Python_DHT -覆盆子Pi)在get_platform RuntimeError中:未知平台
EN

Stack Overflow用户
提问于 2020-09-27 22:15:02
回答 2查看 4.1K关注 0票数 1

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

所以我安装了库DHT

代码语言:javascript
运行
复制
sudo pip3 install Adafruit_DHT

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

因为我有一个DHT22传感器连接到GPIOπn°4

我跑

代码语言:javascript
运行
复制
python AdafruitDHT.py 22 4

我得到了

代码语言:javascript
运行
复制
(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#

因为回溯表明

“未知的平台”

我对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 4”。

这里有一个模块platform_detect.py,它的设计似乎是为了“升级”库,以便识别Raspberry Pi 4。

因此,我尝试通过这样做来“升级”我的库:

(lab_app) root@Raspberry100:/var/www/lab_app/Adafruit_Python_DHT/Adafruit_DHT#中,

我跑

代码语言:javascript
运行
复制
platform_detect.py

我没有从提示符中得到任何输出,所以我想一切都进行得很顺利。

然后导航到目录Adafruit_Python_DHT/examples/并再次运行。

代码语言:javascript
运行
复制
python AdafruitDHT.py 22 4

但我还是会犯同样的错误。

那么,如何使用DHT22库从连接到GPIO n°4的DHT22传感器获取数据呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-11 20:57:57

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

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

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

@tms91 91解的一个修改就是将RPi 4B的BCM (Broadcom芯片标识符)值添加到platform_detect.py文件中(而不是失败并提供一个值)。

例如:

代码语言:javascript
运行
复制
{your path}/Adafruit_Python_DHT/Adafruit_DHT/

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

代码语言:javascript
运行
复制
# Adding the following elif to accommodate RPi4B Broadcomchip
elif match.group(1) == 'BCM2711':
    # Pi 4B
    return 3

不需要更改最后的the语句或编辑common.py文件。

接下来,返回到{your path}/Adafruit_python_DHT/folder,并按照Tms91的建议,再次运行setup.py

代码语言:javascript
运行
复制
python3 setup.py install 

重新安装platform_detect.py文件。

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

票数 2
EN

Stack Overflow用户

发布于 2020-10-08 00:22:11

已解决:

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

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

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

平台

在第112-144 I行取代

代码语言:javascript
运行
复制
else:
        # Something else, not a pi.
        return None

通过以下方式:

代码语言:javascript
运行
复制
else:
# Something else, like PI 4 MODEL B
# my personal changes to the code
    return 3

common.py

在第62-63行,我取代:

代码语言:javascript
运行
复制
else:
    raise RuntimeError('Unknown platform.')

通过以下方式:

代码语言:javascript
运行
复制
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上的同一个目录中,从而重写了旧的文件。

然后,使用命令提示符,我运行

代码语言:javascript
运行
复制
sudo su

然后我打开虚拟环境并导航到/var/www/lab_app/Adafruit_Python_DHT,然后在这里运行:

代码语言:javascript
运行
复制
python setup.py install

现在,在安装库时,没有我的提示,也没有显示任何平台检测错误。

最后,我导航到/var/www/lab_app/Adafruit_Python_DHT/examples并运行:

代码语言:javascript
运行
复制
python AdafruitDHT.py 22 4

库工作,返回我的传感器跟踪的值。

Temp=22.3* Humidity=54.1%

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64093805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档