问题描述
我有一个与DHT22传感器连接的 RaspBerry Pi 4 ,我想从我的传感器中读取数据。
所以我安装了库Adafruit_DHT
sudo pip3 install Adafruit_DHT
然后,我导航到目录Adafruit_Python_DHT/examples/
,然后
我跑步
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",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。 br />
所以我敢打赌,这就是发生错误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传感器中获取数据?
解决方法
感谢 Tms91 发布此解决方案,因为它帮助找到了我在使用 DHT22 传感器时遇到的问题的核心。
我在读取 Raspberry Pi 4B 上的 DHT22 传感器时遇到问题。
当 platform_detect.py
文件尝试读取温度和湿度时,read_retry()
文件会向 Adafruit_DHT 例程 3
调用返回一个值,以识别正在使用的平台(对于 RPi4,应该返回 platform_detect.py
)。
对您的解决方案的修改对我有用,是将 RPi 4B 的 BCM(Broadcom 芯片标识符)值添加到 {your path}/Adafruit_Python_DHT/Adafruit_DHT/
文件中,(而不是失败并提供值)
例如:
platform_detect.py
编辑pi_version()
: - 在函数BCM2711
[第112 行] 中,将RPI-4b 的BCM 设备值(BCM2711
)添加到BCM 类型的if/elif 列表中。对于 Raspberry Pi 4B,# Adding the following elif to accommodate RPi4B Broadcomchip
elif match.group(1) == 'BCM2711':
# Pi 4B
return 3
是要检查的更新值:
common.py
无需更改最后的 else 语句或编辑 {your path}/Adafruit_python_DHT/folder
文件。
接下来,返回到 setup.py
,并按照 Tms91 的建议,再次运行 python3 setup.py install
:
platform_detect.py
重新安装 channel.set_permissions
文件。
如果您能够为您的平台找到正确的值,我猜这可能适用于其他类似的平台错误。
,已解决:
这不是一个干净的方法,但是它解决了我的问题。
通过使用Filezilla,我连接到Raspberry Pi 4,导航到Adafruit_Python_DHT/Adafruit_DHT/
,并在本地PC上下载了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
该库起作用,并向我返回传感器跟踪的值
温度= 22.3 *湿度= 54.1%