使用Adafruit_DHT读取DHT11时遇Unknown platform错误求助
解决Adafruit_DHT读取DHT11时的Unknown platform错误
问题描述
将DHT11传感器连接至GPIO-12(物理引脚32),使用Adafruit_DHT库编写Python脚本读取温湿度时,触发RuntimeError: Unknown platform错误。已尝试重装库、更新库、将脚本移至Adafruit_DHT目录运行等操作,问题仍未解决。
报错栈
Traceback (most recent call last): File "/home/amir-pi/Wetter_Projekt/Adafruit_Python_DHT-1.4.1/test1.py", line 8, in <module> humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/amir-pi/Wetter_Projekt/Adafruit_Python_DHT-1.4.1/Adafruit_DHT/common.py", line 94, in read_retry humidity, temperature = read(sensor, pin, platform) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/amir-pi/Wetter_Projekt/Adafruit_Python_DHT-1.4.1/Adafruit_DHT/common.py", line 80, in read platform = get_platform() ^^^^^^^^^^^^^^ File "/home/amir-pi/Wetter_Projekt/Adafruit_Python_DHT-1.4.1/Adafruit_DHT/common.py", line 63, in get_platform raise RuntimeError('Unknown platform.') RuntimeError: Unknown platform.
脚本代码
import Adafruit_DHT # 配置传感器类型和引脚(DHT11,物理引脚32对应GPIO12) sensor = Adafruit_DHT.DHT11 pin = 12 # 尝试读取温湿度数据 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin) # 检查数据是否读取成功 if humidity is not None and temperature is not None: print('温度={0:0.1f}°C 湿度={1:0.1f}%'.format(temperature, humidity)) else: print('读取传感器数据失败,请重试!')
解决方法
1. 手动指定平台类型
绕过库的自动平台检测,直接传入树莓派平台参数修改脚本:
import Adafruit_DHT from Adafruit_DHT import Raspberry_Pi sensor = Adafruit_DHT.DHT11 pin = 12 # 手动指定平台参数 humidity, temperature = Adafruit_DHT.read_retry(sensor, pin, platform=Raspberry_Pi) if humidity is not None and temperature is not None: print('温度={0:0.1f}°C 湿度={1:0.1f}%'.format(temperature, humidity)) else: print('读取传感器数据失败,请重试!')
2. 切换到兼容新版系统的库
旧版Adafruit_Python_DHT(1.4.1)对新版树莓派OS(如Bookworm)支持较差,改用官方新版库:
- 卸载旧库:
pip uninstall Adafruit_DHT - 安装新版库及系统依赖:
pip install adafruit-circuitpython-dht sudo apt-get install libgpiod2 - 新版脚本示例:
import time import board import adafruit_dht # 初始化传感器,GPIO12对应board.D12 dht_device = adafruit_dht.DHT11(board.D12) try: temperature = dht_device.temperature humidity = dht_device.humidity if humidity is not None and temperature is not None: print(f"温度={temperature:.1f}°C 湿度={humidity:.1f}%") else: print("读取传感器数据失败,请重试!") finally: dht_device.exit()
3. 修改旧库的平台检测逻辑
若坚持使用旧库,手动修改common.py的平台识别代码:
- 打开
/home/amir-pi/Wetter_Projekt/Adafruit_Python_DHT-1.4.1/Adafruit_DHT/common.py - 找到
get_platform()函数,添加树莓派硬件标识检测:def get_platform(): # 保留原有代码,新增以下判断 with open('/proc/cpuinfo', 'r') as f: cpuinfo = f.read() if 'BCM2835' in cpuinfo or 'BCM2711' in cpuinfo: return Raspberry_Pi # 原有代码继续...
内容的提问来源于stack exchange,提问作者Amir004
相关产品推荐
相关产品推荐

