树莓派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
相关产品推荐
相关产品推荐

