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

Raspberry Pi使用DHT22+LCD16x2采集温湿度报NoneType格式错误如何解决

树莓派DHT22温湿度采集报错解决方案

报错原因

你遇到的TypeError: unsupported format string passed to NoneType.__format__错误根因如下:

  • DHT22为单总线协议传感器,易受线路干扰、接触不良、供电波动影响导致单次读取失败,Adafruit_DHT.read_retry接口读取失败时会返回(None, None),空值无法直接用0.1f浮点数格式串做格式化处理
  • 你的代码还存在两处基础语法问题:没有用try块包裹主逻辑就直接写了except KeyboardInterrupt捕获,且全代码缩进混乱,不符合Python语法规范,即使解决格式问题也无法正常运行

修复方案

直接替换为修正后的代码即可,代码新增了读取失败的容错逻辑,修正了语法和缩进问题:

import drivers # 导入自定义LCD显示驱动
import socket
import struct
import fcntl
import time
import os
import re
from time import sleep
import Adafruit_DHT

DHT_PIN = 4
disp = drivers.Lcd() # 初始化LCD显示屏

def tempcpu():
    for _ in range(5):
        # 读取CPU温度
        cputemp = os.popen("vcgencmd measure_temp").readline() 
        celsius = re.sub("[^0123456789\.]", "", cputemp)
        # 读取DHT22温湿度
        h,t = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, DHT_PIN)
        # 显示内容容错处理
        disp.lcd_display_string("CpuRpi: {}C".format(celsius), 1)
        if h is not None and t is not None:
            disp.lcd_display_string("T={0:0.1f}C H={1:0.1f}%".format(t,h), 2 )
        else:
            disp.lcd_display_string("Sensor read failed!", 2)
        sleep(1)

if __name__ == "__main__":
    try:
        while True:
            tempcpu()
            disp.lcd_clear()
    except KeyboardInterrupt:
        # 按下Ctrl+C时清理退出
        disp.clear()
        sleep(1)
        disp.backlight(0)
        exit()

额外排查建议

如果频繁出现传感器读取失败提示,可按以下顺序排查硬件问题:

  • 检查DHT22的VCC是否接3.3V(接5V有概率烧毁传感器或导致读取不稳定)
  • 检查数据引脚是否接对GPIO4(物理引脚为7号),是否松动
  • 可在数据引脚和VCC之间串联一个4.7K~10K的上拉电阻增强信号稳定性
  • 避免传感器线路和强电线路并行走线减少干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:48:03