You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4B运行DHT11测试脚本报错:OverflowError: unsigned short超出最大值

问题描述

在树莓派4B上运行测试DHT11传感器的Python脚本时,触发OverflowError: unsigned short is greater than maximum错误。

测试代码:

import adafruit_dht, board

print("Current temperature is " + str(adafruit_dht.DHT11(board.D21).temperature))

完整报错信息:

Traceback (most recent call last):
  File "/home/murrakhm/Desktop/temp_v1.py", line 3, in <module>
    print("Current temperature is " + str(adafruit_dht.DHT11(board.D21).temperature))
  File "/home/murrakhm/.local/lib/python3.9/site-packages/adafruit_dht.py", line 274, in temperature
    self.measure()
  File "/home/murrakhm/.local/lib/python3.9/site-packages/adafruit_dht.py", line 219, in measure
    pulses = self._get_pulses_pulseio()
  File "/home/murrakhm/.local/lib/python3.9/site-packages/adafruit_dht.py", line 149, in _get_pulses_pulseio
    pulses.append(self.pulse_in.popleft())
OverflowError: unsigned short is greater than maximum
解决方法
  • 更换传感器读取库:弃用adafruit_dht,改用更稳定的dht11库。
    安装命令:

    pip install dht11
    

    示例代码:

    import RPi.GPIO as GPIO
    import dht11
    
    GPIO.setwarnings(False)
    GPIO.setmode(GPIO.BCM)
    GPIO.cleanup()
    
    sensor = dht11.DHT11(pin=21)
    result = sensor.read()
    
    if result.is_valid():
        print(f"Current temperature is {result.temperature}")
    else:
        print(f"读取失败,错误码: {result.error_code}")
    
  • 修复adafruit_dht库的溢出问题:找到库文件/home/murrakhm/.local/lib/python3.9/site-packages/adafruit_dht.py,修改_get_pulses_pulseio方法中的脉冲读取代码:
    将第149行的:

    pulses.append(self.pulse_in.popleft())
    

    修改为:

    pulses.append(int(self.pulse_in.popleft()))
    

    通过将无符号短整型转换为Python原生int类型,避免溢出报错。

  • 检查硬件连接:确认DHT11的VCC接3.3V(禁止接5V,会导致信号异常),GND可靠接地,DATA引脚连接GPIO21,必要时在DATA和VCC之间添加10kΩ上拉电阻,排除接触不良问题。

内容的提问来源于stack exchange,提问作者Mur Rakhm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 13:45:47